Merge pull request #580 from dbalatoni13/port

PC port work
This commit is contained in:
Dávid Balatoni 2025-04-09 02:06:50 +02:00 committed by GitHub
commit 909c743527
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
141 changed files with 7242 additions and 3522 deletions

3
.gitmodules vendored
View file

@ -1,3 +1,6 @@
[submodule "extern/musyx"] [submodule "extern/musyx"]
path = extern/musyx path = extern/musyx
url = https://github.com/AxioDL/musyx url = https://github.com/AxioDL/musyx
[submodule "extern/aurora"]
path = extern/aurora
url = https://github.com/dbalatoni13/aurora.git

136
CMakeLists.txt Normal file
View file

@ -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)

View file

@ -59,7 +59,7 @@ Linux
- For non-x86(_64) platforms: Install wine from your package manager. - 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. - 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: - Clone the repository:
@ -89,11 +89,13 @@ Building
ninja 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. - 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)
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`.

View file

@ -207,4 +207,4 @@ lbl_1_bss_19F8 = .bss:0x000019F8; // type:object size:0x20
lbl_1_bss_1A18 = .bss:0x00001A18; // type:object size:0x2 lbl_1_bss_1A18 = .bss:0x00001A18; // type:object size:0x2
stageSprId = .bss:0x00001A1A; // type:object size:0x42 data:2byte stageSprId = .bss:0x00001A1A; // type:object size:0x42 data:2byte
stageMotId = .bss:0x00001A5C; // type:object size:0x40 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

View file

@ -4620,7 +4620,7 @@ lbl_80192160 = .bss:0x80192160; // type:object size:0x100
lbl_80192260 = .bss:0x80192260; // type:object size:0x100 lbl_80192260 = .bss:0x80192260; // type:object size:0x100
wipeData = .bss:0x80192360; // type:object size:0x4C data:4byte wipeData = .bss:0x80192360; // type:object size:0x4C data:4byte
winData = .bss:0x801923C0; // type:object size:0x3000 align:32 data:byte 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 winComKeyBuf = .bss:0x801953D0; // type:object size:0x1400
ARInfo = .bss:0x801967E0; // type:object size:0x400 scope:local data:byte ARInfo = .bss:0x801967E0; // type:object size:0x400 scope:local data:byte
arqReq = .bss:0x80196BE0; // type:object size:0x20 scope:local arqReq = .bss:0x80196BE0; // type:object size:0x20 scope:local

View file

@ -4619,7 +4619,7 @@ lbl_80192160 = .bss:0x80192160; // type:object size:0x100
lbl_80192260 = .bss:0x80192260; // type:object size:0x100 lbl_80192260 = .bss:0x80192260; // type:object size:0x100
wipeData = .bss:0x80192360; // type:object size:0x4C data:4byte wipeData = .bss:0x80192360; // type:object size:0x4C data:4byte
winData = .bss:0x801923C0; // type:object size:0x3000 align:32 data:byte 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 winComKeyBuf = .bss:0x801953D0; // type:object size:0x1400
ARInfo = .bss:0x801967E0; // type:object size:0x400 data:byte ARInfo = .bss:0x801967E0; // type:object size:0x400 data:byte
arqReq = .bss:0x80196BE0; // type:object size:0x20 scope:local arqReq = .bss:0x80196BE0; // type:object size:0x20 scope:local

View file

@ -4452,7 +4452,7 @@ lbl_80192160 = .bss:0x80191E00; // type:object size:0x100
lbl_80192260 = .bss:0x80191F00; // type:object size:0x100 lbl_80192260 = .bss:0x80191F00; // type:object size:0x100
wipeData = .bss:0x80192000; // type:object size:0x4C data:4byte wipeData = .bss:0x80192000; // type:object size:0x4C data:4byte
winData = .bss:0x80192060; // type:object size:0x3000 data:byte 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 winComKeyBuf = .bss:0x80195070; // type:object size:0x1400
ARInfo = .bss:0x80196480; // type:object size:0x400 scope:local data:byte ARInfo = .bss:0x80196480; // type:object size:0x400 scope:local data:byte
arqReq = .bss:0x80196880; // type:object size:0x20 scope:local arqReq = .bss:0x80196880; // type:object size:0x20 scope:local

View file

@ -5547,7 +5547,7 @@ lbl_80192160 = .bss:0x801AF500; // type:object size:0x100
lbl_80192260 = .bss:0x801AF600; // type:object size:0x100 lbl_80192260 = .bss:0x801AF600; // type:object size:0x100
wipeData = .bss:0x801AF700; // type:object size:0x4C data:4byte wipeData = .bss:0x801AF700; // type:object size:0x4C data:4byte
winData = .bss:0x801AF760; // type:object size:0x3000 align:32 data:byte 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 winComKeyBuf = .bss:0x801B2770; // type:object size:0x1400
mesWInsert = .bss:0x801B3B70; // type:object size:0x10 scope:local mesWInsert = .bss:0x801B3B70; // type:object size:0x10 scope:local
ARInfo = .bss:0x801B3B80; // type:object size:0x400 data:byte ARInfo = .bss:0x801B3B80; // type:object size:0x400 data:byte

View file

@ -160,6 +160,7 @@ config.asflags = [
"-mgekko", "-mgekko",
"--strip-local-absolute", "--strip-local-absolute",
"-I include", "-I include",
"-I libc",
f"-I build/{config.version}/include", f"-I build/{config.version}/include",
f"--defsym version={version_num}", f"--defsym version={version_num}",
] ]
@ -192,6 +193,7 @@ cflags_base = [
"-fp_contract on", "-fp_contract on",
"-str reuse", "-str reuse",
"-i include", "-i include",
"-i libc",
"-i extern/musyx/include", "-i extern/musyx/include",
f"-i build/{config.version}/include", f"-i build/{config.version}/include",
"-multibyte", "-multibyte",
@ -270,6 +272,7 @@ cflags_musyx = [
"-nodefaults", "-nodefaults",
"-nosyspath", "-nosyspath",
"-i include", "-i include",
"-i libc",
"-i extern/musyx/include", "-i extern/musyx/include",
"-inline auto", "-inline auto",
"-O4,p", "-O4,p",

61
dol.def Normal file
View file

@ -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

1
extern/aurora vendored Submodule

@ -0,0 +1 @@
Subproject commit d9de6603c79917a5353abd3a9cc26ec557ceee05

2
extern/musyx vendored

@ -1 +1 @@
Subproject commit a170f2ef4a3f51edb89bc792dff79d55b2c42a89 Subproject commit a579f4d4abbac1c67fddf0d361291320f81a7b6c

View file

@ -29,10 +29,10 @@ typedef enum {
DEMO_STAT_IO = 4 DEMO_STAT_IO = 4
} DEMO_STAT_DISP; } DEMO_STAT_DISP;
extern unsigned char DemoStatEnable;
void DEMOSetStats(DemoStatData * stat, unsigned long nstats, DEMO_STAT_DISP disp); void DEMOSetStats(DemoStatData * stat, unsigned long nstats, DEMO_STAT_DISP disp);
void DEMOUpdateStats(unsigned char inc); void DEMOUpdateStats(unsigned char inc);
void DEMOPrintStats(void); void DEMOPrintStats(void);
void DEMOUpdateStats(unsigned char inc);
void DEMOPrintStats(void);
#endif #endif

View file

@ -20,8 +20,10 @@ void GXSetPointSize(u8 pointSize, GXTexOffset texOffsets);
void GXEnableTexOffsets(GXTexCoordID coord, GXBool line_enable, GXBool point_enable); void GXEnableTexOffsets(GXTexCoordID coord, GXBool line_enable, GXBool point_enable);
#ifdef TARGET_PC #ifdef TARGET_PC
void GXSetArray(GXAttr attr, const void* data, u32 size, u8 stride); void GXSetArray(GXAttr attr, const void* data, u32 size, u8 stride);
#define GXSETARRAY(attr, data, size, stride) GXSetArray((attr), (data), (size), (stride))
#else #else
void GXSetArray(GXAttr attr, const void* data, u8 stride); void GXSetArray(GXAttr attr, const void* data, u8 stride);
#define GXSETARRAY(attr, data, size, stride) GXSetArray((attr), (data), (stride))
#endif #endif
void GXInvalidateVtxCache(void); void GXInvalidateVtxCache(void);

View file

@ -2,8 +2,9 @@
#define _DOLPHIN_GXPRIV #define _DOLPHIN_GXPRIV
#include "dolphin/gx.h" #include "dolphin/gx.h"
#include "dolphin/os.h"
#ifdef DEBUG #ifndef NDEBUG
#define ASSERTLINE(line, cond) \ #define ASSERTLINE(line, cond) \
((cond) || (OSPanic(__FILE__, line, "Failed assertion " #cond), 0)) ((cond) || (OSPanic(__FILE__, line, "Failed assertion " #cond), 0))

View file

@ -6,7 +6,11 @@
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
#if defined(__MWERKS__) && !defined(GEKKO)
#define GEKKO #define GEKKO
#endif
#ifndef GEKKO #ifndef GEKKO
#define MTX_USE_C #define MTX_USE_C
#undef MTX_USE_PS #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); void PSMTXROMultS16VecArray(const ROMtx m, const S16Vec* srcBase, Vec* dstBase, u32 count);
#endif #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); void MTXInitStack(MtxStack* sPtr, u32 numMtx);
MtxPtr MTXPush(MtxStack* sPtr, const Mtx m); MtxPtr MTXPush(MtxStack* sPtr, const Mtx m);
MtxPtr MTXPushFwd(MtxStack* sPtr, const Mtx m); MtxPtr MTXPushFwd(MtxStack* sPtr, const Mtx m);

View file

@ -23,10 +23,15 @@ extern "C" {
#endif #endif
typedef s64 OSTime; typedef s64 OSTime;
typedef u32 OSTick; typedef u32 OSTick;
#ifdef __MWERKS__
u32 __OSBusClock AT_ADDRESS(OS_BASE_CACHED | 0x00F8); // sync with OSLoMem.h u32 __OSBusClock AT_ADDRESS(OS_BASE_CACHED | 0x00F8); // sync with OSLoMem.h
u32 __OSCoreClock AT_ADDRESS(OS_BASE_CACHED | 0x00FC); // sync with OSLoMem.h u32 __OSCoreClock AT_ADDRESS(OS_BASE_CACHED | 0x00FC); // sync with OSLoMem.h
#define OS_BUS_CLOCK (u32) __OSBusClock #define OS_BUS_CLOCK (u32) __OSBusClock
#define OS_CORE_CLOCK __OSCoreClock #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) #define OS_TIMER_CLOCK (OS_BUS_CLOCK / 4)
#ifndef _DEBUG #ifndef _DEBUG
@ -57,8 +62,8 @@ u32 OSUncachedToCached(void *ucaddr);
#define OSDiffTick(tick1, tick0) ((s32)(tick1) - (s32)(tick0)) #define OSDiffTick(tick1, tick0) ((s32)(tick1) - (s32)(tick0))
#define OSRoundUp32B(x) (((u32)(x) + 0x1F) & ~(0x1F)) #define OSRoundUp32B(x) (((size_t)(x) + 0x1F) & ~(0x1F))
#define OSRoundDown32B(x) (((u32)(x)) & ~(0x1F)) #define OSRoundDown32B(x) (((size_t)(x)) & ~(0x1F))
#define OSRoundUp(x, align) (((x) + (align)-1) & (-(align))) #define OSRoundUp(x, align) (((x) + (align)-1) & (-(align)))
#define OSRoundUpPtr(x, align) ((void*)((((u32)(x)) + (align)-1) & (~((align)-1)))) #define OSRoundUpPtr(x, align) ((void*)((((u32)(x)) + (align)-1) & (~((align)-1))))

View file

@ -9,17 +9,17 @@ extern "C" {
typedef int OSHeapHandle; typedef int OSHeapHandle;
typedef void (*OSAllocVisitor)(void *obj, u32 size); typedef void (*OSAllocVisitor)(void *obj, u32 size);
void *OSInitAlloc(void *arenaStart, void *arenaEnd, int maxHeaps); 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 OSDestroyHeap(OSHeapHandle heap);
void OSAddToHeap(OSHeapHandle heap, void *start, void *end); void OSAddToHeap(OSHeapHandle heap, void *start, void *end);
OSHeapHandle OSSetCurrentHeap(OSHeapHandle heap); OSHeapHandle OSSetCurrentHeap(OSHeapHandle heap);
void *OSAllocFromHeap(OSHeapHandle heap, u32 size); void *OSAllocFromHeap(int heap, unsigned long size);
void *OSAllocFixed(void **rstart, void **rend); void *OSAllocFixed(void **rstart, void **rend);
void OSFreeToHeap(OSHeapHandle heap, void *ptr); void OSFreeToHeap(OSHeapHandle heap, void *ptr);
long OSCheckHeap(OSHeapHandle heap); long OSCheckHeap(OSHeapHandle heap);
void OSDumpHeap(OSHeapHandle heap); void OSDumpHeap(OSHeapHandle heap);
u32 OSReferentSize(void *ptr); unsigned long OSReferentSize(void *ptr);
void OSVisitAllocated(OSAllocVisitor visitor); void OSVisitAllocated(void (*visitor)(void *, unsigned long));
extern volatile OSHeapHandle __OSCurrHeap; extern volatile OSHeapHandle __OSCurrHeap;
#define OSAlloc(size) OSAllocFromHeap(__OSCurrHeap, (size)) #define OSAlloc(size) OSAllocFromHeap(__OSCurrHeap, (size))
#define OSFree(ptr) OSFreeToHeap(__OSCurrHeap, (ptr)) #define OSFree(ptr) OSFreeToHeap(__OSCurrHeap, (ptr))

View file

@ -1,6 +1,8 @@
#ifndef _DOLPHIN_OSFASTCAST #ifndef _DOLPHIN_OSFASTCAST
#define _DOLPHIN_OSFASTCAST #define _DOLPHIN_OSFASTCAST
#include "dolphin/types.h"
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
@ -44,6 +46,7 @@ static inline void OSInitFastCast(void) {
static inline s16 __OSf32tos16(register f32 inF) static inline s16 __OSf32tos16(register f32 inF)
{ {
#ifdef __MWERKS__
u32 tmp; u32 tmp;
register u32* tmpPtr = &tmp; register u32* tmpPtr = &tmp;
register s16 out; register s16 out;
@ -55,12 +58,16 @@ static inline s16 __OSf32tos16(register f32 inF)
// clang-format on // clang-format on
return out; return out;
#else
return (s16) inF;
#endif
} }
static inline void OSf32tos16(f32 *f, s16 *out) { *out = __OSf32tos16(*f); } static inline void OSf32tos16(f32 *f, s16 *out) { *out = __OSf32tos16(*f); }
static inline u8 __OSf32tou8(register f32 inF) static inline u8 __OSf32tou8(register f32 inF)
{ {
#ifdef __MWERKS__
u32 tmp; u32 tmp;
register u32 *tmpPtr = &tmp; register u32 *tmpPtr = &tmp;
register u8 out; register u8 out;
@ -72,12 +79,16 @@ static inline u8 __OSf32tou8(register f32 inF)
// clang-format on // clang-format on
return out; return out;
#else
return (u8)inF;
#endif
} }
static inline void OSf32tou8(f32 *f, u8 *out) { *out = __OSf32tou8(*f); } static inline void OSf32tou8(f32 *f, u8 *out) { *out = __OSf32tou8(*f); }
static inline s8 __OSf32tos8(register f32 inF) static inline s8 __OSf32tos8(register f32 inF)
{ {
#ifdef __MWERKS__
u32 tmp; u32 tmp;
register u32 *tmpPtr = &tmp; register u32 *tmpPtr = &tmp;
register s8 out; register s8 out;
@ -90,12 +101,16 @@ static inline s8 __OSf32tos8(register f32 inF)
// clang-format on // clang-format on
return out; return out;
#else
return (s8) inF;
#endif
} }
static inline void OSf32tos8(f32 *f, s8 *out) { *out = __OSf32tos8(*f); } static inline void OSf32tos8(f32 *f, s8 *out) { *out = __OSf32tos8(*f); }
static inline u16 __OSf32tou16(register f32 inF) static inline u16 __OSf32tou16(register f32 inF)
{ {
#ifdef __MWERKS__
u32 tmp; u32 tmp;
register u32 *tmpPtr = &tmp; register u32 *tmpPtr = &tmp;
register u16 out; register u16 out;
@ -107,11 +122,15 @@ static inline u16 __OSf32tou16(register f32 inF)
// clang-format on // clang-format on
return out; return out;
#else
return (u16) inF;
#endif
} }
static inline void OSf32tou16(f32 *f, u16 *out) { *out = __OSf32tou16(*f); } static inline void OSf32tou16(f32 *f, u16 *out) { *out = __OSf32tou16(*f); }
static inline float __OSs8tof32(register const s8* arg) { static inline float __OSs8tof32(register const s8* arg) {
#ifdef __MWERKS__
register float ret; register float ret;
asm { asm {
@ -119,11 +138,15 @@ static inline float __OSs8tof32(register const s8* arg) {
} }
return ret; return ret;
#else
return (f32)*arg;
#endif
} }
static inline void OSs8tof32(const s8* in, float* out) { *out = __OSs8tof32(in); } static inline void OSs8tof32(const s8* in, float* out) { *out = __OSs8tof32(in); }
static inline float __OSs16tof32(register const s16* arg) { static inline float __OSs16tof32(register const s16* arg) {
#ifdef __MWERKS__
register float ret; register float ret;
asm { asm {
@ -131,11 +154,15 @@ static inline float __OSs16tof32(register const s16* arg) {
} }
return ret; return ret;
#else
return (f32)*arg;
#endif
} }
static inline void OSs16tof32(const s16* in, float* out) { *out = __OSs16tof32(in); } static inline void OSs16tof32(const s16* in, float* out) { *out = __OSs16tof32(in); }
static inline float __OSu8tof32(register const u8* arg) { static inline float __OSu8tof32(register const u8* arg) {
#ifdef __MWERKS__
register float ret; register float ret;
asm { asm {
@ -143,11 +170,15 @@ static inline float __OSu8tof32(register const u8* arg) {
} }
return ret; return ret;
#else
return (f32)*arg;
#endif
} }
static inline void OSu8tof32(const u8* in, float* out) { *out = __OSu8tof32(in); } static inline void OSu8tof32(const u8* in, float* out) { *out = __OSu8tof32(in); }
static inline float __OSu16tof32(register const u16* arg) { static inline float __OSu16tof32(register const u16* arg) {
#ifdef __MWERKS__
register float ret; register float ret;
asm { asm {
@ -155,6 +186,9 @@ static inline float __OSu16tof32(register const u16* arg) {
} }
return ret; return ret;
#else
return (f32)*arg;
#endif
} }
static inline void OSu16tof32(const u16* in, float* out) { *out = __OSu16tof32(in); } static inline void OSu16tof32(const u16* in, float* out) { *out = __OSu16tof32(in); }

View file

@ -20,6 +20,9 @@ typedef unsigned char u8;
typedef unsigned short int u16; typedef unsigned short int u16;
typedef unsigned long u32; typedef unsigned long u32;
typedef unsigned long long int u64; typedef unsigned long long int u64;
typedef u32 size_t;
typedef u32 uintptr_t;
#endif #endif
typedef volatile u8 vu8; typedef volatile u8 vu8;
@ -64,7 +67,7 @@ typedef int BOOL;
#define NULL ((void *)0) #define NULL ((void *)0)
#endif #endif
#endif #endif
#if !defined(__cplusplus) || __cplusplus < 201103L #if !defined(__cplusplus)
#ifndef nullptr #ifndef nullptr
#define nullptr NULL #define nullptr NULL
#endif #endif

View file

@ -15,6 +15,7 @@ u32 VIGetTvFormat(void);
void VISetNextFrameBuffer(void* fb); void VISetNextFrameBuffer(void* fb);
void VIWaitForRetrace(void); void VIWaitForRetrace(void);
void VISetBlack(BOOL black); void VISetBlack(BOOL black);
void VIConfigurePan(u16 xOrg, u16 yOrg, u16 width, u16 height);
#ifdef TARGET_PC #ifdef TARGET_PC
void VISetWindowTitle(const char* title); void VISetWindowTitle(const char* title);

View file

@ -4,6 +4,8 @@
#include "math.h" #include "math.h"
#include "dolphin/mtx.h" #include "dolphin/mtx.h"
#define M_PI 3.141592653589793
typedef struct vec2f { typedef struct vec2f {
float x; float x;
float y; float y;
@ -33,7 +35,7 @@ typedef struct vec2f {
#define atan2d(y, x) (180.0*(atan2((y), (x)) / M_PI)) #define atan2d(y, x) (180.0*(atan2((y), (x)) / M_PI))
#ifndef __MWERKS__ #ifndef __MWERKS__
void HuSetVecF(Vec* arg0, f32 arg8, f32 arg9, f32 argA) void HuSetVecF(Vec *arg0, f32 arg8, f32 arg9, f32 argA);
#endif #endif
#endif #endif

View file

@ -5,7 +5,7 @@
#include "game/flag.h" #include "game/flag.h"
#include "version.h" #include "version.h"
//HACK: to prevent prototype errors // HACK: to prevent prototype errors
extern void HuPadRumbleAllStop(void); extern void HuPadRumbleAllStop(void);
typedef struct player_config { typedef struct player_config {
@ -17,12 +17,12 @@ typedef struct player_config {
} PlayerConfig; } PlayerConfig;
typedef struct system_state { typedef struct system_state {
/* 0x00 */ struct { /* 0x00 */ struct {
u8 party : 1; u8 party : 1;
u8 team : 1; u8 team : 1;
}; };
/* 0x01 */ u8 diff_story; /* 0x01 */ u8 diff_story;
/* 0x02 */ struct { /* 0x02 */ struct {
u16 bonus_star : 1; u16 bonus_star : 1;
u16 explain_mg : 1; u16 explain_mg : 1;
u16 show_com_mg : 1; u16 show_com_mg : 1;
@ -30,35 +30,35 @@ typedef struct system_state {
u16 mess_speed : 2; u16 mess_speed : 2;
u16 save_mode : 2; u16 save_mode : 2;
}; };
/* 0x04 */ u8 turn; /* 0x04 */ u8 turn;
/* 0x05 */ u8 max_turn; /* 0x05 */ u8 max_turn;
/* 0x06 */ u8 star_flag; /* 0x06 */ u8 star_flag;
/* 0x07 */ u8 star_total; /* 0x07 */ u8 star_total;
/* 0x08 */ struct { /* 0x08 */ struct {
u8 star_pos : 3; u8 star_pos : 3;
u8 board : 5; u8 board : 5;
}; };
/* 0x09 */ s8 last5_effect; /* 0x09 */ s8 last5_effect;
/* 0x0A */ s8 player_curr; /* 0x0A */ s8 player_curr;
/* 0x0B */ u8 storyCharBit; /* 0x0B */ u8 storyCharBit;
/* 0x0C */ s8 storyChar; /* 0x0C */ s8 storyChar;
/* 0x0E */ s16 block_pos; /* 0x0E */ s16 block_pos;
/* 0x10 */ u8 ATTRIBUTE_ALIGN(4) board_data[32]; /* 0x10 */ u8 ATTRIBUTE_ALIGN(4) board_data[32];
/* 0x30 */ u8 mess_delay; /* 0x30 */ u8 mess_delay;
/* 0x31 */ struct { /* 0x31 */ struct {
u8 bowser_loss : 4; u8 bowser_loss : 4;
u8 bowser_event : 4; u8 bowser_event : 4;
}; };
/* 0x32 */ s8 lucky_value; /* 0x32 */ s8 lucky_value;
/* 0x34 */ u16 mg_next; /* 0x34 */ u16 mg_next;
/* 0x36 */ s16 mg_type; /* 0x36 */ s16 mg_type;
/* 0x38 */ u16 unk_38; /* 0x38 */ u16 unk_38;
/* 0x3A */ u8 flag[3][16]; /* 0x3A */ u8 flag[3][16];
/* 0x6A */ u8 unk_6A[0x72]; /* 0x6A */ u8 unk_6A[0x72];
} SystemState; //8018fcf8, sizeof 0xDC } SystemState; // 8018fcf8, sizeof 0xDC
typedef struct player_state { typedef struct player_state {
/* 0x00 */ struct { /* 0x00 */ struct {
u16 diff : 2; u16 diff : 2;
u16 com : 1; u16 com : 1;
u16 character : 4; u16 character : 4;
@ -66,15 +66,15 @@ typedef struct player_state {
u16 draw_ticket : 1; u16 draw_ticket : 1;
u16 ticket_player : 6; u16 ticket_player : 6;
}; };
/* 0x02 */ struct { /* 0x02 */ struct {
u8 team : 1; u8 team : 1;
u8 spark : 1; u8 spark : 1;
u8 player_idx : 2; u8 player_idx : 2;
}; };
/* 0x03 */ s8 handicap; /* 0x03 */ s8 handicap;
/* 0x04 */ s8 port; /* 0x04 */ s8 port;
/* 0x05 */ s8 items[3]; /* 0x05 */ s8 items[3];
/* 0x08 */ struct { /* 0x08 */ struct {
u16 color : 2; u16 color : 2;
u16 moving : 1; u16 moving : 1;
u16 jump : 1; u16 jump : 1;
@ -85,30 +85,30 @@ typedef struct player_state {
u16 bowser_suit : 1; u16 bowser_suit : 1;
u16 team_backup : 1; u16 team_backup : 1;
}; };
/* 0x0A */ s8 roll; /* 0x0A */ s8 roll;
/* 0x0C */ s16 space_curr; /* 0x0C */ s16 space_curr;
/* 0x0E */ s16 space_prev; /* 0x0E */ s16 space_prev;
/* 0x10 */ s16 space_next; /* 0x10 */ s16 space_next;
/* 0x12 */ s16 space_shock; /* 0x12 */ s16 space_shock;
/* 0x14 */ s8 blue_count; /* 0x14 */ s8 blue_count;
/* 0x15 */ s8 red_count; /* 0x15 */ s8 red_count;
/* 0x16 */ s8 question_count; /* 0x16 */ s8 question_count;
/* 0x17 */ s8 fortune_count; /* 0x17 */ s8 fortune_count;
/* 0x18 */ s8 bowser_count; /* 0x18 */ s8 bowser_count;
/* 0x19 */ s8 battle_count; /* 0x19 */ s8 battle_count;
/* 0x1A */ s8 mushroom_count; /* 0x1A */ s8 mushroom_count;
/* 0x1B */ s8 warp_count; /* 0x1B */ s8 warp_count;
/* 0x1C */ s16 coins; /* 0x1C */ s16 coins;
/* 0x1E */ s16 coins_mg; /* 0x1E */ s16 coins_mg;
/* 0x20 */ s16 coins_total; /* 0x20 */ s16 coins_total;
/* 0x22 */ s16 coins_max; /* 0x22 */ s16 coins_max;
/* 0x24 */ s16 coins_battle; /* 0x24 */ s16 coins_battle;
/* 0x26 */ s16 coin_collect; /* 0x26 */ s16 coin_collect;
/* 0x28 */ s16 coin_win; /* 0x28 */ s16 coin_win;
/* 0x2A */ s16 stars; /* 0x2A */ s16 stars;
/* 0x2C */ s16 stars_max; /* 0x2C */ s16 stars_max;
/* 0x2E */ char unk_2E[2]; /* 0x2E */ char unk_2E[2];
} PlayerState; //size of 0x30 } PlayerState; // size of 0x30
typedef struct pause_backup_config { typedef struct pause_backup_config {
u8 explain_mg : 1; u8 explain_mg : 1;
@ -119,21 +119,21 @@ typedef struct pause_backup_config {
} PauseBackupConfig; } PauseBackupConfig;
typedef struct game_stat { typedef struct game_stat {
/* 0x0 */ s16 unk_00; /* 0x0 */ s16 unk_00;
/* 0x2 */ u8 language; /* 0x2 */ u8 language;
/* 0x3 */ u8 sound_mode; /* 0x3 */ u8 sound_mode;
/* 0x4 */ s8 rumble; /* 0x4 */ s8 rumble;
/* 0x6 */ u16 total_stars; /* 0x6 */ u16 total_stars;
/* 0x8 */ OSTime create_time; /* 0x8 */ OSTime create_time;
/* 0x10 */ u32 mg_custom[2]; /* 0x10 */ u32 mg_custom[2];
/* 0x18 */ u32 mg_avail[2]; /* 0x18 */ u32 mg_avail[2];
/* 0x20 */ u32 mg_record[15]; /* 0x20 */ u32 mg_record[15];
/* 0x5C */ u8 board_win_count[9][8]; /* 0x5C */ u8 board_win_count[9][8];
/* 0xA4 */ u8 board_play_count[9]; /* 0xA4 */ u8 board_play_count[9];
/* 0xAE */ u16 board_max_stars[9]; /* 0xAE */ u16 board_max_stars[9];
/* 0xC0 */ u16 board_max_coins[9]; /* 0xC0 */ u16 board_max_coins[9];
/* 0xD2 */ u8 present[60]; /* 0xD2 */ u8 present[60];
/* 0x10E */ struct { /* 0x10E */ struct {
u8 story_continue : 1; u8 story_continue : 1;
u8 party_continue : 1; u8 party_continue : 1;
u8 open_w06 : 1; u8 open_w06 : 1;
@ -141,17 +141,17 @@ typedef struct game_stat {
u8 customPackEnable : 1; u8 customPackEnable : 1;
u8 musicAllF : 1; u8 musicAllF : 1;
}; };
/* 0x10F */ PauseBackupConfig story_pause; /* 0x10F */ PauseBackupConfig story_pause;
/* 0x110 */ PauseBackupConfig party_pause; /* 0x110 */ PauseBackupConfig party_pause;
} GameStat; } GameStat;
extern s16 GwLanguage; SHARED_SYM extern s16 GwLanguage;
extern s16 GwLanguageSave; SHARED_SYM extern s16 GwLanguageSave;
extern PlayerConfig GWPlayerCfg[4]; SHARED_SYM extern PlayerConfig GWPlayerCfg[4];
extern PlayerState GWPlayer[4]; SHARED_SYM extern PlayerState GWPlayer[4];
extern SystemState GWSystem; SHARED_SYM extern SystemState GWSystem;
extern GameStat GWGameStat; SHARED_SYM extern GameStat GWGameStat;
static inline s32 GWPlayerCfgGroupGet(s32 player) static inline s32 GWPlayerCfgGroupGet(s32 player)
{ {
@ -196,7 +196,8 @@ static inline s32 GWRumbleGet(void)
static inline void GWRumbleSet(s32 value) static inline void GWRumbleSet(s32 value)
{ {
GWGameStat.rumble = value; GWGameStat.rumble = value;
if(value == 0) { if (value == 0) {
// TODO PC: get rumble working
HuPadRumbleAllStop(); HuPadRumbleAllStop();
} }
} }
@ -206,7 +207,6 @@ static inline s32 GWBonusStarGet(void)
return GWSystem.bonus_star; return GWSystem.bonus_star;
} }
static inline s32 GWMGExplainGet(void) static inline s32 GWMGExplainGet(void)
{ {
return GWSystem.explain_mg; return GWSystem.explain_mg;
@ -250,9 +250,9 @@ static inline s32 GWMessSpeedGet(void)
static inline void GWMessSpeedSet(s32 value) static inline void GWMessSpeedSet(s32 value)
{ {
#if VERSION_NTSC #if VERSION_NTSC
GWSystem.mess_speed = value; GWSystem.mess_speed = value;
switch(value) { switch (value) {
case 0: case 0:
GWSystem.mess_delay = 16; GWSystem.mess_delay = 16;
break; break;
@ -265,9 +265,9 @@ static inline void GWMessSpeedSet(s32 value)
GWSystem.mess_delay = 32; GWSystem.mess_delay = 32;
break; break;
} }
#else #else
GWSystem.mess_speed = value; GWSystem.mess_speed = value;
switch(value) { switch (value) {
case 0: case 0:
GWSystem.mess_delay = 32; GWSystem.mess_delay = 32;
break; break;
@ -275,7 +275,7 @@ static inline void GWMessSpeedSet(s32 value)
case 2: case 2:
GWSystem.mess_delay = 64; GWSystem.mess_delay = 64;
break; break;
case 1: case 1:
GWSystem.mess_delay = 48; GWSystem.mess_delay = 48;
break; break;
@ -284,7 +284,7 @@ static inline void GWMessSpeedSet(s32 value)
GWSystem.mess_delay = 120; GWSystem.mess_delay = 120;
break; break;
} }
#endif #endif
} }
static inline void GWSaveModeSet(s32 value) 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 GWPlayerCoinWinAdd(player, value) GWPlayerCoinWinSet((player), GWPlayerCoinWinGet((player)) + (value))
#define GWPlayerCoinCollectAdd(player, value) GWPlayerCoinCollectSet((player), (s32)GWPlayerCoinCollectGet((player))+(value)) #define GWPlayerCoinCollectAdd(player, value) GWPlayerCoinCollectSet((player), (s32)GWPlayerCoinCollectGet((player)) + (value))
#endif #endif

View file

@ -56,7 +56,6 @@ typedef struct hsf_draw_object {
void Hu3DDrawPreInit(void); void Hu3DDrawPreInit(void);
void Hu3DDraw(ModelData *arg0, Mtx arg1, Vec *arg2); void Hu3DDraw(ModelData *arg0, Mtx arg1, Vec *arg2);
s32 ObjCullCheck(HsfData *arg0, HsfObject *arg1, Mtx arg2); s32 ObjCullCheck(HsfData *arg0, HsfObject *arg1, Mtx arg2);
void FaceDraw(HsfDrawObject *arg0, HsfFace *arg1);
void Hu3DDrawPost(void); void Hu3DDrawPost(void);
void MakeDisplayList(s16 arg0, u32 arg1); void MakeDisplayList(s16 arg0, u32 arg1);
HsfConstData *ObjConstantMake(HsfObject *arg0, u32 arg1); HsfConstData *ObjConstantMake(HsfObject *arg0, u32 arg1);

View file

@ -1,9 +1,159 @@
#ifndef _GAME_JMP_H #ifndef _GAME_JMP_H
#define _GAME_JMP_H #define _GAME_JMP_H
#ifdef TARGET_PC
#include <setjmp.h>
#include <stdint.h>
#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" #include "dolphin.h"
typedef struct jump_buf { typedef struct jmp_buf {
u32 lr; u32 lr;
u32 cr; u32 cr;
u32 sp; u32 sp;
@ -16,4 +166,11 @@ typedef struct jump_buf {
s32 gcsetjmp(jmp_buf *jump); s32 gcsetjmp(jmp_buf *jump);
s32 gclongjmp(jmp_buf *jump, s32 status); 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 #endif

View file

@ -28,14 +28,14 @@ u32 HuMemHeapSizeGet(HeapID heap);
void *HuMemHeapPtrGet(HeapID heap); void *HuMemHeapPtrGet(HeapID heap);
void *HuMemHeapInit(void *ptr, s32 size); void *HuMemHeapInit(void *ptr, s32 size);
void *HuMemMemoryAlloc(void *heap_ptr, s32 size, u32 retaddr); void *HuMemMemoryAlloc(void *heap_ptr, s32 size, uintptr_t retaddr);
void *HuMemMemoryAllocNum(void *heap_ptr, s32 size, u32 num, u32 retaddr); void *HuMemMemoryAllocNum(void *heap_ptr, s32 size, u32 num, uintptr_t retaddr);
void HuMemMemoryFree(void *ptr, u32 retaddr); void HuMemMemoryFree(void *ptr, uintptr_t retaddr);
void HuMemMemoryFreeNum(void *heap_ptr, u32 num, u32 retaddr); void HuMemMemoryFreeNum(void *heap_ptr, u32 num, uintptr_t retaddr);
s32 HuMemUsedMemorySizeGet(void *heap_ptr); s32 HuMemUsedMemorySizeGet(void *heap_ptr);
s32 HuMemUsedMemoryBlockGet(void *heap_ptr); s32 HuMemUsedMemoryBlockGet(void *heap_ptr);
s32 HuMemMemorySizeGet(void *ptr); s32 HuMemMemorySizeGet(void *ptr);
s32 HuMemMemoryAllocSizeGet(s32 size); s32 HuMemMemoryAllocSizeGet(s32 size);
void HuMemHeapDump(void *heap_ptr, s16 status); void HuMemHeapDump(void *heap_ptr, s16 status);
#endif #endif

View file

@ -185,6 +185,7 @@ int msmMusPlay(int musId, MSM_MUSPARAM *musParam);
s32 msmMusStop(int musNo, s32 speed); s32 msmMusStop(int musNo, s32 speed);
void msmMusPauseAll(BOOL pause, s32 speed); void msmMusPauseAll(BOOL pause, s32 speed);
s32 msmMusPause(int musNo, BOOL pause, s32 speed); s32 msmMusPause(int musNo, BOOL pause, s32 speed);
void msmMusFdoutEnd(void);
s32 msmMusGetMidiCtrl(int musNo, s32 channel, s32 ctrl); s32 msmMusGetMidiCtrl(int musNo, s32 channel, s32 ctrl);
void msmMusStopAll(BOOL checkGrp, s32 speed); void msmMusStopAll(BOOL checkGrp, s32 speed);
s32 msmMusGetStatus(int musNo); s32 msmMusGetStatus(int musNo);

View file

@ -5,6 +5,10 @@
#include "game/process.h" #include "game/process.h"
#include "game/dvd.h" #include "game/dvd.h"
#ifdef _WIN32
#include <windows.h>
#endif
#define OM_DLL_MAX 20 #define OM_DLL_MAX 20
#define OVL_DEFINE(name, path) name, #define OVL_DEFINE(name, path) name,
@ -60,9 +64,14 @@ typedef struct om_obj_data {
typedef struct om_dll_data { typedef struct om_dll_data {
char *name; char *name;
#if _WIN32
HMODULE hModule;
#else
OSModuleHeader *module; OSModuleHeader *module;
void *bss; void *bss;
s32 ret; s32 ret;
#endif
} omDllData; } omDllData;
void omMasterInit(s32 prio, FileListEntry *ovl_list, s32 ovl_count, OverlayID start_ovl); 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 omObjData *omDBGSysKeyObj;
extern Process *omwatchproc; extern Process *omwatchproc;
extern OverlayID omnextovl; extern OverlayID omnextovl;
extern OverlayID omcurovl; SHARED_SYM extern OverlayID omcurovl;
extern s32 omcurdll; extern s32 omcurdll;
extern s32 omovlhisidx; SHARED_SYM extern s32 omovlhisidx;
extern s32 omovlevtno; SHARED_SYM extern s32 omovlevtno;
extern s32 omnextovlevtno; extern s32 omnextovlevtno;
extern u32 omovlstat; SHARED_SYM extern u32 omovlstat;
extern char omUPauseFlag; extern char omUPauseFlag;
extern s16 omSysExitReq; SHARED_SYM extern s16 omSysExitReq;
extern s16 omdispinfo; extern s16 omdispinfo;
extern u8 omSysPauseEnableFlag; extern u8 omSysPauseEnableFlag;
extern OverlayID omprevovl; extern OverlayID omprevovl;
extern omDllData *omDLLinfoTbl[OM_DLL_MAX]; extern omDllData *omDLLinfoTbl[OM_DLL_MAX];
extern Vec CRot; SHARED_SYM extern Vec CRot;
extern Vec Center; SHARED_SYM extern Vec Center;
extern float CZoom; SHARED_SYM extern float CZoom;
extern Vec CRotM[16]; SHARED_SYM extern Vec CRotM[16];
extern Vec CenterM[16]; SHARED_SYM extern Vec CenterM[16];
extern float CZoomM[16]; SHARED_SYM extern float CZoomM[16];
extern s16 omDBGMenuButton; SHARED_SYM extern s16 omDBGMenuButton;
#endif #endif

View file

@ -2,23 +2,24 @@
#define _GAME_PAD_H #define _GAME_PAD_H
#include "dolphin.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_DIR (PAD_BUTTON_LEFT | PAD_BUTTON_RIGHT | PAD_BUTTON_UP | PAD_BUTTON_DOWN)
#define PAD_BUTTON_TRIGGER_L 0x4000 #define PAD_BUTTON_TRIGGER_L 0x4000
#define PAD_BUTTON_TRIGGER_R 0x2000 #define PAD_BUTTON_TRIGGER_R 0x2000
extern u16 HuPadBtn[4]; SHARED_SYM extern u16 HuPadBtn[4];
extern u16 HuPadBtnDown[4]; SHARED_SYM extern u16 HuPadBtnDown[4];
extern u16 HuPadBtnRep[4]; SHARED_SYM extern u16 HuPadBtnRep[4];
extern s8 HuPadStkX[4]; SHARED_SYM extern s8 HuPadStkX[4];
extern s8 HuPadStkY[4]; SHARED_SYM extern s8 HuPadStkY[4];
extern s8 HuPadSubStkX[4]; SHARED_SYM extern s8 HuPadSubStkX[4];
extern s8 HuPadSubStkY[4]; SHARED_SYM extern s8 HuPadSubStkY[4];
extern u8 HuPadTrigL[4]; SHARED_SYM extern u8 HuPadTrigL[4];
extern u8 HuPadTrigR[4]; SHARED_SYM extern u8 HuPadTrigR[4];
extern u8 HuPadDStk[4]; SHARED_SYM extern u8 HuPadDStk[4];
extern u8 HuPadDStkRep[4]; SHARED_SYM extern u8 HuPadDStkRep[4];
extern s8 HuPadErr[4]; extern s8 HuPadErr[4];
extern u16 _PadBtn[4]; extern u16 _PadBtn[4];
extern u16 _PadBtnDown[4]; extern u16 _PadBtnDown[4];
@ -32,4 +33,4 @@ void HuPadRumbleAllStop(void);
s16 HuPadStatGet(s16 pad); s16 HuPadStatGet(s16 pad);
u32 HuPadRumbleGet(void); u32 HuPadRumbleGet(void);
#endif #endif

View file

@ -1,9 +1,14 @@
#ifndef _GAME_PROCESS_H #ifndef _GAME_PROCESS_H
#define _GAME_PROCESS_H #define _GAME_PROCESS_H
#include "game/jmp.h"
#include "dolphin/types.h" #include "dolphin/types.h"
#include "game/jmp.h"
#ifdef TARGET_PC
#include <stdio.h>
#endif
#define PROCESS_STAT_PAUSE 0x1 #define PROCESS_STAT_PAUSE 0x1
#define PROCESS_STAT_UPAUSE 0x2 #define PROCESS_STAT_UPAUSE 0x2
#define PROCESS_STAT_PAUSE_EN 0x4 #define PROCESS_STAT_PAUSE_EN 0x4
@ -50,4 +55,4 @@ void HuPrcResetStat(Process *process, u16 value);
void HuPrcAllPause(s32 flag); void HuPrcAllPause(s32 flag);
void HuPrcAllUPause(s32 flag); void HuPrcAllUPause(s32 flag);
#endif #endif

9
include/game/sreset.h Normal file
View file

@ -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

View file

@ -3,6 +3,7 @@
#include "game/animdata.h" #include "game/animdata.h"
#include "dolphin.h" #include "dolphin.h"
#include "version.h"
#define MAKE_MESSID(bank, mess) (((bank) << 16)+(mess)) #define MAKE_MESSID(bank, mess) (((bank) << 16)+(mess))
#define MAKE_MESSID_PTR(ptr) ((u32)(ptr)) #define MAKE_MESSID_PTR(ptr) ((u32)(ptr))
@ -75,8 +76,8 @@ typedef struct {
/* 0x160 */ u8 ATTRIBUTE_ALIGN(32) mess_pal[10][3]; /* 0x160 */ u8 ATTRIBUTE_ALIGN(32) mess_pal[10][3];
} WindowData; // Size 0x180 } WindowData; // Size 0x180
extern WindowData winData[32]; SHARED_SYM extern WindowData winData[32];
extern void *messDataPtr; SHARED_SYM extern void *messDataPtr;
void HuWindowInit(void); void HuWindowInit(void);
void HuWinInit(s32 mess_data_no); void HuWinInit(s32 mess_data_no);
@ -139,6 +140,4 @@ void HuWinExCleanup(s16 window);
void HuWinExAnimPopIn(s16 window, s16 portrait); void HuWinExAnimPopIn(s16 window, s16 portrait);
void *MessData_MesPtrGet(void *data, u32 index); void *MessData_MesPtrGet(void *data, u32 index);
extern void *messDataPtr;
#endif #endif

View file

@ -2,6 +2,7 @@
#define _GAME_WIPE_H #define _GAME_WIPE_H
#include "dolphin.h" #include "dolphin.h"
#include "version.h"
#define WIPE_TYPE_PREV -1 #define WIPE_TYPE_PREV -1
#define WIPE_TYPE_NORMAL 0 #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); void WipeColorSet(u8 r, u8 g, u8 b);
u8 WipeStatGet(void); u8 WipeStatGet(void);
extern WipeState wipeData; SHARED_SYM extern WipeState wipeData;
extern BOOL wipeFadeInF; extern BOOL wipeFadeInF;
#endif #endif

View file

@ -1,108 +1,108 @@
#include "version.h" #include "version.h"
OVL_DEFINE(OVL__MINI, "dll/_minigameDLL.rel") OVL_DEFINE(OVL__MINI, "_minigameDLL")
OVL_DEFINE(OVL_BOOT, "dll/bootdll.rel") OVL_DEFINE(OVL_BOOT, "bootdll")
OVL_DEFINE(OVL_E3SETUP, "dll/e3setupDLL.rel") OVL_DEFINE(OVL_E3SETUP, "e3setupDLL")
OVL_DEFINE(OVL_INST, "dll/instdll.rel") OVL_DEFINE(OVL_INST, "instdll")
OVL_DEFINE(OVL_M300, "dll/m300dll.rel") OVL_DEFINE(OVL_M300, "m300dll")
OVL_DEFINE(OVL_M302, "dll/m302dll.rel") OVL_DEFINE(OVL_M302, "m302dll")
OVL_DEFINE(OVL_M303, "dll/m303dll.rel") OVL_DEFINE(OVL_M303, "m303dll")
OVL_DEFINE(OVL_M330, "dll/m330dll.rel") OVL_DEFINE(OVL_M330, "m330dll")
OVL_DEFINE(OVL_M333, "dll/m333dll.rel") OVL_DEFINE(OVL_M333, "m333dll")
OVL_DEFINE(OVL_M401, "dll/m401dll.rel") OVL_DEFINE(OVL_M401, "m401dll")
OVL_DEFINE(OVL_M402, "dll/m402dll.rel") OVL_DEFINE(OVL_M402, "m402dll")
OVL_DEFINE(OVL_M403, "dll/m403dll.rel") OVL_DEFINE(OVL_M403, "m403dll")
OVL_DEFINE(OVL_M404, "dll/m404dll.rel") OVL_DEFINE(OVL_M404, "m404dll")
OVL_DEFINE(OVL_M405, "dll/m405dll.rel") OVL_DEFINE(OVL_M405, "m405dll")
OVL_DEFINE(OVL_M406, "dll/m406dll.rel") OVL_DEFINE(OVL_M406, "m406dll")
OVL_DEFINE(OVL_M407, "dll/m407dll.rel") OVL_DEFINE(OVL_M407, "m407dll")
OVL_DEFINE(OVL_M408, "dll/m408dll.rel") OVL_DEFINE(OVL_M408, "m408dll")
OVL_DEFINE(OVL_M409, "dll/m409dll.rel") OVL_DEFINE(OVL_M409, "m409dll")
OVL_DEFINE(OVL_M410, "dll/m410dll.rel") OVL_DEFINE(OVL_M410, "m410dll")
OVL_DEFINE(OVL_M411, "dll/m411dll.rel") OVL_DEFINE(OVL_M411, "m411dll")
OVL_DEFINE(OVL_M412, "dll/m412dll.rel") OVL_DEFINE(OVL_M412, "m412dll")
OVL_DEFINE(OVL_M413, "dll/m413dll.rel") OVL_DEFINE(OVL_M413, "m413dll")
OVL_DEFINE(OVL_M414, "dll/m414dll.rel") OVL_DEFINE(OVL_M414, "m414dll")
OVL_DEFINE(OVL_M415, "dll/m415dll.rel") OVL_DEFINE(OVL_M415, "m415dll")
OVL_DEFINE(OVL_M416, "dll/m416dll.rel") OVL_DEFINE(OVL_M416, "m416dll")
OVL_DEFINE(OVL_M417, "dll/m417dll.rel") OVL_DEFINE(OVL_M417, "m417dll")
OVL_DEFINE(OVL_M418, "dll/m418dll.rel") OVL_DEFINE(OVL_M418, "m418dll")
OVL_DEFINE(OVL_M419, "dll/m419dll.rel") OVL_DEFINE(OVL_M419, "m419dll")
OVL_DEFINE(OVL_M420, "dll/m420dll.rel") OVL_DEFINE(OVL_M420, "m420dll")
OVL_DEFINE(OVL_M421, "dll/m421dll.rel") OVL_DEFINE(OVL_M421, "m421dll")
OVL_DEFINE(OVL_M422, "dll/m422dll.rel") OVL_DEFINE(OVL_M422, "m422dll")
OVL_DEFINE(OVL_M423, "dll/m423dll.rel") OVL_DEFINE(OVL_M423, "m423dll")
OVL_DEFINE(OVL_M424, "dll/m424dll.rel") OVL_DEFINE(OVL_M424, "m424dll")
OVL_DEFINE(OVL_M425, "dll/m425dll.rel") OVL_DEFINE(OVL_M425, "m425dll")
OVL_DEFINE(OVL_M426, "dll/m426dll.rel") OVL_DEFINE(OVL_M426, "m426dll")
OVL_DEFINE(OVL_M427, "dll/m427dll.rel") OVL_DEFINE(OVL_M427, "m427dll")
OVL_DEFINE(OVL_M428, "dll/m428dll.rel") OVL_DEFINE(OVL_M428, "m428dll")
OVL_DEFINE(OVL_M429, "dll/m429dll.rel") OVL_DEFINE(OVL_M429, "m429dll")
OVL_DEFINE(OVL_M430, "dll/m430dll.rel") OVL_DEFINE(OVL_M430, "m430dll")
OVL_DEFINE(OVL_M431, "dll/m431dll.rel") OVL_DEFINE(OVL_M431, "m431dll")
OVL_DEFINE(OVL_M432, "dll/m432dll.rel") OVL_DEFINE(OVL_M432, "m432dll")
OVL_DEFINE(OVL_M433, "dll/m433dll.rel") OVL_DEFINE(OVL_M433, "m433dll")
OVL_DEFINE(OVL_M434, "dll/m434dll.rel") OVL_DEFINE(OVL_M434, "m434dll")
OVL_DEFINE(OVL_M435, "dll/m435dll.rel") OVL_DEFINE(OVL_M435, "m435dll")
OVL_DEFINE(OVL_M436, "dll/m436dll.rel") OVL_DEFINE(OVL_M436, "m436dll")
OVL_DEFINE(OVL_M437, "dll/m437dll.rel") OVL_DEFINE(OVL_M437, "m437dll")
OVL_DEFINE(OVL_M438, "dll/m438dll.rel") OVL_DEFINE(OVL_M438, "m438dll")
OVL_DEFINE(OVL_M439, "dll/m439dll.rel") OVL_DEFINE(OVL_M439, "m439dll")
OVL_DEFINE(OVL_M440, "dll/m440dll.rel") OVL_DEFINE(OVL_M440, "m440dll")
OVL_DEFINE(OVL_M441, "dll/m441dll.rel") OVL_DEFINE(OVL_M441, "m441dll")
OVL_DEFINE(OVL_M442, "dll/m442dll.rel") OVL_DEFINE(OVL_M442, "m442dll")
OVL_DEFINE(OVL_M443, "dll/m443dll.rel") OVL_DEFINE(OVL_M443, "m443dll")
OVL_DEFINE(OVL_M444, "dll/m444dll.rel") OVL_DEFINE(OVL_M444, "m444dll")
OVL_DEFINE(OVL_M445, "dll/m445dll.rel") OVL_DEFINE(OVL_M445, "m445dll")
OVL_DEFINE(OVL_M446, "dll/m446dll.rel") OVL_DEFINE(OVL_M446, "m446dll")
OVL_DEFINE(OVL_M447, "dll/m447dll.rel") OVL_DEFINE(OVL_M447, "m447dll")
OVL_DEFINE(OVL_M448, "dll/m448dll.rel") OVL_DEFINE(OVL_M448, "m448dll")
OVL_DEFINE(OVL_M449, "dll/m449dll.rel") OVL_DEFINE(OVL_M449, "m449dll")
OVL_DEFINE(OVL_M450, "dll/m450dll.rel") OVL_DEFINE(OVL_M450, "m450dll")
OVL_DEFINE(OVL_M451, "dll/m451dll.rel") OVL_DEFINE(OVL_M451, "m451dll")
OVL_DEFINE(OVL_M453, "dll/m453dll.rel") OVL_DEFINE(OVL_M453, "m453dll")
OVL_DEFINE(OVL_M455, "dll/m455dll.rel") OVL_DEFINE(OVL_M455, "m455dll")
OVL_DEFINE(OVL_M456, "dll/m456dll.rel") OVL_DEFINE(OVL_M456, "m456dll")
OVL_DEFINE(OVL_M457, "dll/m457dll.rel") OVL_DEFINE(OVL_M457, "m457dll")
OVL_DEFINE(OVL_M458, "dll/m458dll.rel") OVL_DEFINE(OVL_M458, "m458dll")
OVL_DEFINE(OVL_M459, "dll/m459dll.rel") OVL_DEFINE(OVL_M459, "m459dll")
OVL_DEFINE(OVL_M460, "dll/m460dll.rel") OVL_DEFINE(OVL_M460, "m460dll")
OVL_DEFINE(OVL_M461, "dll/m461dll.rel") OVL_DEFINE(OVL_M461, "m461dll")
OVL_DEFINE(OVL_M462, "dll/m462dll.rel") OVL_DEFINE(OVL_M462, "m462dll")
OVL_DEFINE(OVL_M463, "dll/m463dll.rel") OVL_DEFINE(OVL_M463, "m463dll")
OVL_DEFINE(OVL_MENT, "dll/mentdll.rel") OVL_DEFINE(OVL_MENT, "mentdll")
#if VERSION_JP #if VERSION_JP
OVL_DEFINE(OVL_MGMODE, "dll/mgmodedll.rel") OVL_DEFINE(OVL_MGMODE, "mgmodedll")
OVL_DEFINE(OVL_MODELTEST, "dll/modeltestdll.rel") OVL_DEFINE(OVL_MODELTEST, "modeltestdll")
OVL_DEFINE(OVL_MODESEL, "dll/modeseldll.rel") OVL_DEFINE(OVL_MODESEL, "modeseldll")
OVL_DEFINE(OVL_MOVIE, "dll/moviedll.rel") OVL_DEFINE(OVL_MOVIE, "moviedll")
#else #else
OVL_DEFINE(OVL_MESS, "dll/messdll.rel") OVL_DEFINE(OVL_MESS, "messdll")
OVL_DEFINE(OVL_MGMODE, "dll/mgmodedll.rel") OVL_DEFINE(OVL_MGMODE, "mgmodedll")
OVL_DEFINE(OVL_MODELTEST, "dll/modeltestdll.rel") OVL_DEFINE(OVL_MODELTEST, "modeltestdll")
OVL_DEFINE(OVL_MODESEL, "dll/modeseldll.rel") OVL_DEFINE(OVL_MODESEL, "modeseldll")
#endif #endif
OVL_DEFINE(OVL_MPEX, "dll/mpexdll.rel") OVL_DEFINE(OVL_MPEX, "mpexdll")
OVL_DEFINE(OVL_MSETUP, "dll/msetupdll.rel") OVL_DEFINE(OVL_MSETUP, "msetupdll")
OVL_DEFINE(OVL_MSTORY2, "dll/mstory2dll.rel") OVL_DEFINE(OVL_MSTORY2, "mstory2dll")
OVL_DEFINE(OVL_MSTORY3, "dll/mstory3dll.rel") OVL_DEFINE(OVL_MSTORY3, "mstory3dll")
OVL_DEFINE(OVL_MSTORY4, "dll/mstory4dll.rel") OVL_DEFINE(OVL_MSTORY4, "mstory4dll")
OVL_DEFINE(OVL_MSTORY, "dll/mstorydll.rel") OVL_DEFINE(OVL_MSTORY, "mstorydll")
OVL_DEFINE(OVL_NIS, "dll/nisdll.rel") OVL_DEFINE(OVL_NIS, "nisdll")
OVL_DEFINE(OVL_OPTION, "dll/option.rel") OVL_DEFINE(OVL_OPTION, "option")
OVL_DEFINE(OVL_PRESENT, "dll/present.rel") OVL_DEFINE(OVL_PRESENT, "present")
OVL_DEFINE(OVL_RESULT, "dll/resultdll.rel") OVL_DEFINE(OVL_RESULT, "resultdll")
OVL_DEFINE(OVL_SAF, "dll/safdll.rel") OVL_DEFINE(OVL_SAF, "safdll")
OVL_DEFINE(OVL_SELMENU, "dll/selmenuDLL.rel") OVL_DEFINE(OVL_SELMENU, "selmenuDLL")
OVL_DEFINE(OVL_STAFF, "dll/staffdll.rel") OVL_DEFINE(OVL_STAFF, "staffdll")
OVL_DEFINE(OVL_SUBCHRSEL, "dll/subchrseldll.rel") OVL_DEFINE(OVL_SUBCHRSEL, "subchrseldll")
OVL_DEFINE(OVL_W01, "dll/w01dll.rel") OVL_DEFINE(OVL_W01, "w01dll")
OVL_DEFINE(OVL_W02, "dll/w02dll.rel") OVL_DEFINE(OVL_W02, "w02dll")
OVL_DEFINE(OVL_W03, "dll/w03dll.rel") OVL_DEFINE(OVL_W03, "w03dll")
OVL_DEFINE(OVL_W04, "dll/w04dll.rel") OVL_DEFINE(OVL_W04, "w04dll")
OVL_DEFINE(OVL_W05, "dll/w05dll.rel") OVL_DEFINE(OVL_W05, "w05dll")
OVL_DEFINE(OVL_W06, "dll/w06dll.rel") OVL_DEFINE(OVL_W06, "w06dll")
OVL_DEFINE(OVL_W10, "dll/w10dll.rel") OVL_DEFINE(OVL_W10, "w10dll")
OVL_DEFINE(OVL_W20, "dll/w20dll.rel") OVL_DEFINE(OVL_W20, "w20dll")
OVL_DEFINE(OVL_W21, "dll/w21dll.rel") OVL_DEFINE(OVL_W21, "w21dll")
OVL_DEFINE(OVL_ZTAR, "dll/ztardll.rel") OVL_DEFINE(OVL_ZTAR, "ztardll")

28
include/port/byteswap.h Normal file
View file

@ -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

18
include/port/imgui.h Normal file
View file

@ -0,0 +1,18 @@
#ifndef _SRC_IMGUI_H_
#define _SRC_IMGUI_H_
#include <aurora/aurora.h>
#ifdef __cplusplus
extern "C"
{
#endif
void imgui_main(const AuroraInfo* info);
void frame_limiter();
#ifdef __cplusplus
}
#endif
#endif

View file

@ -21,4 +21,15 @@
#define REFRESH_RATE 60 #define REFRESH_RATE 60
#endif #endif
#if _WIN32
#ifdef TARGET_DOL
#define SHARED_SYM __declspec(dllexport)
#else
#define SHARED_SYM __declspec(dllimport)
#endif
#else
#define SHARED_SYM
#endif
#endif #endif

View file

@ -1,8 +1,6 @@
#ifndef _MATH_H #ifndef _MATH_H
#define _MATH_H #define _MATH_H
#define M_PI 3.141592653589793
#ifndef _MATH_INLINE #ifndef _MATH_INLINE
#define _MATH_INLINE static inline #define _MATH_INLINE static inline
#endif #endif

File diff suppressed because it is too large Load diff

View file

@ -1180,4 +1180,7 @@ static void ShadowDraw(ModelData *model, Mtx mtx)
GXPosition3f32(2000.0f, 0, 2000.0f); GXPosition3f32(2000.0f, 0, 2000.0f);
GXPosition3f32(-2000.0f, 0, 2000.0f); GXPosition3f32(-2000.0f, 0, 2000.0f);
GXEnd(); GXEnd();
#ifdef TARGET_PC
GXDestroyTexObj(&tex);
#endif
} }

View file

@ -1308,6 +1308,9 @@ void fn_1_58E4(ModelData *modelData, Mtx arg1)
GXSetTevColor(GX_TEVREG0, sp14); GXSetTevColor(GX_TEVREG0, sp14);
GXCallDisplayList(var_r31->unk_44, var_r31->unk_48); 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) AnimData *fn_1_5D64(u16 sizeX, u16 sizeY, s32 arg2)

View file

@ -1002,12 +1002,15 @@ void fn_1_37A4(ModelData *arg0, Mtx arg1)
GXClearVtxDesc(); GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_INDEX16); GXSetVtxDesc(GX_VA_POS, GX_INDEX16);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_RGBA6, 0); 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); GXSetCullMode(GX_CULL_BACK);
GXCallDisplayList(lbl_1_bss_5AC.unk24, lbl_1_bss_5AC.unk28); GXCallDisplayList(lbl_1_bss_5AC.unk24, lbl_1_bss_5AC.unk28);
GXSetNumIndStages(0); GXSetNumIndStages(0);
GXSetTevDirect(GX_TEVSTAGE0); GXSetTevDirect(GX_TEVSTAGE0);
GXSetTevDirect(GX_TEVSTAGE1); GXSetTevDirect(GX_TEVSTAGE1);
#ifdef TARGET_PC
GXDestroyTexObj(&spC);
#endif
} }
void fn_1_3F1C(ModelData *arg0, Mtx arg1) 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);
GXPosition3f32(-600.0f, -2.0f, 1250.0f); GXPosition3f32(-600.0f, -2.0f, 1250.0f);
GXEnd(); GXEnd();
#ifdef TARGET_PC
GXDestroyTexObj(&sp18);
#endif
} }
void fn_1_4700(ModelData *arg0, Mtx arg1) void fn_1_4700(ModelData *arg0, Mtx arg1)

View file

@ -1111,19 +1111,19 @@ void fn_1_45BC(ModelData *arg0, Mtx arg1)
GXClearVtxDesc(); GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_INDEX16); GXSetVtxDesc(GX_VA_POS, GX_INDEX16);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); 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); GXSetVtxDesc(GX_VA_NRM, GX_INDEX16);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_NRM_XYZ, GX_F32, 0); 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); GXSetVtxDesc(GX_VA_CLR0, GX_INDEX16);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0); 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); GXCallDisplayList(var_r31->unk_A4, var_r31->unk_A0);
for (var_r30 = 1; var_r30 < 29; var_r30++) { for (var_r30 = 1; var_r30 < 29; var_r30++) {
var_r29 = var_r30 * 35; var_r29 = var_r30 * 35;
GXSetArray(GX_VA_POS, &var_r31->unk_84[var_r29], sizeof(Vec)); 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], 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], sizeof(GXColor)); GXSETARRAY(GX_VA_CLR0, &var_r31->unk_90[var_r29], 35 * sizeof(GXColor), sizeof(GXColor));
GXCallDisplayList(var_r31->unk_A4, var_r31->unk_A0); 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) { if (HmfInverseMtxF3X3(arg1, sp128) == 0) {
MTXIdentity(sp128); MTXIdentity(sp128);
} }
PSMTXReorder(sp128, sp8); MTXReorder(sp128, sp8);
if (var_r31->unk_4C) { if (var_r31->unk_4C) {
var_r18 = var_r31->unk_4C; var_r18 = var_r31->unk_4C;
var_r18(arg0, var_r31, arg1); 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_r29 = var_r31->unk_3C;
var_r30 = var_r31->unk_40; var_r30 = var_r31->unk_40;
var_r28 = var_r31->unk_44; 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++) { for (var_r26 = 0; var_r26 < var_r31->unk_26; var_r26++, var_r29++) {
if (!var_r29->unk_28) { if (!var_r29->unk_28) {
var_r30->x = var_r30->y = var_r30->z = 0.0f; 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) { if (HmfInverseMtxF3X3(arg1, sp9C) == 0) {
MTXIdentity(sp9C); MTXIdentity(sp9C);
} }
PSMTXReorder(sp9C, spC); MTXReorder(sp9C, spC);
if (var_r31->unk_4C) { if (var_r31->unk_4C) {
var_r23 = var_r31->unk_4C; var_r23 = var_r31->unk_4C;
var_r23(arg0, var_r31, arg1); 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_r29 = var_r31->unk_3C;
var_r30 = var_r31->unk_40; var_r30 = var_r31->unk_40;
sp8 = var_r31->unk_44; 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++) { for (var_r25 = 0; var_r25 < var_r31->unk_26; var_r25++, var_r29++) {
if (!var_r29->unk_28) { if (!var_r29->unk_28) {
var_r30->x = var_r30->y = var_r30->z = 0.0f; var_r30->x = var_r30->y = var_r30->z = 0.0f;

View file

@ -8,7 +8,7 @@
#include "game/objsub.h" #include "game/objsub.h"
#include "game/pad.h" #include "game/pad.h"
#include "game/process.h" #include "game/process.h"
#include "math.h" #include "ext_math.h"
#include "REL/m407dll.h" #include "REL/m407dll.h"

View file

@ -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); GXInitTexObjLOD(&sp1C, GX_LINEAR, GX_LINEAR, 0, 0, 0, GX_FALSE, GX_FALSE, GX_ANISO_1);
} }
GXLoadTexObj(&sp1C, arg3); GXLoadTexObj(&sp1C, arg3);
#ifdef TARGET_PC
GXDestroyTexObj(&sp1C);
GXDestroyTlutObj(&sp10);
#endif
} }
#define SET_TEVCOLOR_ALPHA(reg, color_var, value) \ #define SET_TEVCOLOR_ALPHA(reg, color_var, value) \

View file

@ -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); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0);
GXSetArray(GX_VA_TEX0, temp_r30->unk20, 8); GXSetArray(GX_VA_TEX0, temp_r30->unk20, 8);
fn_1_40A4(arg1, sp128); fn_1_40A4(arg1, sp128);
PSMTXReorder(sp128, spF8); MTXReorder(sp128, spF8);
if (((u8)omPauseChk() == 0) && (temp_r30->unkC)) { if (((u8)omPauseChk() == 0) && (temp_r30->unkC)) {
var_r23 = temp_r30->unkC; var_r23 = temp_r30->unkC;
var_r23(arg0, temp_r30, arg1); 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_r29 = temp_r30->unk18;
var_r31 = temp_r30->unk1C; var_r31 = temp_r30->unk1C;
var_r26 = temp_r30->unk20; 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) { for (var_r25 = 0; var_r25 < temp_r30->unk0; var_r25++, var_r29++, var_r26 += 4) {
if (var_r29->unk4E == 0) { if (var_r29->unk4E == 0) {

View file

@ -1144,4 +1144,7 @@ void fn_1_B140(ModelData *arg0, Mtx arg1)
GXSetNumIndStages(0); GXSetNumIndStages(0);
GXSetTevDirect(GX_TEVSTAGE0); GXSetTevDirect(GX_TEVSTAGE0);
} }
#ifdef TARGET_PC
GXDestroyTexObj(&sp14);
#endif
} }

View file

@ -278,6 +278,9 @@ void fn_1_89BC(ModelData *model, Mtx mtx)
GXTexCoord2f32(0, 1); GXTexCoord2f32(0, 1);
GXEnd(); GXEnd();
fn_1_8904(lbl_1_bss_1180, GX_FALSE); fn_1_8904(lbl_1_bss_1180, GX_FALSE);
#ifdef TARGET_PC
GXDestroyTexObj(&sp14);
#endif
} }
void fn_1_8EA0(void) void fn_1_8EA0(void)

View file

@ -574,8 +574,8 @@ void fn_1_4E64(omObjData *object)
MTXScale(spC8, var_f31, var_f31, var_f31 * var_r31->unk_28); MTXScale(spC8, var_f31, var_f31, var_f31 * var_r31->unk_28);
MTXConcat(sp68, spC8, sp98); MTXConcat(sp68, spC8, sp98);
MTXInverse(sp98, spC8); MTXInverse(sp98, spC8);
PSMTXReorder(spC8, sp38); MTXReorder(spC8, sp38);
PSMTXROMultVecArray(sp38, lbl_1_bss_178.unk_2C, lbl_1_bss_178.unk_34, lbl_1_bss_178.unk_18); 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.x = (0.15f * var_r31->unk_18) * (var_r31->unk_24 * sind(var_r31->unk_10));
sp2C.y = 0.0f; sp2C.y = 0.0f;
sp2C.z = (0.15f * var_r31->unk_18) * (var_r31->unk_24 * cosd(var_r31->unk_10)); 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_TEVSTAGE1);
GXSetTevDirect(GX_TEVSTAGE2); GXSetTevDirect(GX_TEVSTAGE2);
GXSetTevDirect(GX_TEVSTAGE3); GXSetTevDirect(GX_TEVSTAGE3);
#ifdef TARGET_PC
GXDestroyTexObj(&sp18);
#endif
} }
void fn_1_6B04(ModelData *model, Mtx arg1) void fn_1_6B04(ModelData *model, Mtx arg1)

View file

@ -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); GXPosition3f32(lbl_1_bss_0[arg0].x, lbl_1_bss_0[arg0].y + 192.0f, 0.0f);
GXTexCoord2f32(0.0f, 1.0f); GXTexCoord2f32(0.0f, 1.0f);
GXEnd(); GXEnd();
#ifdef TARGET_PC
GXDestroyTexObj(&sp58);
GXDestroyTexObj(&sp38);
#endif
} }
void fn_1_F58(void) void fn_1_F58(void)

View file

@ -1825,4 +1825,7 @@ void fn_1_ABDC(ModelData *model, Mtx matrix)
GXColor1x8(1); GXColor1x8(1);
} }
} }
#ifdef TARGET_PC
GXDestroyTexObj(&sp8);
#endif
} }

View file

@ -4497,6 +4497,9 @@ void fn_1_EF44(ModelData *arg0, Mtx arg1)
} }
GXSetNumIndStages(0); GXSetNumIndStages(0);
GXSetTevDirect(GX_TEVSTAGE0); GXSetTevDirect(GX_TEVSTAGE0);
#ifdef TARGET_PC
GXDestroyTexObj(&sp14);
#endif
} }
s32 fn_1_F574(Vec arg0, float arg1, s32 arg2) 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); GXInitTexObjLOD(&sp18, GX_NEAR, GX_NEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1);
} }
GXLoadTexObj(&sp18, arg2); GXLoadTexObj(&sp18, arg2);
#ifdef TARGET_PC
GXDestroyTexObj(&sp18);
#endif
} }
s16 fn_1_11114(AnimData *arg0, s16 arg1) 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) { if (HmfInverseMtxF3X3(arg1, sp128) == 0) {
MTXIdentity(sp128); MTXIdentity(sp128);
} }
PSMTXReorder(sp128, sp8); MTXReorder(sp128, sp8);
if (temp_r31->unk4C) { if (temp_r31->unk4C) {
var_r18 = temp_r31->unk4C; var_r18 = temp_r31->unk4C;
var_r18(arg0, temp_r31, arg1); var_r18(arg0, temp_r31, arg1);
@ -5156,7 +5162,7 @@ void fn_1_11900(ModelData *arg0, Mtx arg1)
var_r29 = temp_r31->unk3C; var_r29 = temp_r31->unk3C;
var_r30 = temp_r31->unk40; var_r30 = temp_r31->unk40;
var_r28 = temp_r31->unk44; 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++) { for (i = 0; i < temp_r31->unk26; i++, var_r29++) {
if (!var_r29->unk30) { if (!var_r29->unk30) {
var_r30->x = var_r30->y = var_r30->z = 0.0f; var_r30->x = var_r30->y = var_r30->z = 0.0f;

View file

@ -2131,7 +2131,7 @@ void fn_1_101C4(ModelData *var_r29, Mtx var_r28)
if (HmfInverseMtxF3X3(var_r28, sp50) == 0) { if (HmfInverseMtxF3X3(var_r28, sp50) == 0) {
MTXIdentity(sp50); MTXIdentity(sp50);
} }
PSMTXReorder(sp50, sp20); MTXReorder(sp50, sp20);
GXClearVtxDesc(); GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_INDEX16); GXSetVtxDesc(GX_VA_POS, GX_INDEX16);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); 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) { if (HmfInverseMtxF3X3(var_r21, sp128) == 0) {
MTXIdentity(sp128); MTXIdentity(sp128);
} }
PSMTXReorder(sp128, &sp8[0]); MTXReorder(sp128, &sp8[0]);
if (var_r31->unk_4C) { if (var_r31->unk_4C) {
var_r18 = var_r31->unk_4C; var_r18 = var_r31->unk_4C;
var_r18(var_r24, var_r31, var_r21); 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_r29 = var_r31->unk_3C;
var_r30 = var_r31->unk_40; var_r30 = var_r31->unk_40;
var_r26 = var_r31->unk_44; 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++) { for (var_r23 = 0; var_r23 < var_r31->unk_24; var_r23++, var_r29++) {
if (!var_r29->unk_28) { if (!var_r29->unk_28) {
var_r30->x = var_r30->y = var_r30->z = 0.0f; var_r30->x = var_r30->y = var_r30->z = 0.0f;

View file

@ -3045,7 +3045,7 @@ void fn_1_80DC(ModelData *arg0, Mtx arg1)
if (!HmfInverseMtxF3X3(arg1, sp128)) { if (!HmfInverseMtxF3X3(arg1, sp128)) {
MTXIdentity(sp128); MTXIdentity(sp128);
} }
PSMTXReorder(sp128, sp8); MTXReorder(sp128, sp8);
if (var_r31->unk_4C) { if (var_r31->unk_4C) {
var_r18 = var_r31->unk_4C; var_r18 = var_r31->unk_4C;
var_r18(arg0, var_r31, arg1); 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_r29 = var_r31->unk_3C;
var_r30 = var_r31->unk_40; var_r30 = var_r31->unk_40;
var_r26 = var_r31->unk_44; 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++) { for (var_r23 = 0; var_r23 < var_r31->unk_24; var_r23++, var_r29++) {
if (!var_r29->unk_28) { if (!var_r29->unk_28) {
var_r30->x = var_r30->y = var_r30->z = 0.0f; 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_f27 = var_r30->pos.y - arg0->pos.y;
var_f30 = var_r30->pos.z - arg0->pos.z; var_f30 = var_r30->pos.z - arg0->pos.z;
var_f26 = sqrtf((var_f31 * var_f31) + (var_f30 * var_f30)); 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); arg0->rot.y = atan2d(var_f31, var_f30);
var_r29 = arg0->unk_120; var_r29 = arg0->unk_120;
GXLoadPosMtxImm(arg1, 0); GXLoadPosMtxImm(arg1, 0);

View file

@ -1076,6 +1076,9 @@ void fn_1_618C(ModelData *arg0, Mtx arg1)
GXSetNumIndStages(0); GXSetNumIndStages(0);
GXSetTevDirect(GX_TEVSTAGE0); GXSetTevDirect(GX_TEVSTAGE0);
GXSetTevDirect(GX_TEVSTAGE1); GXSetTevDirect(GX_TEVSTAGE1);
#ifdef TARGET_PC
GXDestroyTexObj(&sp14);
#endif
} }
s32 lbl_1_data_FC[0xC] = { s32 lbl_1_data_FC[0xC] = {
@ -2443,6 +2446,9 @@ void fn_1_B3CC(ModelData *model, Mtx matrix)
GXSetNumIndStages(0); GXSetNumIndStages(0);
GXSetTevDirect(GX_TEVSTAGE0); GXSetTevDirect(GX_TEVSTAGE0);
GXSetTevDirect(GX_TEVSTAGE1); GXSetTevDirect(GX_TEVSTAGE1);
#ifdef TARGET_PC
GXDestroyTexObj(&sp44);
#endif
} }
void fn_1_BD2C(ModelData *model, Mtx matrix) 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[0][3] = 0.0f;
sp128[1][3] = 0.0f; sp128[1][3] = 0.0f;
sp128[2][3] = 0.0f; sp128[2][3] = 0.0f;
PSMTXReorder(sp128, spF8); MTXReorder(sp128, spF8);
if ((omPauseChk() == 0) && (var_r30->unk_0C)) { if ((omPauseChk() == 0) && (var_r30->unk_0C)) {
var_r23 = var_r30->unk_0C; var_r23 = var_r30->unk_0C;
var_r23(model, var_r30, matrix); 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_r29 = var_r30->unk_18;
var_r31 = var_r30->unk_1C; var_r31 = var_r30->unk_1C;
var_r26 = var_r30->unk_20; 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) { for (var_r25 = 0; var_r25 < var_r30->unk_00; var_r25++, var_r29++, var_r26 += 4) {
if (var_r29->unk_62 == 0) { if (var_r29->unk_62 == 0) {
var_r31->x = var_r31->y = var_r31->z = 0.0f; var_r31->x = var_r31->y = var_r31->z = 0.0f;
@ -3058,9 +3064,9 @@ void fn_1_DCD4(ModelData *model, Mtx matrix)
} }
else { else {
fn_1_E420(&var_r30->unk_2C, &sp38, &var_r29->unk_48, 4); fn_1_E420(&var_r30->unk_2C, &sp38, &var_r29->unk_48, 4);
PSMTXRotRad(spC8, 0x5A, MTXDegToRad(var_r29->unk_44)); MTXRotRad(spC8, 0x5A, MTXDegToRad(var_r29->unk_44));
PSMTXConcat(sp128, spC8, sp98); MTXConcat(sp128, spC8, sp98);
PSMTXMultVecArray(sp98, &sp38, &sp8, 4); MTXMultVecArray(sp98, &sp38, &sp8, 4);
PSVECAdd(&sp8, &var_r29->unk_54, var_r31++); PSVECAdd(&sp8, &var_r29->unk_54, var_r31++);
PSVECAdd(&sp14, &var_r29->unk_54, var_r31++); PSVECAdd(&sp14, &var_r29->unk_54, var_r31++);
PSVECAdd(&sp20, &var_r29->unk_54, var_r31++); PSVECAdd(&sp20, &var_r29->unk_54, var_r31++);

View file

@ -1645,7 +1645,7 @@ void fn_1_13FBC(ModelData *model, Mtx matrix)
var_r27 = &lbl_1_bss_578[*var_r25]; var_r27 = &lbl_1_bss_578[*var_r25];
var_r24 = lbl_1_bss_56C[*var_r25]; var_r24 = lbl_1_bss_56C[*var_r25];
GXLoadPosMtxImm(matrix, 0); GXLoadPosMtxImm(matrix, 0);
PSMTXInvXpose(matrix, sp70); MTXInvXpose(matrix, sp70);
GXLoadNrmMtxImm(sp70, 0); GXLoadNrmMtxImm(sp70, 0);
GXSetNumTevStages(1); GXSetNumTevStages(1);
GXSetNumTexGens(1); GXSetNumTexGens(1);

View file

@ -980,6 +980,9 @@ void fn_1_3B64(void)
GXTexCoord2f32(0.0f, 1.0f); GXTexCoord2f32(0.0f, 1.0f);
} }
} }
#ifdef TARGET_PC
GXDestroyTexObj(&sp14);
#endif
} }
s32 lbl_1_data_EC[] = { s32 lbl_1_data_EC[] = {

View file

@ -3109,7 +3109,7 @@ void fn_1_134C0(ModelData *var_r23, Mtx var_r22)
if (HmfInverseMtxF3X3(var_r22, &sp128[0]) == 0) { if (HmfInverseMtxF3X3(var_r22, &sp128[0]) == 0) {
MTXIdentity(sp128); MTXIdentity(sp128);
} }
PSMTXReorder(sp128, sp8); MTXReorder(sp128, sp8);
if (var_r31->unk_4C) { if (var_r31->unk_4C) {
var_r18 = var_r31->unk_4C; var_r18 = var_r31->unk_4C;
var_r18(var_r23, var_r31, var_r22); 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_r29 = var_r31->unk_3C;
var_r30 = var_r31->unk_40; var_r30 = var_r31->unk_40;
var_r28 = var_r31->unk_44; 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++) { for (var_r26 = 0; var_r26 < var_r31->unk_26; var_r26++, var_r29++) {
if (!var_r29->unk_30) { if (!var_r29->unk_30) {
var_r30->x = var_r30->y = var_r30->z = 0.0f; var_r30->x = var_r30->y = var_r30->z = 0.0f;

View file

@ -1284,6 +1284,9 @@ void fn_1_8CE0(ModelData *model, Mtx matrix)
GXSetNumIndStages(0); GXSetNumIndStages(0);
GXSetTevDirect(GX_TEVSTAGE0); GXSetTevDirect(GX_TEVSTAGE0);
GXSetTevDirect(GX_TEVSTAGE1); GXSetTevDirect(GX_TEVSTAGE1);
#ifdef TARGET_PC
GXDestroyTexObj(&sp24);
#endif
} }
Vec lbl_1_data_60[6] = { Vec lbl_1_data_60[6] = {

View file

@ -2095,7 +2095,7 @@ void fn_1_72B4(ModelData *model, Mtx mtx)
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0);
GXSetArray(GX_VA_TEX0, temp_r30->unk20, sizeof(HsfVector2f)); GXSetArray(GX_VA_TEX0, temp_r30->unk20, sizeof(HsfVector2f));
fn_1_79FC(mtx, sp128); fn_1_79FC(mtx, sp128);
PSMTXReorder(sp128, spF8); MTXReorder(sp128, spF8);
if (!omPauseChk() && temp_r30->unkC) { if (!omPauseChk() && temp_r30->unkC) {
temp_r23 = temp_r30->unkC; temp_r23 = temp_r30->unkC;
temp_r23(model, temp_r30, mtx); temp_r23(model, temp_r30, mtx);
@ -2103,7 +2103,7 @@ void fn_1_72B4(ModelData *model, Mtx mtx)
temp_r29 = temp_r30->unk18; temp_r29 = temp_r30->unk18;
temp_r31 = temp_r30->unk1C; temp_r31 = temp_r30->unk1C;
temp_r27 = temp_r30->unk20; 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) { for (temp_r26 = 0; temp_r26 < temp_r30->unk0; temp_r26++, temp_r29++, temp_r27 += 4) {
if (temp_r29->unk56 == 0) { if (temp_r29->unk56 == 0) {
temp_r31->x = temp_r31->y = temp_r31->z = 0; temp_r31->x = temp_r31->y = temp_r31->z = 0;

View file

@ -348,6 +348,9 @@ void fn_1_2978(ModelData *model, Mtx mtx)
GXSetNumIndStages(0); GXSetNumIndStages(0);
GXSetTevDirect(GX_TEVSTAGE0); GXSetTevDirect(GX_TEVSTAGE0);
GXSetTevDirect(GX_TEVSTAGE1); GXSetTevDirect(GX_TEVSTAGE1);
#ifdef TARGET_PC
GXDestroyTexObj(&spC);
#endif
} }
void fn_1_3004(void) 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);
GXPosition3f32(-1000.0f, -5.000001f, 1000.0f); GXPosition3f32(-1000.0f, -5.000001f, 1000.0f);
GXEnd(); GXEnd();
#ifdef TARGET_PC
GXDestroyTexObj(&sp10);
#endif
} }
GXColor lbl_1_data_170 = { 255, 0, 0, 255 }; GXColor lbl_1_data_170 = { 255, 0, 0, 255 };

File diff suppressed because it is too large Load diff

View file

@ -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); GXInitTexObjLOD(&sp1C, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, 0, 0, GX_ANISO_1);
GXLoadTexObj(&sp1C, arg2); GXLoadTexObj(&sp1C, arg2);
return; #ifdef TARGET_PC
GXDestroyTexObj(&sp1C);
GXDestroyTlutObj(&sp10);
#endif
} }
void fn_1_806C(ModelData *arg0, Mtx arg1) 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); GXSetTexCopyDst(0x280, 0x1E0, GX_TF_RGBA8, GX_FALSE);
GXCopyTex(lbl_1_bss_28, 0); GXCopyTex(lbl_1_bss_28, 0);
DCFlushRange(lbl_1_bss_28, lbl_1_bss_24); 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]) 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); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0);
GXSetArray(GX_VA_TEX0, temp_r30->unk20, 8); GXSetArray(GX_VA_TEX0, temp_r30->unk20, 8);
fn_1_9344(arg1, sp128); fn_1_9344(arg1, sp128);
PSMTXReorder(sp128, spF8); MTXReorder(sp128, spF8);
if (((u8)omPauseChk() == 0) && (temp_r30->unkC)) { if (((u8)omPauseChk() == 0) && (temp_r30->unkC)) {
var_r23 = temp_r30->unkC; var_r23 = temp_r30->unkC;
var_r23(arg0, temp_r30, arg1); var_r23(arg0, temp_r30, arg1);
@ -2468,7 +2474,7 @@ void fn_1_9C04(ModelData *arg0, Mtx arg1)
var_r29 = temp_r30->unk18; var_r29 = temp_r30->unk18;
var_r31 = temp_r30->unk1C; var_r31 = temp_r30->unk1C;
var_r27 = temp_r30->unk20; 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) { for (var_r26 = 0; var_r26 < temp_r30->unk0; var_r26++, var_r29++, var_r27 += 4) {
if (var_r29->unk62 == 0) { if (var_r29->unk62 == 0) {

View file

@ -1531,8 +1531,8 @@ void fn_1_485C(ModelData *model, Mtx mtx)
GXSetProjection(sp40, GX_PERSPECTIVE); GXSetProjection(sp40, GX_PERSPECTIVE);
MTXInverse(mtx, spA0); MTXInverse(mtx, spA0);
spA0[0][3] = spA0[1][3] = spA0[2][3] = 0.0f; spA0[0][3] = spA0[1][3] = spA0[2][3] = 0.0f;
PSMTXReorder(spA0, sp70); MTXReorder(spA0, sp70);
PSMTXROMultVecArray(sp70, &lbl_1_data_1C0[0], &sp10, 4); MTXROMultVecArray(sp70, &lbl_1_data_1C0[0], &sp10, 4);
GXLoadPosMtxImm(mtx, 0); GXLoadPosMtxImm(mtx, 0);
var_r31 = lbl_1_bss_5C; var_r31 = lbl_1_bss_5C;
for (var_r30 = 0; var_r30 < 1024; var_r30++, var_r31++) { 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); GXSetNumIndStages(0);
GXSetTevDirect(GX_TEVSTAGE0); GXSetTevDirect(GX_TEVSTAGE0);
GXSetTevDirect(GX_TEVSTAGE1); GXSetTevDirect(GX_TEVSTAGE1);
#ifdef TARGET_PC
GXDestroyTexObj(&spC);
#endif
} }
s16 fn_1_5918(Vec *arg0) s16 fn_1_5918(Vec *arg0)

View file

@ -5,7 +5,6 @@
#include "game/frand.h" #include "game/frand.h"
#include "game/gamework_data.h" #include "game/gamework_data.h"
#include "game/hsfman.h" #include "game/hsfman.h"
#include "game/jmp.h"
#include "game/minigame_seq.h" #include "game/minigame_seq.h"
#include "game/window.h" #include "game/window.h"
#include "game/wipe.h" #include "game/wipe.h"

View file

@ -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 }; const Vec lbl_1_rodata_100 = { 0.0f, 0.0f, 0.0f };

View file

@ -1608,7 +1608,7 @@ void fn_1_56C4(ModelData *arg0, Mtx arg1)
sp130[0][3] = 0.0f; sp130[0][3] = 0.0f;
sp130[1][3] = 0.0f; sp130[1][3] = 0.0f;
sp130[2][3] = 0.0f; sp130[2][3] = 0.0f;
PSMTXReorder(sp130, sp100); MTXReorder(sp130, sp100);
if ((omPauseChk() == 0) && (var_r31->unk_00)) { if ((omPauseChk() == 0) && (var_r31->unk_00)) {
spC = var_r31->unk_00; spC = var_r31->unk_00;
spC(arg0, var_r31, arg1); spC(arg0, var_r31, arg1);
@ -1616,7 +1616,7 @@ void fn_1_56C4(ModelData *arg0, Mtx arg1)
var_r29 = var_r31->unk_10; var_r29 = var_r31->unk_10;
var_r30 = var_r31->unk_14; var_r30 = var_r31->unk_14;
var_r27 = var_r31->unk_18; 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) { for (var_r19 = 0; var_r19 < var_r31->unk_64; var_r19++, var_r29++, var_r27 += 4) {
if (var_r29->unk_3E < 0) { if (var_r29->unk_3E < 0) {
var_r30->x = var_r30->y = var_r30->z = 0.0f; 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) { else if (0.0f > arg8) {
arg8 += 360.0f; 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))); *arg4 = atan2d(sp14.y, sqrtf((sp14.x * sp14.x) + (sp14.z * sp14.z)));
if (arg2 == 0) { if (arg2 == 0) {
*arg3 *= -1.0f; *arg3 *= -1.0f;

View file

@ -968,6 +968,9 @@ void fn_1_6144(Work347CUnk4 *fbWork, float x1, float y1, float scale)
GXPosition3f32(x1, y2, 0); GXPosition3f32(x1, y2, 0);
GXTexCoord2f32(0, 1); GXTexCoord2f32(0, 1);
GXEnd(); GXEnd();
#ifdef TARGET_PC
GXDestroyTexObj(&texObj);
#endif
} }
void fn_1_6594(s16 arg0, Work347CUnk4 *arg1, GXTexWrapMode arg2, s32 arg3, BOOL arg4) 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); GXInitTexObjLOD(&texObj, GX_NEAR, GX_NEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1);
} }
GXLoadTexObj(&texObj, arg0); GXLoadTexObj(&texObj, arg0);
#ifdef TARGET_PC
GXDestroyTexObj(&texObj);
#endif
} }
s32 fn_1_6698(Vec *arg0, float arg1, float arg2, s32 arg3) s32 fn_1_6698(Vec *arg0, float arg1, float arg2, s32 arg3)

View file

@ -857,6 +857,9 @@ void fn_1_5C74(Work2FACUnk4 *fbWork, float x1, float y1, float scale)
GXPosition3f32(x1, y2, 0); GXPosition3f32(x1, y2, 0);
GXTexCoord2f32(0, 1); GXTexCoord2f32(0, 1);
GXEnd(); GXEnd();
#ifdef TARGET_PC
GXDestroyTexObj(&texObj);
#endif
} }
void fn_1_60C4(s16 arg0, Work2FACUnk4 *arg1, GXTexWrapMode arg2, s32 arg3, BOOL arg4) 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); GXInitTexObjLOD(&texObj, GX_NEAR, GX_NEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1);
} }
GXLoadTexObj(&texObj, arg0); GXLoadTexObj(&texObj, arg0);
#ifdef TARGET_PC
GXDestroyTexObj(&texObj);
#endif
} }
s32 fn_1_61C8(Vec *arg0, float arg1, float arg2, s32 arg3) s32 fn_1_61C8(Vec *arg0, float arg1, float arg2, s32 arg3)

View file

@ -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); 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) void fn_1_7B94(s32 arg0)

View file

@ -859,6 +859,9 @@ void fn_1_2B68(ModelData *mdl, Mtx arg1)
GXSetNumIndStages(0U); GXSetNumIndStages(0U);
GXSetTevDirect(GX_TEVSTAGE0); GXSetTevDirect(GX_TEVSTAGE0);
GXSetTevDirect(GX_TEVSTAGE1); GXSetTevDirect(GX_TEVSTAGE1);
#ifdef TARGET_PC
GXDestroyTexObj(&sp30);
#endif
} }
// -------------------------------------------------------------------------- // // -------------------------------------------------------------------------- //

View file

@ -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);
GXPosition3f32(-500.0f, 0, 500.0f); GXPosition3f32(-500.0f, 0, 500.0f);
GXEnd(); GXEnd();
#ifdef TARGET_PC
GXDestroyTexObj(&tex);
#endif
} }

View file

@ -761,7 +761,7 @@ void fn_1_97F8(s32 arg0)
temp_r30 = OM_GET_WORK_PTR(temp_r3, unkTemp2); temp_r30 = OM_GET_WORK_PTR(temp_r3, unkTemp2);
temp_r30->unk00_bit0 = 0; temp_r30->unk00_bit0 = 0;
temp_r30->unk4 = arg0; 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); BoardPlayerPosGet(arg0, &sp8);
temp_r30->unk8 = (80.0f + sp8.y); temp_r30->unk8 = (80.0f + sp8.y);
memset(temp_r30->unk_0C, 0, 0x190); memset(temp_r30->unk_0C, 0, 0x190);

View file

@ -157,7 +157,7 @@ void fn_1_9D0C(omObjData *arg0)
s32 var_r30; s32 var_r30;
dataCopy2 *temp_r31; 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 = arg0->data;
temp_r31->unk_02 = 5; temp_r31->unk_02 = 5;
temp_r31->unk_04 = 0x3C; temp_r31->unk_04 = 0x3C;
@ -318,7 +318,7 @@ void fn_1_A5B0(omObjData *arg0)
BoardModelVisibilitySet(lbl_1_bss_D4, 1); BoardModelVisibilitySet(lbl_1_bss_D4, 1);
BoardModelMotionTimeSet(lbl_1_bss_D4, 110.0f); BoardModelMotionTimeSet(lbl_1_bss_D4, 110.0f);
lbl_1_bss_C8 = temp_r29 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_B3C4); 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; temp_r31 = temp_r29->data;
lbl_1_bss_C8->work[1] = 1; lbl_1_bss_C8->work[1] = 1;
Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[1]), "fish", &sp14); Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[1]), "fish", &sp14);

View file

@ -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_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_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 = 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) { if (lbl_1_bss_78 == NULL) {
lbl_1_bss_78 = HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_EFFECT, 0x00)); lbl_1_bss_78 = HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_EFFECT, 0x00));
HuSprAnimLock(lbl_1_bss_78); HuSprAnimLock(lbl_1_bss_78);

View file

@ -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); 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
} }

View file

@ -53,6 +53,9 @@ void DEMOLoadFont(enum _GXTexMapID texMap, enum _GXTexMtx texMtx, DMTexFlt texFl
GXLoadTexMtxImm(fontTMtx, texMtx, 1); GXLoadTexMtxImm(fontTMtx, texMtx, 1);
GXSetNumTexGens(1); GXSetNumTexGens(1);
GXSetTexCoordGen(0, 1, 4, texMtx); GXSetTexCoordGen(0, 1, 4, texMtx);
#ifdef TARGET_PC
GXDestroyTexObj(&fontTexObj);
#endif
} }
void DEMOSetupScrnSpc(long width, long height, float depth) void DEMOSetupScrnSpc(long width, long height, float depth)

View file

@ -1,4 +1,5 @@
#include "dolphin/mtx.h" #include "dolphin/mtx.h"
#include "dolphin/gx/GXPriv.h"
static f32 Unit01[] = { 0.0f, 1.0f }; static f32 Unit01[] = { 0.0f, 1.0f };
@ -6,17 +7,21 @@ extern f32 sinf(f32);
extern f32 cosf(f32); extern f32 cosf(f32);
extern f32 tanf(f32); extern f32 tanf(f32);
void C_MTXIdentity(Mtx mtx) void C_MTXIdentity(Mtx m)
{ {
mtx[0][0] = 1.0f; ASSERTMSGLINE(189, m, "MtxIdentity(): NULL Mtx 'm' ");
mtx[0][1] = 0.0f; m[0][0] = 1;
mtx[0][2] = 0.0f; m[0][1] = 0;
mtx[1][0] = 0.0f; m[0][2] = 0;
mtx[1][1] = 1.0f; m[0][3] = 0;
mtx[1][2] = 0.0f; m[1][0] = 0;
mtx[2][0] = 0.0f; m[1][1] = 1;
mtx[2][1] = 0.0f; m[1][2] = 0;
mtx[2][2] = 1.0f; m[1][3] = 0;
m[2][0] = 0;
m[2][1] = 0;
m[2][2] = 1;
m[2][3] = 0;
} }
#ifdef GEKKO #ifdef GEKKO
@ -41,27 +46,23 @@ void PSMTXIdentity(register Mtx m)
} }
#endif #endif
void C_MTXCopy(const Mtx src, Mtx dst) 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) { if (src != dst) {
return; 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 #ifdef GEKKO
@ -88,33 +89,34 @@ asm void PSMTXCopy(const register Mtx src, register Mtx dst)
} }
#endif #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; Mtx mTmp;
MtxPtr m; MtxPtr m;
if ((ab == a) || (ab == b)) { ASSERTMSGLINE(324, a, "MTXConcat(): NULL MtxPtr 'a' ");
m = mTmp; 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 = ab;
} }
m[0][0] = a[0][0] * b[0][0] + a[0][1] * b[1][0] + a[0][2] * b[2][0]; 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] = a[0][0] * b[0][1] + a[0][1] * b[1][1] + a[0][2] * b[2][1]; 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] = a[0][0] * b[0][2] + a[0][1] * b[1][2] + a[0][2] * b[2][2]; 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][0] * b[0][3] + a[0][1] * b[1][3] + a[0][2] * b[2][3] + a[0][3]; 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][0] = 0 + a[1][2] * b[2][0] + ((a[1][0] * b[0][0]) + (a[1][1] * b[1][0]));
m[1][1] = a[1][0] * b[0][1] + a[1][1] * b[1][1] + a[1][2] * b[2][1]; 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] = a[1][0] * b[0][2] + a[1][1] * b[1][2] + a[1][2] * b[2][2]; 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][0] * b[0][3] + a[1][1] * b[1][3] + a[1][2] * b[2][3] + a[1][3]; 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][0] = 0 + a[2][2] * b[2][0] + ((a[2][0] * b[0][0]) + (a[2][1] * b[1][0]));
m[2][1] = a[2][0] * b[0][1] + a[2][1] * b[1][1] + a[2][2] * b[2][1]; 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] = a[2][0] * b[0][2] + a[2][1] * b[1][2] + a[2][2] * b[2][2]; 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][0] * b[0][3] + a[2][1] * b[1][3] + a[2][2] * b[2][3] + a[2][3]; 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) { if (m == mTmp) {
C_MTXCopy(mTmp, ab); C_MTXCopy(mTmp, ab);
@ -222,12 +224,16 @@ asm void PSMTXConcat(const register Mtx mA, const register Mtx mB, register Mtx
} }
#endif #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; 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++) { for (i = 0; i < count; i++) {
C_MTXConcat(a, *srcBase, *dstBase); C_MTXConcat(a, *srcBase, *dstBase);
srcBase++; srcBase++;
dstBase++; dstBase++;
} }
@ -351,31 +357,31 @@ _loop:
#endif #endif
void C_MTXTranspose(const Mtx src, Mtx xPose) void C_MTXTranspose(const Mtx src, Mtx xPose) {
{
Mtx mTmp; Mtx mTmp;
MtxPtr m; MtxPtr m;
ASSERTMSGLINE(851, src, "MTXTranspose(): NULL MtxPtr 'src' ");
ASSERTMSGLINE(852, xPose, "MTXTranspose(): NULL MtxPtr 'xPose' ");
if (src == xPose) { if (src == xPose) {
m = mTmp; m = mTmp;
} } else {
else {
m = xPose; m = xPose;
} }
m[0][0] = src[0][0]; m[0][0] = src[0][0];
m[0][1] = src[1][0]; m[0][1] = src[1][0];
m[0][2] = src[2][0]; m[0][2] = src[2][0];
m[0][3] = 0.0f; m[0][3] = 0;
m[1][0] = src[0][1]; m[1][0] = src[0][1];
m[1][1] = src[1][1]; m[1][1] = src[1][1];
m[1][2] = src[2][1]; m[1][2] = src[2][1];
m[1][3] = 0.0f; m[1][3] = 0;
m[2][0] = src[0][2]; m[2][0] = src[0][2];
m[2][1] = src[1][2]; m[2][1] = src[1][2];
m[2][2] = src[2][2]; m[2][2] = src[2][2];
m[2][3] = 0.0f; m[2][3] = 0;
if (m == mTmp) { if (m == mTmp) {
C_MTXCopy(mTmp, xPose); C_MTXCopy(mTmp, xPose);
} }
@ -413,48 +419,48 @@ void PSMTXTranspose(const register Mtx src, register Mtx xPose)
} }
#endif #endif
u32 C_MTXInverse(const Mtx src, Mtx inv) u32 C_MTXInverse(const Mtx src, Mtx inv) {
{
Mtx mTmp; Mtx mTmp;
MtxPtr m; MtxPtr m;
f32 det; f32 det;
ASSERTMSGLINE(950, src, "MTXInverse(): NULL MtxPtr 'src' ");
ASSERTMSGLINE(951, inv, "MTXInverse(): NULL MtxPtr 'inv' ");
if (src == inv) { if (src == inv) {
m = mTmp; m = mTmp;
} } else {
else {
m = inv; m = inv;
} }
det = ((((src[2][1] * (src[0][2] * src[1][0]))
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][2] * (src[0][0] * src[1][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]; + (src[2][0] * (src[0][1] * src[1][2]))))
- (src[0][2] * (src[2][0] * src[1][1])))
if (det == 0.0f) { - (src[2][2] * (src[1][0] * src[0][1])))
- (src[1][2] * (src[0][0] * src[2][1]));
if (0 == det) {
return 0; 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[2][0] = (det * +((src[1][0] * src[2][1]) - (src[2][0] * src[1][1])));
m[0][1] = -(src[0][1] * src[2][2] - src[2][1] * src[0][2]) * det; m[2][1] = (det * -((src[0][0] * src[2][1]) - (src[2][0] * src[0][1])));
m[0][2] = (src[0][1] * src[1][2] - src[1][1] * src[0][2]) * det; 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[0][3] = ((-m[0][0] * src[0][3]) - (m[0][1] * src[1][3])) - (m[0][2] * src[2][3]);
m[1][1] = (src[0][0] * src[2][2] - src[2][0] * src[0][2]) * det; m[1][3] = ((-m[1][0] * src[0][3]) - (m[1][1] * src[1][3])) - (m[1][2] * src[2][3]);
m[1][2] = -(src[0][0] * src[1][2] - src[1][0] * src[0][2]) * det; m[2][3] = ((-m[2][0] * src[0][3]) - (m[2][1] * src[1][3])) - (m[2][2] * src[2][3]);
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];
if (m == mTmp) { if (m == mTmp) {
C_MTXCopy(mTmp, inv); C_MTXCopy(mTmp, inv);
} }
return 1; return 1;
} }
@ -531,48 +537,48 @@ _regular:
} }
#endif #endif
u32 C_MTXInvXpose(const Mtx src, Mtx invX) u32 C_MTXInvXpose(const Mtx src, Mtx invX) {
{
Mtx mTmp; Mtx mTmp;
MtxPtr m; MtxPtr m;
f32 det; f32 det;
ASSERTMSGLINE(1185, src, "MTXInvXpose(): NULL MtxPtr 'src' ");
ASSERTMSGLINE(1186, invX, "MTXInvXpose(): NULL MtxPtr 'invX' ");
if (src == invX) { if (src == invX) {
m = mTmp; m = mTmp;
} } else {
else {
m = invX; m = invX;
} }
det = ((((src[2][1] * (src[0][2] * src[1][0]))
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][2] * (src[0][0] * src[1][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]; + (src[2][0] * (src[0][1] * src[1][2]))))
- (src[0][2] * (src[2][0] * src[1][1])))
if (det == 0.0f) { - (src[2][2] * (src[1][0] * src[0][1])))
- (src[1][2] * (src[0][0] * src[2][1]));
if (0 == det) {
return 0; 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[2][0] = (det * +((src[0][1] * src[1][2]) - (src[1][1] * src[0][2])));
m[0][1] = -(src[1][0] * src[2][2] - src[2][0] * src[1][2]) * det; m[2][1] = (det * -((src[0][0] * src[1][2]) - (src[1][0] * src[0][2])));
m[0][2] = (src[1][0] * src[2][1] - src[2][0] * src[1][1]) * det; 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[0][3] = 0;
m[1][1] = (src[0][0] * src[2][2] - src[2][0] * src[0][2]) * det; m[1][3] = 0;
m[1][2] = -(src[0][0] * src[2][1] - src[2][0] * src[0][1]) * det; m[2][3] = 0;
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;
if (m == mTmp) { if (m == mTmp) {
C_MTXCopy(mTmp, invX); C_MTXCopy(mTmp, invX);
} }
return 1; return 1;
} }
@ -638,10 +644,11 @@ _regular:
} }
#endif #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); sinA = sinf(rad);
cosA = cosf(rad); cosA = cosf(rad);
C_MTXRotTrig(m, axis, sinA, cosA); C_MTXRotTrig(m, axis, sinA, cosA);
@ -659,60 +666,57 @@ void PSMTXRotRad(Mtx m, char axis, f32 rad)
} }
#endif #endif
void C_MTXRotTrig(Mtx m, char axis, f32 sinA, f32 cosA) void C_MTXRotTrig(Mtx m, char axis, f32 sinA, f32 cosA) {
{ ASSERTMSGLINE(1502, m, "MTXRotTrig(): NULL MtxPtr 'm' ");
switch (axis) { switch(axis) {
case 'x':
case 'x': case 'X':
case 'X': m[0][0] = 1;
m[0][0] = 1.0f; m[0][1] = 0;
m[0][1] = 0.0f; m[0][2] = 0;
m[0][2] = 0.0f; m[0][3] = 0;
m[0][3] = 0.0f; m[1][0] = 0;
m[1][0] = 0.0f; m[1][1] = cosA;
m[1][1] = cosA; m[1][2] = -sinA;
m[1][2] = -sinA; m[1][3] = 0;
m[1][3] = 0.0f; m[2][0] = 0;
m[2][0] = 0.0f; m[2][1] = sinA;
m[2][1] = sinA; m[2][2] = cosA;
m[2][2] = cosA; m[2][3] = 0;
m[2][3] = 0.0f; break;
break; case 'y':
case 'Y':
case 'y': m[0][0] = cosA;
case 'Y': m[0][1] = 0;
m[0][0] = cosA; m[0][2] = sinA;
m[0][1] = 0.0f; m[0][3] = 0;
m[0][2] = sinA; m[1][0] = 0;
m[0][3] = 0.0f; m[1][1] = 1;
m[1][0] = 0.0f; m[1][2] = 0;
m[1][1] = 1.0f; m[1][3] = 0;
m[1][2] = 0.0f; m[2][0] = -sinA;
m[1][3] = 0.0f; m[2][1] = 0;
m[2][0] = -sinA; m[2][2] = cosA;
m[2][1] = 0.0f; m[2][3] = 0;
m[2][2] = cosA; break;
m[2][3] = 0.0f; case 'z':
break; case 'Z':
m[0][0] = cosA;
case 'z': m[0][1] = -sinA;
case 'Z': m[0][2] = 0;
m[0][0] = cosA; m[0][3] = 0;
m[0][1] = -sinA; m[1][0] = sinA;
m[0][2] = 0.0f; m[1][1] = cosA;
m[0][3] = 0.0f; m[1][2] = 0;
m[1][0] = sinA; m[1][3] = 0;
m[1][1] = cosA; m[2][0] = 0;
m[1][2] = 0.0f; m[2][1] = 0;
m[1][3] = 0.0f; m[2][2] = 1;
m[2][0] = 0.0f; m[2][3] = 0;
m[2][1] = 0.0f; break;
m[2][2] = 1.0f; default:
m[2][3] = 0.0f; ASSERTMSGLINE(1529, FALSE, "MTXRotTrig(): invalid 'axis' value ");
break; break;
default:
break;
} }
} }
@ -780,42 +784,43 @@ _end:
#endif #endif
void C_MTXRotAxisRad(Mtx m, const Vec *axis, f32 rad) void C_MTXRotAxisRad(Mtx m, const Vec* axis, f32 rad) {
{
Vec vN; Vec vN;
f32 s, c; f32 s;
f32 c;
f32 t; f32 t;
f32 x, y, z; f32 x;
f32 xSq, ySq, zSq; 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); s = sinf(rad);
c = cosf(rad); c = cosf(rad);
t = 1.0f - c; t = 1 - c;
C_VECNormalize(axis, &vN); C_VECNormalize(axis, &vN);
x = vN.x; x = vN.x;
y = vN.y; y = vN.y;
z = vN.z; z = vN.z;
xSq = (x * x);
xSq = x * x; ySq = (y * y);
ySq = y * y; zSq = (z * z);
zSq = z * z; m[0][0] = (c + (t * xSq));
m[0][1] = (y * (t * x)) - (s * z);
m[0][0] = (t * xSq) + (c); m[0][2] = (z * (t * x)) + (s * y);
m[0][1] = (t * x * y) - (s * z); m[0][3] = 0;
m[0][2] = (t * x * z) + (s * y); m[1][0] = ((y * (t * x)) + (s * z));
m[0][3] = 0.0f; m[1][1] = (c + (t * ySq));
m[1][2] = ((z * (t * y)) - (s * x));
m[1][0] = (t * x * y) + (s * z); m[1][3] = 0;
m[1][1] = (t * ySq) + (c); m[2][0] = ((z * (t * x)) - (s * y));
m[1][2] = (t * y * z) - (s * x); m[2][1] = ((z * (t * y)) + (s * x));
m[1][3] = 0.0f; m[2][2] = (c + (t * zSq));
m[2][3] = 0;
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;
} }
#ifdef GEKKO #ifdef GEKKO
@ -875,19 +880,19 @@ void PSMTXRotAxisRad(register Mtx m, const Vec *axis, register f32 rad)
#endif #endif
void C_MTXTrans(Mtx m, f32 xT, f32 yT, f32 zT) void C_MTXTrans(Mtx m, f32 xT, f32 yT, f32 zT) {
{ ASSERTMSGLINE(1866, m, "MTXTrans(): NULL MtxPtr 'm' ");
m[0][0] = 1.0f; m[0][0] = 1;
m[0][1] = 0.0f; m[0][1] = 0;
m[0][2] = 0.0f; m[0][2] = 0;
m[0][3] = xT; m[0][3] = xT;
m[1][0] = 0.0f; m[1][0] = 0;
m[1][1] = 1.0f; m[1][1] = 1;
m[1][2] = 0.0f; m[1][2] = 0;
m[1][3] = yT; m[1][3] = yT;
m[2][0] = 0.0f; m[2][0] = 0;
m[2][1] = 0.0f; m[2][1] = 0;
m[2][2] = 1.0f; m[2][2] = 1;
m[2][3] = zT; m[2][3] = zT;
} }
@ -914,8 +919,10 @@ void PSMTXTrans(register Mtx m, register f32 xT, register f32 yT, register f32 z
} }
#endif #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) { if (src != dst) {
dst[0][0] = src[0][0]; dst[0][0] = src[0][0];
dst[0][1] = src[0][1]; 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[2][2] = src[2][2];
} }
dst[0][3] = src[0][3] + xT; dst[0][3] = (src[0][3] + xT);
dst[1][3] = src[1][3] + yT; dst[1][3] = (src[1][3] + yT);
dst[2][3] = src[2][3] + zT; dst[2][3] = (src[2][3] + zT);
} }
#ifdef GEKKO #ifdef GEKKO
@ -961,20 +968,20 @@ asm void PSMTXTransApply(const register Mtx src, register Mtx dst, register f32
} }
#endif #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][0] = xS;
m[0][1] = 0.0f; m[0][1] = 0;
m[0][2] = 0.0f; m[0][2] = 0;
m[0][3] = 0.0f; m[0][3] = 0;
m[1][0] = 0.0f; m[1][0] = 0;
m[1][1] = yS; m[1][1] = yS;
m[1][2] = 0.0f; m[1][2] = 0;
m[1][3] = 0.0f; m[1][3] = 0;
m[2][0] = 0.0f; m[2][0] = 0;
m[2][1] = 0.0f; m[2][1] = 0;
m[2][2] = zS; m[2][2] = zS;
m[2][3] = 0.0f; m[2][3] = 0;
} }
#ifdef GEKKO #ifdef GEKKO
@ -997,22 +1004,21 @@ void PSMTXScale(register Mtx m, register f32 xS, register f32 yS, register f32 z
} }
#endif #endif
void C_MTXScaleApply(const Mtx src, Mtx dst, f32 xS, f32 yS, f32 zS) void C_MTXScaleApply(const Mtx src, Mtx dst, f32 xS, f32 yS, f32 zS) {
{ ASSERTMSGLINE(2070, src, "MTXScaleApply(): NULL MtxPtr 'src' ");
dst[0][0] = src[0][0] * xS; ASSERTMSGLINE(2071, dst, "MTXScaleApply(): NULL MtxPtr 'dst' ");
dst[0][1] = src[0][1] * xS; dst[0][0] = (src[0][0] * xS);
dst[0][2] = src[0][2] * xS; dst[0][1] = (src[0][1] * xS);
dst[0][3] = src[0][3] * xS; dst[0][2] = (src[0][2] * xS);
dst[0][3] = (src[0][3] * xS);
dst[1][0] = src[1][0] * yS; dst[1][0] = (src[1][0] * yS);
dst[1][1] = src[1][1] * yS; dst[1][1] = (src[1][1] * yS);
dst[1][2] = src[1][2] * yS; dst[1][2] = (src[1][2] * yS);
dst[1][3] = src[1][3] * yS; dst[1][3] = (src[1][3] * yS);
dst[2][0] = (src[2][0] * zS);
dst[2][0] = src[2][0] * zS; dst[2][1] = (src[2][1] * zS);
dst[2][1] = src[2][1] * zS; dst[2][2] = (src[2][2] * zS);
dst[2][2] = src[2][2] * zS; dst[2][3] = (src[2][3] * zS);
dst[2][3] = src[2][3] * zS;
} }
#ifdef GEKKO #ifdef GEKKO
@ -1046,12 +1052,25 @@ asm void PSMTXScaleApply(const register Mtx src, register Mtx dst, register f32
} }
#endif #endif
void C_MTXQuat(Mtx m, const Quaternion *q) void C_MTXQuat(Mtx m, const Quaternion* q) {
{ f32 s;
f32 xs;
f32 s, xs, ys, zs, wx, wy, wz, xx, xy, xz, yy, yz, zz; f32 ys;
s = 2.0f / ((q->x * q->x) + (q->y * q->y) + (q->z * q->z) + (q->w * q->w)); 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; xs = q->x * s;
ys = q->y * s; ys = q->y * s;
zs = q->z * s; zs = q->z * s;
@ -1064,21 +1083,18 @@ void C_MTXQuat(Mtx m, const Quaternion *q)
yy = q->y * ys; yy = q->y * ys;
yz = q->y * zs; yz = q->y * zs;
zz = q->z * zs; zz = q->z * zs;
m[0][0] = (1 - (yy + zz));
m[0][0] = 1.0f - (yy + zz); m[0][1] = (xy - wz);
m[0][1] = xy - wz; m[0][2] = (xz + wy);
m[0][2] = xz + wy; m[0][3] = 0;
m[0][3] = 0.0f; m[1][0] = (xy + wz);
m[1][1] = (1 - (xx + zz));
m[1][0] = xy + wz; m[1][2] = (yz - wx);
m[1][1] = 1.0f - (xx + zz); m[1][3] = 0;
m[1][2] = yz - wx; m[2][0] = (xz - wy);
m[1][3] = 0.0f; m[2][1] = (yz + wx);
m[2][2] = (1 - (xx + yy));
m[2][0] = xz - wy; m[2][3] = 0;
m[2][1] = yz + wx;
m[2][2] = 1.0f - (xx + yy);
m[2][3] = 0.0f;
} }
#ifdef GEKKO #ifdef GEKKO
@ -1136,29 +1152,28 @@ void PSMTXQuat(register Mtx m, const register Quaternion *q)
} }
#endif #endif
void C_MTXReflect(Mtx m, const Vec *p, const Vec *n) void C_MTXReflect(Mtx m, const Vec* p, const Vec* n) {
{ f32 vxy;
f32 vxy, vxz, vyz, pdotn; f32 vxz;
f32 vyz;
f32 pdotn;
vxy = -2.0f * n->x * n->y; vxy = -2 * n->x * n->y;
vxz = -2.0f * n->x * n->z; vxz = -2 * n->x * n->z;
vyz = -2.0f * n->y * n->z; vyz = -2 * n->y * n->z;
pdotn = 2.0f * C_VECDotProduct(p, n); pdotn = 2 * C_VECDotProduct(p, n);
m[0][0] = (1 - (2 * n->x * n->x));
m[0][0] = 1.0f - 2.0f * n->x * n->x;
m[0][1] = vxy; m[0][1] = vxy;
m[0][2] = vxz; m[0][2] = vxz;
m[0][3] = pdotn * n->x; m[0][3] = (pdotn * n->x);
m[1][0] = vxy; 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][2] = vyz;
m[1][3] = pdotn * n->y; m[1][3] = (pdotn * n->y);
m[2][0] = vxz; m[2][0] = vxz;
m[2][1] = vyz; m[2][1] = vyz;
m[2][2] = 1.0f - 2.0f * n->z * n->z; m[2][2] = (1 - (2 * n->z * n->z));
m[2][3] = pdotn * n->z; m[2][3] = (pdotn * n->z);
} }
#ifdef GEKKO #ifdef GEKKO
@ -1202,9 +1217,15 @@ void PSMTXReflect(register Mtx m, const register Vec *p, const register Vec *n)
} }
#endif #endif
void C_MTXLookAt(Mtx m, const Vec *camPos, const Vec *camUp, const Vec *target) void C_MTXLookAt(Mtx m, const Point3d* camPos, const Vec* camUp, const Point3d* target) {
{ Vec vLook;
Vec vLook, vRight, vUp; 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.x = camPos->x - target->x;
vLook.y = camPos->y - target->y; 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); VECCrossProduct(camUp, &vLook, &vRight);
VECNormalize(&vRight, &vRight); VECNormalize(&vRight, &vRight);
VECCrossProduct(&vLook, &vRight, &vUp); VECCrossProduct(&vLook, &vRight, &vUp);
m[0][0] = vRight.x; m[0][0] = vRight.x;
m[0][1] = vRight.y; m[0][1] = vRight.y;
m[0][2] = vRight.z; 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][0] = vUp.x;
m[1][1] = vUp.y; m[1][1] = vUp.y;
m[1][2] = vUp.z; 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][0] = vLook.x;
m[2][1] = vLook.y; m[2][1] = vLook.y;
m[2][2] = vLook.z; 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; f32 tmp;
tmp = 1.0f / (r - l); ASSERTMSGLINE(2541, m, "MTXLightFrustum(): NULL MtxPtr 'm' ");
m[0][0] = ((2 * n) * tmp) * scaleS; ASSERTMSGLINE(2542, (t != b), "MTXLightFrustum(): 't' and 'b' clipping planes are equal ");
m[0][1] = 0.0f; ASSERTMSGLINE(2543, (l != r), "MTXLightFrustum(): 'l' and 'r' clipping planes are equal ");
m[0][2] = (((r + l) * tmp) * scaleS) - transS;
m[0][3] = 0.0f;
tmp = 1.0f / (t - b); tmp = 1 / (r - l);
m[1][0] = 0.0f; m[0][0] = (scaleS * (2 * n * tmp));
m[1][1] = ((2 * n) * tmp) * scaleT; m[0][1] = 0;
m[1][2] = (((t + b) * tmp) * scaleT) - transT; m[0][2] = (scaleS * (tmp * (r + l))) - transS;
m[1][3] = 0.0f; m[0][3] = 0;
tmp = 1 / (t - b);
m[2][0] = 0.0f; m[1][0] = 0;
m[2][1] = 0.0f; m[1][1] = (scaleT * (2 * n * tmp));
m[2][2] = -1.0f; m[1][2] = (scaleT * (tmp * (t + b))) - transT;
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_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 angle;
f32 cot; 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); angle = MTXDegToRad(angle);
cot = 1 / tanf(angle);
cot = 1.0f / tanf(angle); m[0][0] = (scaleS * (cot / aspect));
m[0][1] = 0;
m[0][0] = (cot / aspect) * scaleS;
m[0][1] = 0.0f;
m[0][2] = -transS; m[0][2] = -transS;
m[0][3] = 0.0f; m[0][3] = 0;
m[1][0] = 0;
m[1][0] = 0.0f; m[1][1] = (cot * scaleT);
m[1][1] = cot * scaleT;
m[1][2] = -transT; m[1][2] = -transT;
m[1][3] = 0.0f; m[1][3] = 0;
m[2][0] = 0;
m[2][0] = 0.0f; m[2][1] = 0;
m[2][1] = 0.0f; m[2][2] = -1;
m[2][2] = -1.0f; m[2][3] = 0;
m[2][3] = 0.0f;
} }
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; 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); ASSERTMSGLINE(2673, m, "MTXLightOrtho(): NULL MtxPtr 'm' ");
m[1][0] = 0.0f; ASSERTMSGLINE(2674, (t != b), "MTXLightOrtho(): 't' and 'b' clipping planes are equal ");
m[1][1] = (2.0f * tmp) * scaleT; ASSERTMSGLINE(2675, (l != r), "MTXLightOrtho(): 'l' and 'r' clipping planes are equal ");
m[1][2] = 0.0f; tmp = 1 / (r - l);
m[1][3] = ((-(t + b) * tmp) * scaleT) + transT; m[0][0] = (2 * tmp * scaleS);
m[0][1] = 0;
m[2][0] = 0.0f; m[0][2] = 0;
m[2][1] = 0.0f; m[0][3] = (transS + (scaleS * (tmp * -(r + l))));
m[2][2] = 0.0f; tmp = 1/ (t - b);
m[2][3] = 1.0f; 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

View file

@ -1,82 +1,98 @@
#include "dolphin/mtx.h" #include "dolphin/mtx.h"
#include "dolphin/gx/GXPriv.h"
#include "math.h" #include "math.h"
void C_MTXFrustum(Mtx44 m, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, f32 arg6) void C_MTXFrustum(Mtx44 m, f32 t, f32 b, f32 l, f32 r, f32 n, f32 f) {
{ f32 tmp;
f32 tmp = 1.0f / (arg4 - arg3);
m[0][0] = (2 * arg5) * tmp; ASSERTMSGLINE(105, m, "MTXFrustum(): NULL Mtx44Ptr 'm' ");
m[0][1] = 0.0f; ASSERTMSGLINE(106, t != b, "MTXFrustum(): 't' and 'b' clipping planes are equal ");
m[0][2] = (arg4 + arg3) * tmp; ASSERTMSGLINE(107, l != r, "MTXFrustum(): 'l' and 'r' clipping planes are equal ");
m[0][3] = 0.0f; ASSERTMSGLINE(108, n != f, "MTXFrustum(): 'n' and 'f' clipping planes are equal ");
tmp = 1.0f / (arg1 - arg2); tmp = 1 / (r - l);
m[1][0] = 0.0f; m[0][0] = (2 * n * tmp);
m[1][1] = (2 * arg5) * tmp; m[0][1] = 0;
m[1][2] = (arg1 + arg2) * tmp; m[0][2] = (tmp * (r + l));
m[1][3] = 0.0f; m[0][3] = 0;
m[2][0] = 0.0f; tmp = 1 / (t - b);
m[2][1] = 0.0f; m[1][0] = 0;
tmp = 1.0f / (arg6 - arg5); m[1][1] = (2 * n * tmp);
m[2][2] = -(arg5)*tmp; m[1][2] = (tmp * (t + b));
m[2][3] = -(arg6 * arg5) * tmp; m[1][3] = 0;
m[3][0] = 0.0f; m[2][0] = 0;
m[3][1] = 0.0f; m[2][1] = 0;
m[3][2] = -1.0f; tmp = 1 / (f - n);
m[3][3] = 0.0f; 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) {
void C_MTXPerspective(Mtx44 m, f32 fovY, f32 aspect, f32 n, f32 f) f32 angle;
{
f32 angle = fovY * 0.5f;
f32 cot; f32 cot;
f32 tmp; 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); angle = MTXDegToRad(angle);
cot = 1.0f / tanf(angle); cot = 1 / tanf(angle);
m[0][0] = cot / aspect; m[0][0] = (cot / aspect);
m[0][1] = 0.0f; m[0][1] = 0;
m[0][2] = 0.0f; m[0][2] = 0;
m[0][3] = 0.0f; m[0][3] = 0;
m[1][0] = 0.0f; m[1][0] = 0;
m[1][1] = cot; m[1][1] = (cot);
m[1][2] = 0.0f; m[1][2] = 0;
m[1][3] = 0.0f; m[1][3] = 0;
m[2][0] = 0.0f; m[2][0] = 0;
m[2][1] = 0.0f; m[2][1] = 0;
tmp = 1.0f / (f - n); tmp = 1 / (f - n);
m[2][2] = -(n)*tmp; m[2][2] = (-n * tmp);
m[2][3] = -(f * n) * tmp; m[2][3] = (tmp * -(f * n));
m[3][0] = 0.0f; m[3][0] = 0;
m[3][1] = 0.0f; m[3][1] = 0;
m[3][2] = -1.0f; m[3][2] = -1;
m[3][3] = 0.0f; m[3][3] = 0;
} }
void C_MTXOrtho(Mtx44 m, f32 t, f32 b, f32 l, f32 r, f32 n, f32 f) void C_MTXOrtho(Mtx44 m, f32 t, f32 b, f32 l, f32 r, f32 n, f32 f) {
{ f32 tmp;
f32 tmp = 1.0f / (r - l);
m[0][0] = 2.0f * tmp; ASSERTMSGLINE(254, m, "MTXOrtho(): NULL Mtx44Ptr 'm' ");
m[0][1] = 0.0f; ASSERTMSGLINE(255, t != b, "MTXOrtho(): 't' and 'b' clipping planes are equal ");
m[0][2] = 0.0f; ASSERTMSGLINE(256, l != r, "MTXOrtho(): 'l' and 'r' clipping planes are equal ");
m[0][3] = -(r + l) * tmp; ASSERTMSGLINE(257, n != f, "MTXOrtho(): 'n' and 'f' clipping planes are equal ");
tmp = 1.0f / (t - b); tmp = 1 / (r - l);
m[1][0] = 0.0f; m[0][0] = 2 * tmp;
m[1][1] = 2.0f * tmp; m[0][1] = 0;
m[1][2] = 0.0f; m[0][2] = 0;
m[1][3] = -(t + b) * tmp; m[0][3] = (tmp * -(r + l));
m[2][0] = 0.0f; tmp = 1 / (t - b);
m[2][1] = 0.0f; m[1][0] = 0;
tmp = 1.0f / (f - n); m[1][1] = 2 * tmp;
m[2][2] = -(1.0f) * tmp; m[1][2] = 0;
m[2][3] = -(f)*tmp; m[1][3] = (tmp * -(t + b));
m[3][0] = 0.0f; m[2][0] = 0;
m[3][1] = 0.0f; m[2][1] = 0;
m[3][2] = 0.0f; tmp = 1 / (f - n);
m[3][3] = 1.0f; 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) asm void PSMTX44Copy(register Mtx44 src, register Mtx44 dest)
{ {
#ifdef __MWERKS__ // clang-format off // clang-format off
nofralloc; nofralloc;
psq_l fp1, 0(src), 0, 0; psq_l fp1, 0(src), 0, 0;
psq_st fp1, 0(dest), 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_l fp1, 0x38(src), 0, 0;
psq_st fp1, 0x38(dest), 0, 0; psq_st fp1, 0x38(dest), 0, 0;
blr; blr;
#endif // clang-format on // clang-format on
} }
#endif

View file

@ -1,4 +1,5 @@
#include "dolphin/mtx.h" #include "dolphin/mtx.h"
#include "dolphin/gx/GXPriv.h"
#include "math.h" #include "math.h"
#define R_RET fp1 #define R_RET fp1
@ -15,9 +16,19 @@
#define FP12 fp12 #define FP12 fp12
#define FP13 fp13 #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) asm void PSVECAdd(const register Vec *vec1, const register Vec *vec2, register Vec *ret)
{ {
#ifdef __MWERKS__ // clang-format off // clang-format off
nofralloc; nofralloc;
psq_l FP2, 0(vec1), 0, 0; psq_l FP2, 0(vec1), 0, 0;
psq_l FP4, 0(vec2), 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; ps_add FP7, FP3, FP5;
psq_st FP7, 8(ret), 1, 0; psq_st FP7, 8(ret), 1, 0;
blr 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) asm void PSVECSubtract(const register Vec *vec1, const register Vec *vec2, register Vec *ret)
{ {
#ifdef __MWERKS__ // clang-format off // clang-format off
nofralloc; nofralloc;
psq_l FP2, 0(vec1), 0, 0; psq_l FP2, 0(vec1), 0, 0;
psq_l FP4, 0(vec2), 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; ps_sub FP7, FP3, FP5;
psq_st FP7, 8(ret), 1, 0; psq_st FP7, 8(ret), 1, 0;
blr blr
#endif // clang-format on // 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
} }
#endif
void C_VECScale(const Vec *src, Vec *dst, f32 scale) 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; 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) void PSVECNormalize(const register Vec *vec1, register Vec *ret)
{ {
#ifdef __MWERKS__ // clang-format off // clang-format off
register f32 half = 0.5f; register f32 half = 0.5f;
register f32 three = 3.0f; register f32 three = 3.0f;
register f32 xx_zz, xx_yy; 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; ps_muls0 FP3, FP3, ret_sqrt;
psq_st FP3, 8(ret), 1, 0; 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) { asm f32 PSVECSquareMag(register const Vec *v) {
#ifdef __MWERKS__ // clang-format off // clang-format off
nofralloc nofralloc
psq_l f0, 0(v), 0, 0 psq_l f0, 0(v), 0, 0
ps_mul f0, f0, f0 ps_mul f0, f0, f0
lfs f1, 8(v) lfs f1, 8(v)
ps_madd f1, f1, f1, f0 ps_madd f1, f1, f1, f0
ps_sum0 f1, f1, f0, f0 ps_sum0 f1, f1, f0, f0
blr blr
#endif // clang-format on // clang-format on
}
#endif
f32 C_VECMag(const Vec *v) {
return sqrtf(C_VECSquareMag(v));
} }
#ifdef GEKKO
f32 PSVECMag(const register Vec *v) f32 PSVECMag(const register Vec *v)
{ {
register f32 v_xy, v_zz, square_mag; register f32 v_xy, v_zz, square_mag;
register f32 ret_mag, n_0, n_1; register f32 ret_mag, n_0, n_1;
register f32 three, half, zero; register f32 three, half, zero;
#ifdef __MWERKS__ // clang-format off // clang-format off
asm { asm {
psq_l v_xy, 0(v), 0, 0 psq_l v_xy, 0(v), 0, 0
ps_mul v_xy, v_xy, v_xy ps_mul v_xy, v_xy, v_xy
lfs v_zz, 8(v) lfs v_zz, 8(v)
ps_madd square_mag, v_zz, v_zz, v_xy ps_madd square_mag, v_zz, v_zz, v_xy
} }
#endif // clang-format on // clang-format on
half = 0.5f; half = 0.5f;
#ifdef __MWERKS__ // clang-format off // clang-format off
asm { asm {
ps_sum0 square_mag, square_mag, v_xy, v_xy ps_sum0 square_mag, square_mag, v_xy, v_xy
frsqrte ret_mag, square_mag frsqrte ret_mag, square_mag
} }
#endif // clang-format on // clang-format on
three = 3.0f; three = 3.0f;
#ifdef __MWERKS__ // clang-format off // clang-format off
asm { asm {
fmuls n_0, ret_mag, ret_mag fmuls n_0, ret_mag, ret_mag
fmuls n_1, ret_mag, half fmuls n_1, ret_mag, half
@ -141,13 +197,24 @@ asm {
fsel ret_mag, ret_mag, ret_mag, square_mag fsel ret_mag, ret_mag, ret_mag, square_mag
fmuls square_mag, square_mag, ret_mag fmuls square_mag, square_mag, ret_mag
} }
#endif // clang-format on // clang-format on
return square_mag; 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) asm f32 PSVECDotProduct(const register Vec *vec1, const register Vec *vec2)
{ {
#ifdef __MWERKS__ // clang-format off // clang-format off
nofralloc; nofralloc;
psq_l f2, 4(r3), 0, 0 /* qr0 */ psq_l f2, 4(r3), 0, 0 /* qr0 */
psq_l f3, 4(r4), 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 */ psq_l f4, 0(r4), 0, 0 /* qr0 */
ps_madd f3, f5, f4, f2 ps_madd f3, f5, f4, f2
ps_sum0 f1, f3, f2, f2 ps_sum0 f1, f3, f2, f2
blr blr
#endif // clang-format on // 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) asm void PSVECCrossProduct(register const Vec *a, register const Vec *b, register Vec *axb)
{ {
#ifdef __MWERKS__ // clang-format off // clang-format off
nofralloc nofralloc
psq_l f1, 0(b), 0, 0 psq_l f1, 0(b), 0, 0
lfs f2, 8(a) 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 psq_st f9, 0(axb), 1, 0
ps_neg f10, f10 ps_neg f10, f10
psq_st f10, 4(axb), 0, 0 psq_st f10, 4(axb), 0, 0
blr blr
#endif // clang-format on // clang-format on
} }
#endif
void C_VECHalfAngle(const Vec *a, const Vec *b, Vec *half) 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); 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) { asm f32 PSVECSquareDistance(register const Vec *a, register const Vec *b) {
#ifdef __MWERKS__ // clang-format off // clang-format off
nofralloc nofralloc
psq_l f0, 4(a), 0, 0 psq_l f0, 4(a), 0, 0
psq_l f1, 4(b), 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_sub f0, f0, f1
ps_madd f1, f0, f0, f2 ps_madd f1, f0, f0, f2
ps_sum0 f1, f1, f2, f2 ps_sum0 f1, f1, f2, f2
blr blr
#endif // clang-format on // 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) 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 three_c;
register f32 dist; register f32 dist;
#ifdef __MWERKS__ // clang-format off // clang-format off
asm { asm {
psq_l f0, 4(a), 0, 0 /* qr0 */ psq_l f0, 4(a), 0, 0 /* qr0 */
psq_l f1, 4(b), 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; return dist;
#endif // clang-format on // clang-format on
} }
#endif

View file

@ -19,14 +19,22 @@ extern char _db_stack_end[];
extern char *__OSResetSWInterruptHandler[]; extern char *__OSResetSWInterruptHandler[];
#ifdef TARGET_PC
vu16 __OSDeviceCode;
#else
vu16 __OSDeviceCode : (OS_BASE_CACHED | 0x30E6); vu16 __OSDeviceCode : (OS_BASE_CACHED | 0x30E6);
#endif
static DVDDriveInfo DriveInfo ATTRIBUTE_ALIGN(32); static DVDDriveInfo DriveInfo ATTRIBUTE_ALIGN(32);
static DVDCommandBlock DriveBlock; static DVDCommandBlock DriveBlock;
static OSBootInfo *BootInfo; static OSBootInfo *BootInfo;
static u32 *BI2DebugFlag; static u32 *BI2DebugFlag;
static u32 *BI2DebugFlagHolder; static u32 *BI2DebugFlagHolder;
#ifdef _MSC_VER
BOOL __OSIsGcam = FALSE;
#else
__declspec(weak) BOOL __OSIsGcam = FALSE; __declspec(weak) BOOL __OSIsGcam = FALSE;
#endif
static f64 ZeroF; static f64 ZeroF;
static f32 ZeroPS[2]; static f32 ZeroPS[2];
static BOOL AreWeInitialized = FALSE; static BOOL AreWeInitialized = FALSE;
@ -56,6 +64,7 @@ void OSDefaultExceptionHandler(__OSException exception, OSContext *context);
extern BOOL __DBIsExceptionMarked(__OSException); extern BOOL __DBIsExceptionMarked(__OSException);
static void OSExceptionInit(void); static void OSExceptionInit(void);
#ifdef __MWERKS__
/* clang-format off */ /* clang-format off */
asm void __OSFPRInit(void) asm void __OSFPRInit(void)
{ {
@ -143,6 +152,7 @@ SkipPairedSingles:
blr blr
} }
/* clang-format on */ /* clang-format on */
#endif
u32 OSGetConsoleType() u32 OSGetConsoleType()
{ {
@ -155,8 +165,8 @@ u32 OSGetConsoleType()
void *__OSSavedRegionStart; void *__OSSavedRegionStart;
void *__OSSavedRegionEnd; void *__OSSavedRegionEnd;
extern u32 BOOT_REGION_START : 0x812FDFF0; //(*(u32 *)0x812fdff0) extern u32 BOOT_REGION_START AT_ADDRESS(0x812FDFF0); //(*(u32 *)0x812fdff0)
extern u32 BOOT_REGION_END : 0x812FDFEC; //(*(u32 *)0x812fdfec) extern u32 BOOT_REGION_END AT_ADDRESS(0x812FDFEC); //(*(u32 *)0x812fdfec)
void ClearArena(void) void ClearArena(void)
{ {
@ -477,6 +487,7 @@ static void OSExceptionInit(void)
DBPrintf("Exceptions initialized...\n"); DBPrintf("Exceptions initialized...\n");
} }
#ifdef __MWERKS__
static asm void __OSDBIntegrator(void) static asm void __OSDBIntegrator(void)
{ {
/* clang-format off */ /* clang-format off */
@ -505,6 +516,7 @@ entry __OSDBJUMPEND
/* clang-format on */ /* clang-format on */
} }
#endif
__OSExceptionHandler __OSSetExceptionHandler(__OSException exception, __OSExceptionHandler handler) __OSExceptionHandler __OSSetExceptionHandler(__OSException exception, __OSExceptionHandler handler)
{ {
@ -519,6 +531,7 @@ __OSExceptionHandler __OSGetExceptionHandler(__OSException exception)
return OSExceptionTable[exception]; return OSExceptionTable[exception];
} }
#ifdef __MWERKS__
static asm void OSExceptionVector(void) static asm void OSExceptionVector(void)
{ {
/* clang-format off */ /* clang-format off */
@ -603,8 +616,10 @@ entry __OSEVEnd
nop nop
/* clang-format on */ /* clang-format on */
} }
#endif
void __OSUnhandledException(__OSException exception, OSContext *context, u32 dsisr, u32 dar); void __OSUnhandledException(__OSException exception, OSContext *context, u32 dsisr, u32 dar);
#ifdef __MWERKS__
asm void OSDefaultExceptionHandler(register __OSException exception, register OSContext *context) asm void OSDefaultExceptionHandler(register __OSException exception, register OSContext *context)
{ {
/* clang-format off */ /* clang-format off */
@ -631,6 +646,7 @@ void __OSPSInit(void)
} }
// clang-format on // clang-format on
} }
#endif
#define DI_CONFIG_IDX 0x9 #define DI_CONFIG_IDX 0x9
#define DI_CONFIG_CONFIG_MASK 0xFF #define DI_CONFIG_CONFIG_MASK 0xFF

View file

@ -1,6 +1,7 @@
#include <dolphin.h> #include <dolphin.h>
#include <dolphin/os.h> #include <dolphin/os.h>
#include <dolphin/os/OSPriv.h> #include <dolphin/os/OSPriv.h>
#include <stdlib.h>
#define ALIGNMENT 32 #define ALIGNMENT 32
@ -137,6 +138,9 @@ static long DLSize(struct Cell *list)
void *OSAllocFromHeap(int heap, unsigned long size) void *OSAllocFromHeap(int heap, unsigned long size)
{ {
#ifdef TARGET_PC
return malloc(size);
#endif
struct HeapDesc *hd; struct HeapDesc *hd;
struct Cell *cell; struct Cell *cell;
struct Cell *newCell; struct Cell *newCell;
@ -163,7 +167,6 @@ void *OSAllocFromHeap(int heap, unsigned long size)
return NULL; return NULL;
} }
ASSERTMSG1(0x168, !((s32)cell & 0x1F), "OSAllocFromHeap(): heap is broken."); ASSERTMSG1(0x168, !((s32)cell & 0x1F), "OSAllocFromHeap(): heap is broken.");
ASSERTMSG1(0x169, cell->hd == NULL, "OSAllocFromHeap(): heap is broken.");
leftoverSize = cell->size - size; leftoverSize = cell->size - size;
if (leftoverSize < 0x40U) { if (leftoverSize < 0x40U) {
@ -201,12 +204,12 @@ void *OSAllocFixed(void **rstart, void **rend)
void *end; void *end;
void *cellEnd; void *cellEnd;
start = (void *)((*(u32 *)rstart) & ~((32) - 1)); start = (void *)((*(uintptr_t *)rstart) & ~((32) - 1));
end = (void *)((*(u32 *)rend + 0x1FU) & ~((32) - 1)); end = (void *)((*(uintptr_t *)rend + 0x1FU) & ~((32) - 1));
ASSERTMSG1(0x1B0, HeapArray, "OSAllocFixed(): heap is not initialized."); ASSERTMSG1(0x1B0, HeapArray, "OSAllocFixed(): heap is not initialized.");
ASSERTMSG1(0x1B1, (u32)start < (u32)end, "OSAllocFixed(): invalid range."); ASSERTMSG1(0x1B1, (uintptr_t)start < (uintptr_t)end, "OSAllocFixed(): invalid range.");
ASSERTMSG1(0x1B3, ((u32)ArenaStart <= (u32)start) && ((u32)end <= (u32)ArenaEnd), "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++) { for (i = 0; i < NumHeaps; i++) {
hd = &HeapArray[i]; hd = &HeapArray[i];
@ -243,7 +246,7 @@ void *OSAllocFixed(void **rstart, void **rend)
ASSERTMSG(0x1F3, MINOBJSIZE <= (char *)cellEnd - (char *)end); ASSERTMSG(0x1F3, MINOBJSIZE <= (char *)cellEnd - (char *)end);
newCell = (struct Cell *)end; newCell = (struct Cell *)end;
newCell->size = (s32)((char *)cellEnd - (char *)end); newCell->size = (uintptr_t)((char *)cellEnd - (char *)end);
newCell->next = cell->next; newCell->next = cell->next;
if (newCell->next) { if (newCell->next) {
newCell->next->prev = newCell; newCell->next->prev = newCell;
@ -290,13 +293,16 @@ void *OSAllocFixed(void **rstart, void **rend)
ASSERTMSG(0x225, OFFSET(start, ALIGNMENT) == 0); ASSERTMSG(0x225, OFFSET(start, ALIGNMENT) == 0);
ASSERTMSG(0x226, OFFSET(end, ALIGNMENT) == 0); ASSERTMSG(0x226, OFFSET(end, ALIGNMENT) == 0);
ASSERTMSG(0x227, start < end); ASSERTMSG(0x227, start < end);
*(u32 *)rstart = (u32)start; *(uintptr_t *)rstart = (uintptr_t)start;
*(u32 *)rend = (u32)end; *(uintptr_t *)rend = (uintptr_t)end;
return (void *)*(u32 *)rstart; return (void *)*(uintptr_t *)rstart;
} }
void OSFreeToHeap(int heap, void *ptr) void OSFreeToHeap(int heap, void *ptr)
{ {
#ifdef TARGET_PC
free(ptr);
#else
struct HeapDesc *hd; struct HeapDesc *hd;
struct Cell *cell; struct Cell *cell;
@ -306,10 +312,10 @@ void OSFreeToHeap(int heap, void *ptr)
ASSERTMSG1(0x241, HeapArray[heap].size >= 0, "OSFreeToHeap(): invalid heap handle."); ASSERTMSG1(0x241, HeapArray[heap].size >= 0, "OSFreeToHeap(): invalid heap handle.");
cell = (void *)((u32)ptr - 0x20); cell = (void *)((u32)ptr - 0x20);
hd = &HeapArray[heap]; hd = &HeapArray[heap];
ASSERTMSG1(0x246, cell->hd == hd, "OSFreeToHeap(): invalid pointer.");
ASSERTMSG1(0x247, DLLookup(hd->allocated, cell), "OSFreeToHeap(): invalid pointer."); ASSERTMSG1(0x247, DLLookup(hd->allocated, cell), "OSFreeToHeap(): invalid pointer.");
hd->allocated = DLExtract(hd->allocated, cell); hd->allocated = DLExtract(hd->allocated, cell);
hd->free = DLInsert(hd->free, cell); hd->free = DLInsert(hd->free, cell);
#endif
} }
int OSSetCurrentHeap(int heap) int OSSetCurrentHeap(int heap)
@ -331,8 +337,8 @@ void *OSInitAlloc(void *arenaStart, void *arenaEnd, int maxHeaps)
struct HeapDesc *hd; struct HeapDesc *hd;
ASSERTMSG1(0x283, maxHeaps > 0, "OSInitAlloc(): invalid number of heaps."); ASSERTMSG1(0x283, maxHeaps > 0, "OSInitAlloc(): invalid number of heaps.");
ASSERTMSG1(0x285, (u32)arenaStart < (u32)arenaEnd, "OSInitAlloc(): invalid range."); ASSERTMSG1(0x285, (uintptr_t)arenaStart < (uintptr_t)arenaEnd, "OSInitAlloc(): invalid range.");
ASSERTMSG1(0x288, maxHeaps <= (((u32)arenaEnd - (u32)arenaStart) / 24U), "OSInitAlloc(): too small range."); ASSERTMSG1(0x288, maxHeaps <= (((uintptr_t)arenaEnd - (uintptr_t)arenaStart) / 24U), "OSInitAlloc(): too small range.");
arraySize = maxHeaps * sizeof(struct HeapDesc); arraySize = maxHeaps * sizeof(struct HeapDesc);
HeapArray = arenaStart; HeapArray = arenaStart;
NumHeaps = maxHeaps; NumHeaps = maxHeaps;
@ -343,34 +349,34 @@ void *OSInitAlloc(void *arenaStart, void *arenaEnd, int maxHeaps)
hd->free = hd->allocated = 0; hd->free = hd->allocated = 0;
} }
__OSCurrHeap = -1; __OSCurrHeap = -1;
arenaStart = (void *)((u32)((char *)HeapArray + arraySize)); arenaStart = (void *)((uintptr_t)((char *)HeapArray + arraySize));
arenaStart = (void *)(((u32)arenaStart + 0x1F) & 0xFFFFFFE0); arenaStart = (void *)(((uintptr_t)arenaStart + 0x1F) & ~0x1F);
ArenaStart = arenaStart; ArenaStart = arenaStart;
ArenaEnd = (void *)((u32)arenaEnd & 0xFFFFFFE0); ArenaEnd = (void *)((uintptr_t)arenaEnd & ~0x1F);
ASSERTMSG1(0x2A4, ((u32)ArenaEnd - (u32)ArenaStart) >= 0x40U, "OSInitAlloc(): too small range."); ASSERTMSG1(0x2A4, ((uintptr_t)ArenaEnd - (uintptr_t)ArenaStart) >= 0x40U, "OSInitAlloc(): too small range.");
return arenaStart; return arenaStart;
} }
int OSCreateHeap(void *start, void *end) uintptr_t OSCreateHeap(void *start, void *end)
{ {
int heap; s32 heap;
struct HeapDesc *hd; struct HeapDesc *hd;
struct Cell *cell; struct Cell *cell;
ASSERTMSG1(0x2BD, HeapArray, "OSCreateHeap(): heap is not initialized."); 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)); start = (void *)(((uintptr_t)start + 0x1FU) & ~((32) - 1));
end = (void *)(((u32)end) & ~((32) - 1)); end = (void *)(((uintptr_t)end) & ~((32) - 1));
ASSERTMSG1(0x2C1, (u32)start < (u32)end, "OSCreateHeap(): invalid range."); ASSERTMSG1(0x2C1, (uintptr_t)start < (uintptr_t)end, "OSCreateHeap(): invalid range.");
ASSERTMSG1(0x2C3, (u32)ArenaStart <= (u32)start && (u32)end <= (u32)ArenaEnd, "OSCreateHeap(): invalid range."); ASSERTMSG1(0x2C3, (uintptr_t)ArenaStart <= (uintptr_t)start && (uintptr_t)end <= (uintptr_t)ArenaEnd, "OSCreateHeap(): invalid range.");
ASSERTMSG1(0x2C5, ((u32)end - (u32)start) >= 0x40U, "OSCreateHeap(): too small range."); ASSERTMSG1(0x2C5, ((uintptr_t)end - (uintptr_t)start) >= 0x40U, "OSCreateHeap(): too small range.");
for (heap = 0; heap < NumHeaps; heap++) { for (heap = 0; heap < NumHeaps; heap++) {
hd = &HeapArray[heap]; hd = &HeapArray[heap];
if (hd->size < 0) { if (hd->size < 0) {
hd->size = (u32)end - (u32)start; hd->size = (uintptr_t)end - (uintptr_t)start;
cell = start; cell = start;
cell->prev = 0; cell->prev = 0;
cell->next = 0; cell->next = 0;
@ -481,12 +487,6 @@ unsigned long OSReferentSize(void *ptr)
ASSERTMSG1(0x3BD, InRange(ptr, ArenaStart + HEADERSIZE, ArenaEnd), "OSReferentSize(): invalid pointer."); ASSERTMSG1(0x3BD, InRange(ptr, ArenaStart + HEADERSIZE, ArenaEnd), "OSReferentSize(): invalid pointer.");
ASSERTMSG1(0x3BE, !OFFSET(ptr, 32), "OSReferentSize(): invalid pointer."); ASSERTMSG1(0x3BE, !OFFSET(ptr, 32), "OSReferentSize(): invalid pointer.");
cell = (void *)((u32)ptr - HEADERSIZE); 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); return (long)((u32)cell->size - HEADERSIZE);
} }

View file

@ -3,8 +3,8 @@
#include <dolphin/os.h> #include <dolphin/os.h>
#include <dolphin/sipriv.h> #include <dolphin/sipriv.h>
extern OSTime __OSGetSystemTime(); extern OSTime __OSGetSystemTime();
extern u32 VIGetCurrentLine(void);
typedef struct SIControl { typedef struct SIControl {
s32 chan; s32 chan;

View file

@ -76,7 +76,7 @@ void InitEnvelope(HsfData *arg0) {
nObj = temp_r28->count; nObj = temp_r28->count;
nMesh = temp_r28->base_idx; nMesh = temp_r28->base_idx;
} }
PSMTXIdentity(sp10); MTXIdentity(sp10);
SetMtx(arg0->root, sp10); SetMtx(arg0->root, sp10);
SetRevMtx(); SetRevMtx();
} }
@ -89,19 +89,19 @@ static void SetEnvelopMtx(HsfObject *arg0, HsfObject *arg1, Mtx arg2) {
s32 var_r29; s32 var_r29;
s32 i; s32 i;
PSMTXTrans(spC, arg1->data.curr.pos.x, arg1->data.curr.pos.y, arg1->data.curr.pos.z); MTXTrans(spC, arg1->data.curr.pos.x, arg1->data.curr.pos.y, arg1->data.curr.pos.z);
PSMTXConcat(arg2, spC, sp3C); MTXConcat(arg2, spC, sp3C);
if (arg1->data.curr.rot.z) { if (arg1->data.curr.rot.z) {
PSMTXRotRad(sp6C, 'z', MTXDegToRad(arg1->data.curr.rot.z)); MTXRotRad(sp6C, 'z', MTXDegToRad(arg1->data.curr.rot.z));
PSMTXConcat(sp3C, sp6C, sp3C); MTXConcat(sp3C, sp6C, sp3C);
} }
if (arg1->data.curr.rot.y) { if (arg1->data.curr.rot.y) {
PSMTXRotRad(sp6C, 'y', MTXDegToRad(arg1->data.curr.rot.y)); MTXRotRad(sp6C, 'y', MTXDegToRad(arg1->data.curr.rot.y));
PSMTXConcat(sp3C, sp6C, sp3C); MTXConcat(sp3C, sp6C, sp3C);
} }
if (arg1->data.curr.rot.x) { if (arg1->data.curr.rot.x) {
PSMTXRotRad(sp6C, 'x', MTXDegToRad(arg1->data.curr.rot.x)); MTXRotRad(sp6C, 'x', MTXDegToRad(arg1->data.curr.rot.x));
PSMTXConcat(sp3C, sp6C, sp3C); MTXConcat(sp3C, sp6C, sp3C);
} }
if (arg1->data.curr.scale.x != 1.0f) { if (arg1->data.curr.scale.x != 1.0f) {
sp3C[0][0] *= arg1->data.curr.scale.x; 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; sp3C[2][2] *= arg1->data.curr.scale.z;
} }
var_r29 = arg1 - arg0; var_r29 = arg1 - arg0;
PSMTXCopy(sp3C, MtxTop[nMesh + var_r29]); MTXCopy(sp3C, MtxTop[nMesh + var_r29]);
for (i = 0; i < arg1->data.childrenCount; i++) { for (i = 0; i < arg1->data.childrenCount; i++) {
SetEnvelopMtx(arg0, arg1->data.children[i], sp3C); SetEnvelopMtx(arg0, arg1->data.children[i], sp3C);
} }
@ -136,7 +136,7 @@ void EnvelopeProc(HsfData *arg0) {
nObj = temp_r31->count; nObj = temp_r31->count;
nMesh = temp_r31->base_idx; nMesh = temp_r31->base_idx;
temp_r29 = arg0->root; temp_r29 = arg0->root;
PSMTXIdentity(sp8); MTXIdentity(sp8);
SetEnvelopMtx(arg0->object, temp_r29, sp8); SetEnvelopMtx(arg0->object, temp_r29, sp8);
SetEnvelopMain(arg0); SetEnvelopMain(arg0);
} }
@ -167,7 +167,7 @@ static void SetEnvelopMain(HsfData *arg0) {
var_r31 = arg0->object; var_r31 = arg0->object;
for (Meshno = i = 0; i < arg0->objectCnt; i++, var_r31++) { for (Meshno = i = 0; i < arg0->objectCnt; i++, var_r31++) {
if (var_r31->type == 2) { 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_r30 = var_r31->data.vertex;
temp_r28 = var_r31->data.normal; temp_r28 = var_r31->data.normal;
if (var_r31->data.unk120[0] != 0) { if (var_r31->data.unk120[0] != 0) {
@ -233,37 +233,37 @@ static void SetEnvelop(HsfCenv *arg0) {
temp_r31 = &Vertextop[temp_r21]; temp_r31 = &Vertextop[temp_r21];
temp_r22 = &normenv[temp_r18]; temp_r22 = &normenv[temp_r18];
temp_r26 = &normtop[temp_r18]; temp_r26 = &normtop[temp_r18];
PSMTXConcat(MtxTop[nMesh + var_r27->target], MtxTop[nMesh + nObj + nObj * Meshno + var_r27->target], sp140); MTXConcat(MtxTop[nMesh + var_r27->target], MtxTop[nMesh + nObj + nObj * Meshno + var_r27->target], sp140);
PSMTXConcat(MtxTop[Meshno], sp140, sp1A0); MTXConcat(MtxTop[Meshno], sp140, sp1A0);
Hu3DMtxScaleGet(&sp1A0[0], &sp14); Hu3DMtxScaleGet(&sp1A0[0], &sp14);
if (sp14.x != 1.0f || sp14.y != 1.0f || sp14.z != 1.0f) { 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); MTXScale(spE0, 1.0 / sp14.x, 1.0 / sp14.y, 1.0 / sp14.z);
PSMTXConcat(spE0, sp1A0, sp170); MTXConcat(spE0, sp1A0, sp170);
PSMTXInvXpose(sp170, sp170); MTXInvXpose(sp170, sp170);
} else { } else {
PSMTXInvXpose(sp1A0, sp170); MTXInvXpose(sp1A0, sp170);
} }
if (var_r27->posCnt == 1) { if (var_r27->posCnt == 1) {
PSMTXMultVec(sp1A0, temp_r31, temp_r28); MTXMultVec(sp1A0, temp_r31, temp_r28);
PSMTXMultVec(sp170, temp_r26, temp_r22); MTXMultVec(sp170, temp_r26, temp_r22);
} else if (var_r27->posCnt <= 6) { } else if (var_r27->posCnt <= 6) {
PSMTXMultVecArray(sp1A0, temp_r31, temp_r28, var_r27->posCnt); MTXMultVecArray(sp1A0, temp_r31, temp_r28, var_r27->posCnt);
PSMTXMultVecArray(sp170, temp_r26, temp_r22, var_r27->normalCnt); MTXMultVecArray(sp170, temp_r26, temp_r22, var_r27->normalCnt);
} else { } else {
PSMTXReorder(sp1A0, (ROMtxPtr) sp140); MTXReorder(sp1A0, (ROMtxPtr) sp140);
PSMTXReorder(sp170, (ROMtxPtr) sp110); MTXReorder(sp170, (ROMtxPtr) sp110);
PSMTXROMultVecArray((ROMtxPtr) sp140, temp_r31, temp_r28, var_r27->posCnt); MTXROMultVecArray((ROMtxPtr) sp140, temp_r31, temp_r28, var_r27->posCnt);
PSMTXROMultVecArray((ROMtxPtr) sp110, temp_r26, temp_r22, var_r27->normalCnt); MTXROMultVecArray((ROMtxPtr) sp110, temp_r26, temp_r22, var_r27->normalCnt);
} }
} }
var_r20 = arg0->dualData; var_r20 = arg0->dualData;
for (i = 0; i < arg0->dualCount; i++, var_r20++) { for (i = 0; i < arg0->dualCount; i++, var_r20++) {
spC = var_r20->target1; spC = var_r20->target1;
sp8 = var_r20->target2; sp8 = var_r20->target2;
PSMTXConcat(MtxTop[nMesh + spC], MtxTop[nMesh + nObj + nObj * Meshno + spC], sp140); MTXConcat(MtxTop[nMesh + spC], MtxTop[nMesh + nObj + nObj * Meshno + spC], sp140);
PSMTXConcat(MtxTop[Meshno], sp140, sp1A0); MTXConcat(MtxTop[Meshno], sp140, sp1A0);
PSMTXConcat(MtxTop[nMesh + sp8], MtxTop[nMesh + nObj + nObj * Meshno + sp8], sp140); MTXConcat(MtxTop[nMesh + sp8], MtxTop[nMesh + nObj + nObj * Meshno + sp8], sp140);
PSMTXConcat(MtxTop[Meshno], sp140, (float (*)[4]) &spB0[0]); MTXConcat(MtxTop[Meshno], sp140, (float (*)[4]) &spB0[0]);
var_r30 = var_r20->weight; var_r30 = var_r20->weight;
for (j = 0; j < var_r20->weightCnt; j++, var_r30++) { for (j = 0; j < var_r20->weightCnt; j++, var_r30++) {
temp_r18 = var_r30->normal; 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][2] = sp110[2][2] + sp140[2][2];
var_r29[2][3] = sp110[2][3] + sp140[2][3]; var_r29[2][3] = sp110[2][3] + sp140[2][3];
if (var_r29 == sp50) { if (var_r29 == sp50) {
PSMTXCopy(sp50, sp80); MTXCopy(sp50, sp80);
} }
Hu3DMtxScaleGet(&sp80[0], &sp14); Hu3DMtxScaleGet(&sp80[0], &sp14);
if (sp14.x != 1.0f || sp14.y != 1.0f || sp14.z != 1.0f) { 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); MTXScale(spE0, 1.0 / sp14.x, 1.0 / sp14.y, 1.0 / sp14.z);
PSMTXConcat(spE0, sp80, sp110); MTXConcat(spE0, sp80, sp110);
PSMTXInvXpose(sp110, sp110); MTXInvXpose(sp110, sp110);
} else { } else {
PSMTXInvXpose(sp80, sp110); MTXInvXpose(sp80, sp110);
} }
if (var_r30->posCnt == 1) { if (var_r30->posCnt == 1) {
PSMTXMultVec(sp80, temp_r31, temp_r28); MTXMultVec(sp80, temp_r31, temp_r28);
} else if (var_r30->posCnt <= 6) { } 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 { } else {
PSMTXReorder(sp80, (ROMtxPtr) sp140); MTXReorder(sp80, (ROMtxPtr) sp140);
PSMTXROMultVecArray((ROMtxPtr) sp140, temp_r31, temp_r28, var_r30->posCnt); MTXROMultVecArray((ROMtxPtr) sp140, temp_r31, temp_r28, var_r30->posCnt);
} }
if (var_r30->normalCnt != 0) { if (var_r30->normalCnt != 0) {
if (var_r30->normalCnt == 1) { if (var_r30->normalCnt == 1) {
PSMTXMultVec(sp110, temp_r26, temp_r22); MTXMultVec(sp110, temp_r26, temp_r22);
} else if (var_r30->normalCnt <= 6) { } 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 { } else {
PSMTXReorder(sp110, (ROMtxPtr) sp140); MTXReorder(sp110, (ROMtxPtr) sp140);
PSMTXROMultVecArray((ROMtxPtr) sp140, temp_r26, temp_r22, var_r30->normalCnt); 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; sp20.x = sp20.y = sp20.z = 0.0f;
sp10 = 0; sp10 = 0;
for (j = 0; j < var_r19->weightCnt; j++, var_r25++) { 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); MTXConcat(MtxTop[nMesh + var_r25->target], MtxTop[nMesh + nObj + nObj * Meshno + var_r25->target], sp1A0);
PSMTXConcat(MtxTop[Meshno], sp1A0, sp1A0); MTXConcat(MtxTop[Meshno], sp1A0, sp1A0);
PSMTXInvXpose(sp1A0, sp170); MTXInvXpose(sp1A0, sp170);
PSMTXMultVec(sp1A0, temp_r31, &sp44); MTXMultVec(sp1A0, temp_r31, &sp44);
PSMTXMultVec(sp170, temp_r26, &sp2C); MTXMultVec(sp170, temp_r26, &sp2C);
sp44.x = var_r25->value * (sp44.x - temp_r31->x); sp44.x = var_r25->value * (sp44.x - temp_r31->x);
sp44.y = var_r25->value * (sp44.y - temp_r31->y); sp44.y = var_r25->value * (sp44.y - temp_r31->y);
sp44.z = var_r25->value * (sp44.z - temp_r31->z); 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.y = temp_r3->transform.scale.y;
arg0->data.base.scale.z = temp_r3->transform.scale.z; 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); MTXTrans(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); MTXScale(spCC, arg0->data.base.scale.x, arg0->data.base.scale.y, arg0->data.base.scale.z);
PSMTXConcat(arg1, spFC, spFC); MTXConcat(arg1, spFC, spFC);
PSMTXRotRad(sp9C, 'z', MTXDegToRad(arg0->data.base.rot.z)); MTXRotRad(sp9C, 'z', MTXDegToRad(arg0->data.base.rot.z));
PSMTXConcat(spFC, sp9C, spFC); MTXConcat(spFC, sp9C, spFC);
PSMTXRotRad(sp9C, 'y', MTXDegToRad(arg0->data.base.rot.y)); MTXRotRad(sp9C, 'y', MTXDegToRad(arg0->data.base.rot.y));
PSMTXConcat(spFC, sp9C, spFC); MTXConcat(spFC, sp9C, spFC);
PSMTXRotRad(sp9C, 'x', MTXDegToRad(arg0->data.base.rot.x)); MTXRotRad(sp9C, 'x', MTXDegToRad(arg0->data.base.rot.x));
PSMTXConcat(spFC, sp9C, spFC); MTXConcat(spFC, sp9C, spFC);
PSMTXConcat(spFC, spCC, spFC); MTXConcat(spFC, spCC, spFC);
temp_r25 = arg0 - objtop; temp_r25 = arg0 - objtop;
PSMTXCopy(spFC, MtxTop[nMesh + temp_r25]); MTXCopy(spFC, MtxTop[nMesh + temp_r25]);
for (i = 0; i < arg0->data.childrenCount; i++) { for (i = 0; i < arg0->data.childrenCount; i++) {
SetMtx(arg0->data.children[i], spFC); SetMtx(arg0->data.children[i], spFC);
} }
@ -438,12 +438,12 @@ static void SetRevMtx(void) {
var_r29 = CurHsf->object; var_r29 = CurHsf->object;
for (var_r28 = i = 0; i < CurHsf->objectCnt; i++, var_r29++) { for (var_r28 = i = 0; i < CurHsf->objectCnt; i++, var_r29++) {
if (var_r29->type == 2) { 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++) { for (var_r30 = 0; var_r30 < CurHsf->objectCnt; var_r30++) {
PSMTXInverse(MtxTop[nMesh + var_r30], sp38); MTXInverse(MtxTop[nMesh + var_r30], sp38);
PSMTXConcat(sp38, sp8, MtxTop[nMesh + nObj + nObj * var_r28 + var_r30]); MTXConcat(sp38, sp8, MtxTop[nMesh + nObj + nObj * var_r28 + var_r30]);
} }
PSMTXInverse(MtxTop[nMesh + i], sp8); MTXInverse(MtxTop[nMesh + i], sp8);
var_r28++; var_r28++;
} }
} }

View file

@ -106,4 +106,9 @@ void THPGXYuv2RgbDraw(u32 *yImage, u32 *uImage, u32 *vImage, s16 x, s16 y, s16 t
GXPosition3s16(x, y + polyHeight, 0); GXPosition3s16(x, y + polyHeight, 0);
GXTexCoord2s16(0, 1); GXTexCoord2s16(0, 1);
GXEnd(); GXEnd();
#ifdef TARGET_PC
GXDestroyTexObj(&sp54);
GXDestroyTexObj(&sp34);
GXDestroyTexObj(&sp14);
#endif
} }

View file

@ -478,7 +478,7 @@ static void UpdateExplode(omObjData *arg0) {
break; break;
case 2: case 2:
BoardCameraRotGet(&sp8); BoardCameraRotGet(&sp8);
PSMTXRotRad(sp20, 'x', MTXDegToRad(sp8.x + 10.0f)); MTXRotRad(sp20, 'x', MTXDegToRad(sp8.x + 10.0f));
BoardModelMtxSet(temp_r30->unk02, &sp20); BoardModelMtxSet(temp_r30->unk02, &sp20);
BoardModelRotSet(temp_r30->unk02, 0.0f, 0.0f, 0.0f); BoardModelRotSet(temp_r30->unk02, 0.0f, 0.0f, 0.0f);
sp14.x = arg0->scale.x; sp14.x = arg0->scale.x;

View file

@ -1035,7 +1035,7 @@ static void ExecItemSwap(void)
} }
BoardModelRotGet(suitMdl, &sp3C); BoardModelRotGet(suitMdl, &sp3C);
Hu3DCameraSet(0, sp108); Hu3DCameraSet(0, sp108);
PSMTXInverse(sp108, spD8); MTXInverse(sp108, spD8);
Hu3DMtxRotGet(spD8, &sp48); Hu3DMtxRotGet(spD8, &sp48);
sp3C.x = sp48.x; sp3C.x = sp48.x;
for (var_r31 = 0; var_r31 < var_r28 / 2; var_r31++) { for (var_r31 = 0; var_r31 < var_r28 / 2; var_r31++) {

File diff suppressed because it is too large Load diff

View file

@ -1,5 +1,11 @@
#include "game/board/pause.h" #include "game/board/pause.h"
#include "game/audio.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/data.h"
#include "game/flag.h" #include "game/flag.h"
#include "game/gamework_data.h" #include "game/gamework_data.h"
@ -11,12 +17,6 @@
#include "game/sprite.h" #include "game/sprite.h"
#include "game/window.h" #include "game/window.h"
#include "game/wipe.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 { typedef struct {
struct { struct {
@ -39,7 +39,6 @@ typedef struct {
u32 unk0C; u32 unk0C;
} ConfigWork; } ConfigWork;
static void PauseExit(void); static void PauseExit(void);
static void PauseProcess(void); static void PauseProcess(void);
static void CreatePauseScreen(void); static void CreatePauseScreen(void);
@ -91,56 +90,25 @@ static s16 controlWin = -1;
static s16 quitWin = -1; static s16 quitWin = -1;
static s16 settingsWin = -1; static s16 settingsWin = -1;
static s16 boxModelID[8] = { static s16 boxModelID[8] = { -1, -1, -1, -1, -1, -1, -1, -1 };
-1, -1, -1, -1, -1, -1, -1, -1
};
static float boxPosTbl[8][2] = { 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 },
{ 120.0f, 120.0f }, { 232.0f, 232.0f }, { 344.0f, 232.0f }, { 456.0f, 232.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] = { static float padConfigPosTbl[4][2] = { { 170.0f, 160.0f }, { 266.0f, 160.0f }, { 362.0f, 160.0f }, { 458.0f, 160.0f } };
{ 170.0f, 160.0f },
{ 266.0f, 160.0f },
{ 362.0f, 160.0f },
{ 458.0f, 160.0f }
};
static s32 boardLogoTbl[] = { 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, 87), 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, 88), DATA_MAKE_NUM(DATADIR_BOARD, 93), DATA_MAKE_NUM(DATADIR_BOARD, 94) };
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[] = { static float turnDigitPosTbl[] = { 145.0f, 188.0f, 285.0f, 328.0f };
145.0f, 188.0f, 285.0f, 328.0f
};
static s32 boxMdlTbl[] = { 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, 8), 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, 9), DATA_MAKE_NUM(DATADIR_BPAUSE, 15) };
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); mainProcess = HuPrcChildCreate(PauseProcess, 0x2001, 0x3800, 0, boardMainProc);
hostMdl = BoardStarHostMdlGet(); hostMdl = BoardStarHostMdlGet();
BoardModelMotionStart(hostMdl, 1, 0x40000001); BoardModelMotionStart(hostMdl, 1, 0x40000001);
@ -151,7 +119,8 @@ void BoardPauseStart(void) {
HuPrcDestructorSet2(mainProcess, PauseExit); HuPrcDestructorSet2(mainProcess, PauseExit);
} }
static void PauseExit(void) { static void PauseExit(void)
{
if (pauseQuitF == 0) { if (pauseQuitF == 0) {
BoardRollWinDispSet(1); BoardRollWinDispSet(1);
BoardRollDispSet(1); BoardRollDispSet(1);
@ -160,7 +129,8 @@ static void PauseExit(void) {
BoardLast5GfxShowSet(1); BoardLast5GfxShowSet(1);
HuAudFXPauseAll(0); HuAudFXPauseAll(0);
HuAudSeqPauseAll(0); HuAudSeqPauseAll(0);
} else { }
else {
BoardConfettiKill(); BoardConfettiKill();
BoardAudSeqFadeOutAll(); BoardAudSeqFadeOutAll();
HuAudAllStop(); HuAudAllStop();
@ -173,7 +143,8 @@ static void PauseExit(void) {
omSysPauseCtrl(0); omSysPauseCtrl(0);
if (GWMGExplainGet()) { if (GWMGExplainGet()) {
_SetFlag(FLAG_ID_MAKE(0, 11)); _SetFlag(FLAG_ID_MAKE(0, 11));
} else { }
else {
_ClearFlag(FLAG_ID_MAKE(0, 11)); _ClearFlag(FLAG_ID_MAKE(0, 11));
} }
if (GWPartyGet() == 0) { if (GWPartyGet() == 0) {
@ -182,7 +153,8 @@ static void PauseExit(void) {
GWGameStat.story_pause.mg_list = GWMGListGet(); GWGameStat.story_pause.mg_list = GWMGListGet();
GWGameStat.story_pause.mess_speed = GWMessSpeedGet(); GWGameStat.story_pause.mess_speed = GWMessSpeedGet();
GWGameStat.story_pause.save_mode = GWSaveModeGet(); GWGameStat.story_pause.save_mode = GWSaveModeGet();
} else { }
else {
GWGameStat.party_pause.explain_mg = GWMGExplainGet(); GWGameStat.party_pause.explain_mg = GWMGExplainGet();
GWGameStat.party_pause.show_com_mg = GWMGShowComGet(); GWGameStat.party_pause.show_com_mg = GWMGShowComGet();
GWGameStat.party_pause.mg_list = GWMGListGet(); GWGameStat.party_pause.mg_list = GWMGListGet();
@ -192,7 +164,8 @@ static void PauseExit(void) {
mainProcess = NULL; mainProcess = NULL;
} }
static void PauseProcess(void) { static void PauseProcess(void)
{
s32 temp_r31; s32 temp_r31;
pauseQuitF = 0; pauseQuitF = 0;
@ -222,14 +195,16 @@ static void PauseProcess(void) {
HuPrcSleep(20); HuPrcSleep(20);
WipeColorSet(0, 0, 0); WipeColorSet(0, 0, 0);
BoardKill(); BoardKill();
} else { }
else {
BoardFilterFadeOut(30); BoardFilterFadeOut(30);
HuPrcSleep(30); HuPrcSleep(30);
} }
HuPrcEnd(); HuPrcEnd();
} }
void CreatePauseScreen(void) { void CreatePauseScreen(void)
{
Mtx sp30; Mtx sp30;
Vec sp24; Vec sp24;
Vec sp18; Vec sp18;
@ -294,10 +269,12 @@ void CreatePauseScreen(void) {
if (GWPartyGet() == 1) { if (GWPartyGet() == 1) {
if (GWTeamGet()) { if (GWTeamGet()) {
HuSprBankSet(pauseSprGrp, 2, 2); HuSprBankSet(pauseSprGrp, 2, 2);
} else { }
else {
HuSprBankSet(pauseSprGrp, 2, 0); HuSprBankSet(pauseSprGrp, 2, 0);
} }
} else { }
else {
HuSprBankSet(pauseSprGrp, 2, 1); HuSprBankSet(pauseSprGrp, 2, 1);
} }
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
@ -334,7 +311,8 @@ void CreatePauseScreen(void) {
sp24.x = 68.0f; sp24.x = 68.0f;
if (GWBoardGet() == 3) { if (GWBoardGet() == 3) {
sp24.y = 464.0f; sp24.y = 464.0f;
} else { }
else {
sp24.y = 434.0f; sp24.y = 434.0f;
} }
sp24.z = 1100.0f; sp24.z = 1100.0f;
@ -436,7 +414,8 @@ void CreatePauseScreen(void) {
SetBoxVisible(0); SetBoxVisible(0);
} }
static void DeletePauseScreen(void) { static void DeletePauseScreen(void)
{
ConfigWork *temp_r30; ConfigWork *temp_r30;
Mtx sp8; Mtx sp8;
s32 i; s32 i;
@ -461,7 +440,7 @@ static void DeletePauseScreen(void) {
HuSprGrpKill(pauseCursorPos); HuSprGrpKill(pauseCursorPos);
pauseCursorPos = -1; pauseCursorPos = -1;
} }
PSMTXIdentity(sp8); MTXIdentity(sp8);
BoardModelLayerSet(hostMdl, hostOldLayer); BoardModelLayerSet(hostMdl, hostOldLayer);
BoardModelVisibilitySet(hostMdl, 1); BoardModelVisibilitySet(hostMdl, 1);
BoardModelMtxSet(hostMdl, &sp8); BoardModelMtxSet(hostMdl, &sp8);
@ -471,7 +450,8 @@ static void DeletePauseScreen(void) {
} }
} }
static void SetBoxVisible(s32 arg0) { static void SetBoxVisible(s32 arg0)
{
s32 i; s32 i;
for (i = 0; i < 8; 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; ConfigWork *temp_r31;
s16 temp_r28; s16 temp_r28;
s32 var_r29; s32 var_r29;
@ -578,7 +559,8 @@ static void PauseConfigObjFunc(omObjData *arg0) {
InitPauseQuit(arg0, temp_r31); InitPauseQuit(arg0, temp_r31);
break; break;
} }
} else { }
else {
cursorPos = ExecPauseConfig(arg0, temp_r31); cursorPos = ExecPauseConfig(arg0, temp_r31);
if (temp_r28 != cursorPos) { if (temp_r28 != cursorPos) {
arg0->trans.x = -40.0f + boxPosTbl[cursorPos][0]; 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 var_r28;
s32 j; s32 j;
s32 i; s32 i;
@ -603,7 +586,8 @@ static void UpdatePauseText(s32 arg0) {
if (i == GWPlayer[j].port) { if (i == GWPlayer[j].port) {
if (GWPlayer[j].com) { if (GWPlayer[j].com) {
var_r28 = MAKE_MESSID(16, 30); var_r28 = MAKE_MESSID(16, 30);
} else { }
else {
var_r28 = MAKE_MESSID(16, 29); var_r28 = MAKE_MESSID(16, 29);
} }
HuWinInsertMesSet(settingsWin, var_r28, i); HuWinInsertMesSet(settingsWin, var_r28, i);
@ -615,14 +599,16 @@ static void UpdatePauseText(s32 arg0) {
case 1: case 1:
if (boxState[arg0] != 0) { if (boxState[arg0] != 0) {
HuWinMesSet(settingsWin, MAKE_MESSID(16, 33)); HuWinMesSet(settingsWin, MAKE_MESSID(16, 33));
} else { }
else {
HuWinMesSet(settingsWin, MAKE_MESSID(16, 34)); HuWinMesSet(settingsWin, MAKE_MESSID(16, 34));
} }
break; break;
case 2: case 2:
if (boxState[arg0] != 0) { if (boxState[arg0] != 0) {
HuWinMesSet(settingsWin, MAKE_MESSID(16, 35)); HuWinMesSet(settingsWin, MAKE_MESSID(16, 35));
} else { }
else {
HuWinMesSet(settingsWin, MAKE_MESSID(16, 36)); HuWinMesSet(settingsWin, MAKE_MESSID(16, 36));
} }
break; break;
@ -642,7 +628,8 @@ static void UpdatePauseText(s32 arg0) {
case 4: case 4:
if (boxState[arg0] != 0) { if (boxState[arg0] != 0) {
HuWinMesSet(settingsWin, MAKE_MESSID(16, 40)); HuWinMesSet(settingsWin, MAKE_MESSID(16, 40));
} else { }
else {
HuWinMesSet(settingsWin, MAKE_MESSID(16, 41)); HuWinMesSet(settingsWin, MAKE_MESSID(16, 41));
} }
break; 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; float var_f31;
switch (arg1->unk01) { switch (arg1->unk01) {
@ -696,7 +684,8 @@ static void InitPauseQuit(omObjData *arg0, ConfigWork *arg1) {
if (quitWin != -1 && HuWinStatGet(quitWin) == 3) { if (quitWin != -1 && HuWinStatGet(quitWin) == 3) {
if (HuWinChoiceNowGet(quitWin) != 0) { if (HuWinChoiceNowGet(quitWin) != 0) {
HuWinMesSet(settingsWin, MAKE_MESSID(16, 51)); HuWinMesSet(settingsWin, MAKE_MESSID(16, 51));
} else { }
else {
HuWinMesSet(settingsWin, MAKE_MESSID(16, 50)); 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; WindowData *temp_r31;
float sp10[2]; float sp10[2];
float sp8[2]; float sp8[2];
@ -748,7 +738,8 @@ static void PauseQuitProcess(void) {
HuPrcEnd(); HuPrcEnd();
} }
static void DeletePauseQuit(void) { static void DeletePauseQuit(void)
{
if (quitWin != -1) { if (quitWin != -1) {
HuWinExCleanup(quitWin); HuWinExCleanup(quitWin);
quitWin = -1; quitWin = -1;
@ -757,7 +748,8 @@ static void DeletePauseQuit(void) {
quitProcess = NULL; quitProcess = NULL;
} }
static s32 UpdatePadConfig(omObjData *arg0, ConfigWork *arg1) { static s32 UpdatePadConfig(omObjData *arg0, ConfigWork *arg1)
{
switch (arg1->unk01) { switch (arg1->unk01) {
case 0: case 0:
CreatePadConfig(arg0, arg1); CreatePadConfig(arg0, arg1);
@ -777,12 +769,14 @@ static s32 UpdatePadConfig(omObjData *arg0, ConfigWork *arg1) {
} }
if (arg1->unk00_field1 != 0) { if (arg1->unk00_field1 != 0) {
return 0; return 0;
} else { }
else {
return 1; return 1;
} }
} }
static void CreatePadConfig(omObjData *arg0, ConfigWork *arg1) { static void CreatePadConfig(omObjData *arg0, ConfigWork *arg1)
{
Vec sp14; Vec sp14;
Vec sp8; Vec sp8;
s32 i; s32 i;
@ -817,7 +811,8 @@ static void CreatePadConfig(omObjData *arg0, ConfigWork *arg1) {
arg1->unk01 = 1; arg1->unk01 = 1;
} }
static void ScrollInPadConfig(omObjData *arg0, ConfigWork *arg1) { static void ScrollInPadConfig(omObjData *arg0, ConfigWork *arg1)
{
Vec sp8; Vec sp8;
s32 i; s32 i;
@ -834,7 +829,8 @@ static void ScrollInPadConfig(omObjData *arg0, ConfigWork *arg1) {
arg1->unk04 = 0; arg1->unk04 = 0;
arg1->unk05 = 0; arg1->unk05 = 0;
arg1->unk01 = 0; arg1->unk01 = 0;
} else { }
else {
arg1->unk01 = 2; arg1->unk01 = 2;
} }
return; return;
@ -848,7 +844,8 @@ static void ScrollInPadConfig(omObjData *arg0, ConfigWork *arg1) {
arg1->unk07--; arg1->unk07--;
} }
static void CursorMovePadConfig(omObjData *arg0, ConfigWork *arg1) { static void CursorMovePadConfig(omObjData *arg0, ConfigWork *arg1)
{
float sp8[4]; float sp8[4];
s32 temp_r29; s32 temp_r29;
u32 temp_r30; u32 temp_r30;
@ -861,16 +858,19 @@ static void CursorMovePadConfig(omObjData *arg0, ConfigWork *arg1) {
if (GWPlayer[temp_r29].com) { if (GWPlayer[temp_r29].com) {
arg1->unk00_field3 = GWPlayer[temp_r29].diff + 1; arg1->unk00_field3 = GWPlayer[temp_r29].diff + 1;
arg1->unk05 = GWPlayer[temp_r29].diff + 1; arg1->unk05 = GWPlayer[temp_r29].diff + 1;
} else { }
else {
arg1->unk00_field3 = 0; arg1->unk00_field3 = 0;
arg1->unk05 = 0; arg1->unk05 = 0;
} }
HuSprBankSet(padConfigSprGrp, arg1->unk04 + 8, 1); HuSprBankSet(padConfigSprGrp, arg1->unk04 + 8, 1);
HuAudFXPlay(2); HuAudFXPlay(2);
} else if (temp_r30 == 0x200) { }
else if (temp_r30 == 0x200) {
HuAudFXPlay(3); HuAudFXPlay(3);
arg1->unk01 = 4; arg1->unk01 = 4;
} else { }
else {
if (temp_r30 == 1) { if (temp_r30 == 1) {
arg1->unk04--; arg1->unk04--;
} }
@ -879,9 +879,11 @@ static void CursorMovePadConfig(omObjData *arg0, ConfigWork *arg1) {
} }
if (arg1->unk04 < 0) { if (arg1->unk04 < 0) {
arg1->unk04 = 0; arg1->unk04 = 0;
} else if (arg1->unk04 >= 4) { }
else if (arg1->unk04 >= 4) {
arg1->unk04 = 3; arg1->unk04 = 3;
} else if (temp_r30 == 1 || temp_r30 == 2) { }
else if (temp_r30 == 1 || temp_r30 == 2) {
HuAudFXPlay(0); HuAudFXPlay(0);
arg1->unk06 = 4; 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 temp_r29;
s32 var_r28; s32 var_r28;
s32 var_r26; s32 var_r26;
@ -901,13 +904,15 @@ static void ChangeDiffPadConfig(omObjData *arg0, ConfigWork *arg1) {
var_r30 = 0; var_r30 = 0;
if (HuPadStkX[pausePad] < -20) { if (HuPadStkX[pausePad] < -20) {
var_r30 |= 1; var_r30 |= 1;
} else if (HuPadStkX[pausePad] > 20) { }
else if (HuPadStkX[pausePad] > 20) {
var_r30 |= 2; var_r30 |= 2;
} }
temp_r29 = CheckPort(arg1->unk04); temp_r29 = CheckPort(arg1->unk04);
if (GWGameStat.veryHardUnlock != 0) { if (GWGameStat.veryHardUnlock != 0) {
var_r27 = 4; var_r27 = 4;
} else { }
else {
var_r27 = 3; var_r27 = 3;
} }
HuWinMesSet(settingsWin, MAKE_MESSID(16, 32)); HuWinMesSet(settingsWin, MAKE_MESSID(16, 32));
@ -916,13 +921,15 @@ static void ChangeDiffPadConfig(omObjData *arg0, ConfigWork *arg1) {
if (arg1->unk09++ < 10) { if (arg1->unk09++ < 10) {
return; return;
} }
} else { }
else {
if (arg1->unk09++ < 2) { if (arg1->unk09++ < 2) {
return; return;
} }
arg1->unk0C = var_r30; arg1->unk0C = var_r30;
} }
} else { }
else {
arg1->unk0C = 0; arg1->unk0C = 0;
} }
arg1->unk09 = 0; arg1->unk09 = 0;
@ -936,7 +943,8 @@ static void ChangeDiffPadConfig(omObjData *arg0, ConfigWork *arg1) {
if (var_r28 != 0) { if (var_r28 != 0) {
HuAudFXPlay(0); HuAudFXPlay(0);
arg1->unk06 = 4; arg1->unk06 = 4;
} else { }
else {
if (HuPadBtnDown[pausePad] == 0x100) { if (HuPadBtnDown[pausePad] == 0x100) {
arg1->unk01 = 2; arg1->unk01 = 2;
if (arg1->unk05 != 0) { if (arg1->unk05 != 0) {
@ -944,7 +952,8 @@ static void ChangeDiffPadConfig(omObjData *arg0, ConfigWork *arg1) {
GWPlayerCfg[temp_r29].iscom = 1; GWPlayerCfg[temp_r29].iscom = 1;
GWPlayer[temp_r29].diff = arg1->unk05 - 1; GWPlayer[temp_r29].diff = arg1->unk05 - 1;
GWPlayerCfg[temp_r29].diff = arg1->unk05 - 1; GWPlayerCfg[temp_r29].diff = arg1->unk05 - 1;
} else { }
else {
GWPlayer[temp_r29].com = 0; GWPlayer[temp_r29].com = 0;
GWPlayerCfg[temp_r29].iscom = 0; GWPlayerCfg[temp_r29].iscom = 0;
} }
@ -967,18 +976,21 @@ static void ChangeDiffPadConfig(omObjData *arg0, ConfigWork *arg1) {
} }
if (arg1->unk05 > var_r27) { if (arg1->unk05 > var_r27) {
arg1->unk05 = 0; arg1->unk05 = 0;
} else if (arg1->unk05 < 0) { }
else if (arg1->unk05 < 0) {
arg1->unk05 = var_r27; arg1->unk05 = var_r27;
} }
if (arg1->unk05 != 0) { if (arg1->unk05 != 0) {
var_r26 = arg1->unk05 + 3; var_r26 = arg1->unk05 + 3;
} else { }
else {
var_r26 = arg1->unk04; var_r26 = arg1->unk04;
} }
HuSprBankSet(padConfigSprGrp, arg1->unk04 + 4, var_r26); HuSprBankSet(padConfigSprGrp, arg1->unk04 + 4, var_r26);
} }
static void ScrollOutPadConfig(omObjData *arg0, ConfigWork *arg1) { static void ScrollOutPadConfig(omObjData *arg0, ConfigWork *arg1)
{
Vec sp14; Vec sp14;
Vec sp8; Vec sp8;
@ -1003,7 +1015,8 @@ static void ScrollOutPadConfig(omObjData *arg0, ConfigWork *arg1) {
arg1->unk00_field2 = 1; 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_f31;
float var_f30; float var_f30;
float var_f29; float var_f29;
@ -1031,21 +1044,26 @@ static s32 UpdatePauseBox(omObjData *arg0, ConfigWork *arg1, s32 arg2) {
} }
if (arg1->unk04 < 0) { if (arg1->unk04 < 0) {
arg1->unk04 = 0; arg1->unk04 = 0;
} else if (arg1->unk04 > 1) { }
else if (arg1->unk04 > 1) {
arg1->unk04 = 1; arg1->unk04 = 1;
} else if (temp_r28 == 1 || temp_r28 == 2) { }
else if (temp_r28 == 1 || temp_r28 == 2) {
HuAudFXPlay(0); HuAudFXPlay(0);
} }
if (temp_r28 == 0x100) { if (temp_r28 == 0x100) {
arg1->unk01 = 3; arg1->unk01 = 3;
HuAudFXPlay(2); HuAudFXPlay(2);
} else if (temp_r28 == 0x200) { }
else if (temp_r28 == 0x200) {
arg1->unk01 = 4; arg1->unk01 = 4;
HuAudFXPlay(3); HuAudFXPlay(3);
} else if (temp_r27 != arg1->unk04) { }
else if (temp_r27 != arg1->unk04) {
if (arg1->unk04 != 0) { if (arg1->unk04 != 0) {
var_f30 = 0.0f; var_f30 = 0.0f;
} else { }
else {
var_f30 = -90.0f; var_f30 = -90.0f;
} }
var_f29 = arg0->rot.x; var_f29 = arg0->rot.x;
@ -1058,7 +1076,8 @@ static s32 UpdatePauseBox(omObjData *arg0, ConfigWork *arg1, s32 arg2) {
if (arg1->unk07 != 0) { if (arg1->unk07 != 0) {
arg0->rot.x += arg0->rot.y; arg0->rot.x += arg0->rot.y;
arg1->unk07--; arg1->unk07--;
} else { }
else {
arg1->unk01 = 1; arg1->unk01 = 1;
} }
break; break;
@ -1091,7 +1110,8 @@ static s32 UpdatePauseBox(omObjData *arg0, ConfigWork *arg1, s32 arg2) {
return 0; 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_f31;
float var_f30; float var_f30;
float var_f29; float var_f29;
@ -1102,7 +1122,8 @@ static s32 UpdatePauseBoxExt(omObjData *arg0, ConfigWork *arg1, s32 arg2) {
if (arg2 == 3 && GWGameStat.customPackEnable == 0) { if (arg2 == 3 && GWGameStat.customPackEnable == 0) {
var_r27 = 1; var_r27 = 1;
} else { }
else {
var_r27 = 2; var_r27 = 2;
} }
switch (arg1->unk01) { switch (arg1->unk01) {
@ -1125,18 +1146,22 @@ static s32 UpdatePauseBoxExt(omObjData *arg0, ConfigWork *arg1, s32 arg2) {
} }
if (arg1->unk04 < 0) { if (arg1->unk04 < 0) {
arg1->unk04 = 0; arg1->unk04 = 0;
} else if (arg1->unk04 > var_r27) { }
else if (arg1->unk04 > var_r27) {
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); HuAudFXPlay(0);
} }
if (temp_r28 == 0x100) { if (temp_r28 == 0x100) {
arg1->unk01 = 3; arg1->unk01 = 3;
HuAudFXPlay(2); HuAudFXPlay(2);
} else if (temp_r28 == 0x200) { }
else if (temp_r28 == 0x200) {
arg1->unk01 = 4; arg1->unk01 = 4;
HuAudFXPlay(3); HuAudFXPlay(3);
} else if (temp_r26 != arg1->unk04) { }
else if (temp_r26 != arg1->unk04) {
switch (arg1->unk04) { switch (arg1->unk04) {
case 0: case 0:
var_f30 = 90.0f; var_f30 = 90.0f;
@ -1158,7 +1183,8 @@ static s32 UpdatePauseBoxExt(omObjData *arg0, ConfigWork *arg1, s32 arg2) {
if (arg1->unk07 != 0) { if (arg1->unk07 != 0) {
arg0->rot.x += arg0->rot.y; arg0->rot.x += arg0->rot.y;
arg1->unk07--; arg1->unk07--;
} else { }
else {
arg1->unk01 = 1; arg1->unk01 = 1;
} }
break; break;
@ -1191,7 +1217,8 @@ static s32 UpdatePauseBoxExt(omObjData *arg0, ConfigWork *arg1, s32 arg2) {
return 0; return 0;
} }
static s32 ExecPauseConfig(omObjData *arg0, ConfigWork *arg1) { static s32 ExecPauseConfig(omObjData *arg0, ConfigWork *arg1)
{
s32 var_r27; s32 var_r27;
s32 var_r26; s32 var_r26;
s32 var_r29; s32 var_r29;
@ -1218,17 +1245,21 @@ static s32 ExecPauseConfig(omObjData *arg0, ConfigWork *arg1) {
arg1->unk03 += var_r28; arg1->unk03 += var_r28;
if (arg1->unk03 < 0) { if (arg1->unk03 < 0) {
arg1->unk03 = 0; arg1->unk03 = 0;
} else if (arg1->unk03 >= 2) { }
else if (arg1->unk03 >= 2) {
arg1->unk03 = 1; arg1->unk03 = 1;
} else if (var_r28 != 0) { }
else if (var_r28 != 0) {
HuAudFXPlay(0); HuAudFXPlay(0);
arg1->unk06 = 4; arg1->unk06 = 4;
} }
if (arg1->unk02 < 0) { if (arg1->unk02 < 0) {
arg1->unk02 = 0; arg1->unk02 = 0;
} else if (arg1->unk02 >= 4) { }
else if (arg1->unk02 >= 4) {
arg1->unk02 = 3; arg1->unk02 = 3;
} else if (var_r29 != 0) { }
else if (var_r29 != 0) {
HuAudFXPlay(0); HuAudFXPlay(0);
arg1->unk06 = 4; arg1->unk06 = 4;
} }
@ -1251,7 +1282,8 @@ static s32 ExecPauseConfig(omObjData *arg0, ConfigWork *arg1) {
} }
if (var_r26 != 0) { if (var_r26 != 0) {
HuAudFXPlay(4); HuAudFXPlay(4);
} else if (var_r27 != 0) { }
else if (var_r27 != 0) {
HuAudFXPlay(2); HuAudFXPlay(2);
arg1->unk00_field1 = 1; arg1->unk00_field1 = 1;
} }
@ -1263,7 +1295,8 @@ static s32 ExecPauseConfig(omObjData *arg0, ConfigWork *arg1) {
return arg1->unk02 + arg1->unk03 * 4; return arg1->unk02 + arg1->unk03 * 4;
} }
static void CreatePauseControlWin(void) { static void CreatePauseControlWin(void)
{
float sp8[2]; float sp8[2];
float var_f31; float var_f31;
float var_f30; float var_f30;
@ -1280,7 +1313,8 @@ static void CreatePauseControlWin(void) {
HuWinDispOff(settingsControlWin); HuWinDispOff(settingsControlWin);
if (GWBoardGet() == 7 || GWBoardGet() == 8) { if (GWBoardGet() == 7 || GWBoardGet() == 8) {
var_r31 = MAKE_MESSID(16, 73); var_r31 = MAKE_MESSID(16, 73);
} else { }
else {
var_r31 = MAKE_MESSID(16, 52); var_r31 = MAKE_MESSID(16, 52);
} }
HuWinMesMaxSizeGet(1, sp8, var_r31); HuWinMesMaxSizeGet(1, sp8, var_r31);
@ -1304,7 +1338,8 @@ static void CreatePauseControlWin(void) {
sp8[1] = 128.0f; sp8[1] = 128.0f;
} }
static void DeletePauseControlWin(void) { static void DeletePauseControlWin(void)
{
if (settingsControlWin != -1) { if (settingsControlWin != -1) {
HuWinKill(settingsControlWin); HuWinKill(settingsControlWin);
settingsControlWin = -1; settingsControlWin = -1;
@ -1319,7 +1354,8 @@ static void DeletePauseControlWin(void) {
} }
} }
static s32 WaitPauseInput(void) { static s32 WaitPauseInput(void)
{
s32 var_r28; s32 var_r28;
s32 var_r31; s32 var_r31;
u32 temp_r30; u32 temp_r30;
@ -1327,7 +1363,8 @@ static s32 WaitPauseInput(void) {
mainScreenF = 1; mainScreenF = 1;
if (GWBoardGet() == 7 || GWBoardGet() == 8) { if (GWBoardGet() == 7 || GWBoardGet() == 8) {
var_r28 = 1; var_r28 = 1;
} else { }
else {
var_r28 = 0; var_r28 = 0;
} }
HuWinDispOn(controlWin); HuWinDispOn(controlWin);
@ -1344,13 +1381,15 @@ static s32 WaitPauseInput(void) {
var_r31 = 0; var_r31 = 0;
HuAudFXPlay(0x1C); HuAudFXPlay(0x1C);
break; break;
} else if (var_r28 == 0) { }
else if (var_r28 == 0) {
if (temp_r30 == 0x100) { if (temp_r30 == 0x100) {
var_r31 = 1; var_r31 = 1;
HuAudFXPlay(1); HuAudFXPlay(1);
break; break;
} }
} else if (temp_r30 == 0x10) { }
else if (temp_r30 == 0x10) {
pauseQuitF = 1; pauseQuitF = 1;
var_r31 = 2; var_r31 = 2;
mgQuitExtraF = 1; mgQuitExtraF = 1;
@ -1368,7 +1407,8 @@ static s32 WaitPauseInput(void) {
return var_r31; return var_r31;
} }
static void ShowPauseConfig(void) { static void ShowPauseConfig(void)
{
float var_f31; float var_f31;
float var_f30; float var_f30;
@ -1383,7 +1423,8 @@ static void ShowPauseConfig(void) {
var_f30 = boxPosTbl[0][1]; var_f30 = boxPosTbl[0][1];
HuSprPosSet(pauseCursorPos, 1, var_f31, var_f30); HuSprPosSet(pauseCursorPos, 1, var_f31, var_f30);
HuSprAttrReset(pauseCursorPos, 1, HUSPR_ATTR_DISPOFF); HuSprAttrReset(pauseCursorPos, 1, HUSPR_ATTR_DISPOFF);
} else { }
else {
HuSprAttrSet(pauseCursorPos, 1, HUSPR_ATTR_DISPOFF); HuSprAttrSet(pauseCursorPos, 1, HUSPR_ATTR_DISPOFF);
} }
while (configObj) { while (configObj) {
@ -1391,7 +1432,8 @@ static void ShowPauseConfig(void) {
} }
} }
static void CreatePadConfigSprite(void) { static void CreatePadConfigSprite(void)
{
float temp_f31; float temp_f31;
float temp_f30; float temp_f30;
s32 var_r29; s32 var_r29;
@ -1415,7 +1457,8 @@ static void CreatePadConfigSprite(void) {
HuSprBankSet(padConfigSprGrp, i, temp_r28); HuSprBankSet(padConfigSprGrp, i, temp_r28);
if (temp_r26 != 0) { if (temp_r26 != 0) {
var_r29 = temp_r27 + 4; var_r29 = temp_r27 + 4;
} else { }
else {
var_r29 = i; var_r29 = i;
} }
HuSprBankSet(padConfigSprGrp, i + 4, var_r29); HuSprBankSet(padConfigSprGrp, i + 4, var_r29);
@ -1427,7 +1470,8 @@ static void CreatePadConfigSprite(void) {
HuSprGrpPosSet(padConfigSprGrp, 0.0f, 0.0f); HuSprGrpPosSet(padConfigSprGrp, 0.0f, 0.0f);
} }
static void ShowPadConfigSprite(s32 arg0) { static void ShowPadConfigSprite(s32 arg0)
{
s32 temp_r31; s32 temp_r31;
s32 i; s32 i;
@ -1437,7 +1481,8 @@ static void ShowPadConfigSprite(s32 arg0) {
HuSprAttrReset(padConfigSprGrp, temp_r31, HUSPR_ATTR_DISPOFF); HuSprAttrReset(padConfigSprGrp, temp_r31, HUSPR_ATTR_DISPOFF);
HuSprAttrReset(padConfigSprGrp, temp_r31 + 4, HUSPR_ATTR_DISPOFF); HuSprAttrReset(padConfigSprGrp, temp_r31 + 4, HUSPR_ATTR_DISPOFF);
HuSprAttrReset(padConfigSprGrp, temp_r31 + 8, HUSPR_ATTR_DISPOFF); HuSprAttrReset(padConfigSprGrp, temp_r31 + 8, HUSPR_ATTR_DISPOFF);
} else { }
else {
HuSprAttrSet(padConfigSprGrp, temp_r31, HUSPR_ATTR_DISPOFF); HuSprAttrSet(padConfigSprGrp, temp_r31, HUSPR_ATTR_DISPOFF);
HuSprAttrSet(padConfigSprGrp, temp_r31 + 4, HUSPR_ATTR_DISPOFF); HuSprAttrSet(padConfigSprGrp, temp_r31 + 4, HUSPR_ATTR_DISPOFF);
HuSprAttrSet(padConfigSprGrp, temp_r31 + 8, HUSPR_ATTR_DISPOFF); HuSprAttrSet(padConfigSprGrp, temp_r31 + 8, HUSPR_ATTR_DISPOFF);
@ -1445,12 +1490,14 @@ static void ShowPadConfigSprite(s32 arg0) {
} }
if (arg0 != 0) { if (arg0 != 0) {
HuSprAttrReset(padConfigSprGrp, 12, HUSPR_ATTR_DISPOFF); HuSprAttrReset(padConfigSprGrp, 12, HUSPR_ATTR_DISPOFF);
} else { }
else {
HuSprAttrSet(padConfigSprGrp, 12, HUSPR_ATTR_DISPOFF); HuSprAttrSet(padConfigSprGrp, 12, HUSPR_ATTR_DISPOFF);
} }
} }
static void PauseCreateNumber(s32 arg0, s8 arg1) { static void PauseCreateNumber(s32 arg0, s8 arg1)
{
s32 var_r31; s32 var_r31;
s32 temp_r30; s32 temp_r30;
s32 temp_r29; s32 temp_r29;
@ -1459,22 +1506,26 @@ static void PauseCreateNumber(s32 arg0, s8 arg1) {
temp_r30 = arg1 / 10; temp_r30 = arg1 / 10;
if (arg0 == 0) { if (arg0 == 0) {
var_r31 = 3; var_r31 = 3;
} else { }
else {
var_r31 = 5; var_r31 = 5;
} }
if (temp_r30 != 0) { if (temp_r30 != 0) {
HuSprBankSet(pauseSprGrp, var_r31, temp_r30); HuSprBankSet(pauseSprGrp, var_r31, temp_r30);
} else { }
else {
HuSprAttrSet(pauseSprGrp, var_r31, 4); HuSprAttrSet(pauseSprGrp, var_r31, 4);
} }
HuSprBankSet(pauseSprGrp, var_r31 + 1, temp_r29); HuSprBankSet(pauseSprGrp, var_r31 + 1, temp_r29);
} }
BOOL BoardPauseActiveCheck(void) { BOOL BoardPauseActiveCheck(void)
{
return (mainProcess != NULL) ? TRUE : FALSE; return (mainProcess != NULL) ? TRUE : FALSE;
} }
BOOL BoardPauseReqCheck(void) { BOOL BoardPauseReqCheck(void)
{
s32 temp_r30; s32 temp_r30;
s32 i; s32 i;
@ -1495,7 +1546,8 @@ BOOL BoardPauseReqCheck(void) {
return FALSE; return FALSE;
} }
static s32 CheckPort(s32 arg0) { static s32 CheckPort(s32 arg0)
{
s32 i; s32 i;
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
@ -1506,7 +1558,8 @@ static s32 CheckPort(s32 arg0) {
return i; return i;
} }
static void RotateBox(float arg0, float arg1, Mtx arg2) { static void RotateBox(float arg0, float arg1, Mtx arg2)
{
Vec sp14; Vec sp14;
Mtx spB0; Mtx spB0;
Mtx sp80; Mtx sp80;
@ -1514,11 +1567,11 @@ static void RotateBox(float arg0, float arg1, Mtx arg2) {
Mtx sp20; Mtx sp20;
BoardCameraRotGet(&sp14); BoardCameraRotGet(&sp14);
PSMTXRotRad(spB0, 'x', MTXDegToRad(sp14.x)); MTXRotRad(spB0, 'x', MTXDegToRad(sp14.x));
PSMTXRotRad(sp80, 'y', MTXDegToRad(sp14.y)); MTXRotRad(sp80, 'y', MTXDegToRad(sp14.y));
PSMTXRotRad(sp50, 'x', MTXDegToRad(arg0)); MTXRotRad(sp50, 'x', MTXDegToRad(arg0));
PSMTXRotRad(sp20, 'y', MTXDegToRad(arg1)); MTXRotRad(sp20, 'y', MTXDegToRad(arg1));
PSMTXConcat(sp80, spB0, sp80); MTXConcat(sp80, spB0, sp80);
PSMTXConcat(sp50, sp20, sp20); MTXConcat(sp50, sp20, sp20);
PSMTXConcat(sp80, sp20, arg2); MTXConcat(sp80, sp20, arg2);
} }

View file

@ -1,13 +1,5 @@
#include "game/board/shop.h" #include "game/board/shop.h"
#include "game/audio.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/audio.h"
#include "game/board/com.h" #include "game/board/com.h"
#include "game/board/com_path.h" #include "game/board/com_path.h"
@ -20,6 +12,14 @@
#include "game/board/ui.h" #include "game/board/ui.h"
#include "game/board/view.h" #include "game/board/view.h"
#include "game/board/window.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 "dolphin.h"
#include "ext_math.h" #include "ext_math.h"
@ -103,39 +103,20 @@ static Process *shopProc;
static s16 itemMdl = -1; static s16 itemMdl = -1;
static s8 itemChoice = -1; static s8 itemChoice = -1;
static BoardModelParam shopMdlParam[1] = { static BoardModelParam shopMdlParam[1] = { { 0x00070094, { 0, 1, 0, 0, 0 }, -1 } };
{ 0x00070094, { 0, 1, 0, 0, 0 }, -1 }
};
static s16 hostMdl = -1; static s16 hostMdl = -1;
static s16 shopMot[3] = { -1, -1, -1 }; static s16 shopMot[3] = { -1, -1, -1 };
static s8 itemCurChoice = -1; static s8 itemCurChoice = -1;
static s8 defaultItemTbl[5] = { static s8 defaultItemTbl[5] = { 0x05, 0x07, 0x02, 0x03, 0x00 };
0x05, 0x07, 0x02, 0x03, 0x00
};
static s32 hostMessTbl[] = { static s32 hostMessTbl[] = { MAKE_MESSID(0x0F, 0x04), MAKE_MESSID(0x0F, 0x07), MAKE_MESSID(0x0F, 0x0A), MAKE_MESSID(0x0F, 0x0D),
MAKE_MESSID(0x0F, 0x04), MAKE_MESSID(0x0F, 0x10), MAKE_MESSID(0x0F, 0x13), MAKE_MESSID(0x0F, 0x04), MAKE_MESSID(0x0F, 0x24), MAKE_MESSID(0x0F, 0x24) };
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[] = { static s8 itemPriceTbl[] = { 5, 5, 15, 15, 10, 10, 15, 15, 15, 15, 0, 25, 30, 30, 0, 0 };
5, 5, 15, 15,
10, 10, 15, 15,
15, 15, 0, 25,
30, 30, 0, 0
};
static s32 shopMotTbl[9][3] = { 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, 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, 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, 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) }, { 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, 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, 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) } { 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; hostMdl = arg0;
} }
s16 BoardShopHostGet(void) { s16 BoardShopHostGet(void)
{
return hostMdl; return hostMdl;
} }
void BoardShopInit(void) { void BoardShopInit(void)
{
BoardModelParam *var_r29; BoardModelParam *var_r29;
Vec sp1C; Vec sp1C;
Vec sp10; Vec sp10;
s32 j; s32 j;
s32 i; s32 i;
s32 sp8[2] = { s32 sp8[2] = { 0x00080000, 0x00100000 };
0x00080000,
0x00100000
};
for (i = 0; i < 2; i++) { for (i = 0; i < 2; i++) {
BoardSpaceLinkTransformGet(sp8[i], &sp1C, &sp10, 0); BoardSpaceLinkTransformGet(sp8[i], &sp1C, &sp10, 0);
@ -176,7 +156,8 @@ void BoardShopInit(void) {
BoardModelVisibilitySet(hostMdl, 0); BoardModelVisibilitySet(hostMdl, 0);
} }
void BoardShopKill(void) { void BoardShopKill(void)
{
s32 i; s32 i;
s32 j; 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) { if (BoardPlayerSizeGet(GWSystem.player_curr) == 2) {
return; return;
} }
@ -204,7 +186,8 @@ void BoardShopExec(s32 player, s32 space) {
BoardRollDispSet(1); BoardRollDispSet(1);
} }
static void ExecShop(void) { static void ExecShop(void)
{
Vec sp38; Vec sp38;
Vec sp2C; Vec sp2C;
Vec sp20; Vec sp20;
@ -229,7 +212,8 @@ static void ExecShop(void) {
temp_r28 = GWPlayer[shopPlayer].space_curr; temp_r28 = GWPlayer[shopPlayer].space_curr;
if (BoardSpaceFlagGet(0, temp_r28) & 0x80000) { if (BoardSpaceFlagGet(0, temp_r28) & 0x80000) {
shopMdlPtr = shopMdlIdx[0]; shopMdlPtr = shopMdlIdx[0];
} else { }
else {
shopMdlPtr = shopMdlIdx[1]; shopMdlPtr = shopMdlIdx[1];
} }
BoardPlayerIdleSet(shopPlayer); BoardPlayerIdleSet(shopPlayer);
@ -315,7 +299,8 @@ static void ExecShop(void) {
if (var_r29 > BoardPlayerCoinsGet(shopPlayer)) { if (var_r29 > BoardPlayerCoinsGet(shopPlayer)) {
BoardWinChoiceDisable(i); BoardWinChoiceDisable(i);
choiceEnableTbl[i] = 0; choiceEnableTbl[i] = 0;
} else { }
else {
choiceEnableTbl[i] = 1; choiceEnableTbl[i] = 1;
} }
} }
@ -332,7 +317,8 @@ static void ExecShop(void) {
HuPrcSleep(0xF); HuPrcSleep(0xF);
if (itemCurChoice == -1 || itemCurChoice == 5 || itemCurChoice == 0x7F) { if (itemCurChoice == -1 || itemCurChoice == 5 || itemCurChoice == 0x7F) {
PauseShopWin(); PauseShopWin();
} else { }
else {
PauseShopWin(); PauseShopWin();
while (!BoardStatusStopCheck(shopPlayer)) { while (!BoardStatusStopCheck(shopPlayer)) {
HuPrcVSleep(); HuPrcVSleep();
@ -346,7 +332,8 @@ static void ExecShop(void) {
temp_r24 = itemPriceTbl[activeItemTbl[itemCurChoice]]; temp_r24 = itemPriceTbl[activeItemTbl[itemCurChoice]];
if (temp_r24 >= 20) { if (temp_r24 >= 20) {
var_r23 = 3; var_r23 = 3;
} else { }
else {
var_r23 = 6; var_r23 = 6;
} }
var_f30 = BoardDAngleCalc(180.0f + BoardPlayerRotYGet(shopPlayer)); var_f30 = BoardDAngleCalc(180.0f + BoardPlayerRotYGet(shopPlayer));
@ -391,7 +378,8 @@ static void ExecShop(void) {
HuPrcEnd(); HuPrcEnd();
} }
static void DestroyShop(void) { static void DestroyShop(void)
{
s16 temp_r30; s16 temp_r30;
s32 i; s32 i;
@ -413,7 +401,8 @@ static void DestroyShop(void) {
shopProc = NULL; shopProc = NULL;
} }
static void PopupShop(void) { static void PopupShop(void)
{
s32 i; s32 i;
for (i = 0; i < 2; 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); BoardModelMotionStart(shopMdlPtr[0], 0, 0x40000004);
while (BoardModelMotionTimeGet(shopMdlPtr[0]) > 28.0f) { while (BoardModelMotionTimeGet(shopMdlPtr[0]) > 28.0f) {
HuPrcVSleep(); HuPrcVSleep();
@ -458,7 +448,8 @@ static void CloseShop(void) {
BoardModelVisibilitySet(BoardShopHostGet(), 0); BoardModelVisibilitySet(BoardShopHostGet(), 0);
} }
static void CreateShopWin(void) { static void CreateShopWin(void)
{
Vec sp8; Vec sp8;
omObjData *var_r31; omObjData *var_r31;
ShopWinWork *var_r30; ShopWinWork *var_r30;
@ -473,12 +464,12 @@ static void CreateShopWin(void) {
var_r30->unk01 = 0xC; var_r30->unk01 = 0xC;
var_r30->unk04 = 0; var_r30->unk04 = 0;
shopWinObj = var_r31; 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); HuWinMesSpeedSet(var_r30->unk06, 0);
HuWinDrawNoSet(var_r30->unk06, 0x40); HuWinDrawNoSet(var_r30->unk06, 0x40);
HuWinExAnimIn(var_r30->unk06); HuWinExAnimIn(var_r30->unk06);
sp8.x = 84.0f; sp8.x = 84.0f;
sp8.y = HU_DISP_HEIGHT-88; sp8.y = HU_DISP_HEIGHT - 88;
sp8.z = 400.0f; sp8.z = 400.0f;
var_r31->scale.x = var_r31->scale.y = var_r31->scale.z = 0.25f; var_r31->scale.x = var_r31->scale.y = var_r31->scale.z = 0.25f;
Hu3D2Dto3D(&sp8, 1, &sp8); 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; 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; Vec spC;
float var_f29; float var_f29;
float var_f28; float var_f28;
@ -517,7 +509,8 @@ static void UpdateShopWin(omObjData *arg0) {
if (temp_r28->unk00_field0 == 0) { if (temp_r28->unk00_field0 == 0) {
BoardModelVisibilitySet(itemMdl, 0); BoardModelVisibilitySet(itemMdl, 0);
} }
} else { }
else {
HuWinDispOn(temp_r28->unk06); HuWinDispOn(temp_r28->unk06);
SetShopWinItem(temp_r28, arg0); SetShopWinItem(temp_r28, arg0);
BoardModelVisibilitySet(itemMdl, 1); BoardModelVisibilitySet(itemMdl, 1);
@ -543,9 +536,9 @@ static void UpdateShopWin(omObjData *arg0) {
} }
arg0->rot.y = BoardDAngleCalc(arg0->rot.y + 2.0f); arg0->rot.y = BoardDAngleCalc(arg0->rot.y + 2.0f);
BoardCameraRotGet(&spC); BoardCameraRotGet(&spC);
PSMTXRotRad(sp48, 'y', MTXDegToRad(arg0->rot.y)); MTXRotRad(sp48, 'y', MTXDegToRad(arg0->rot.y));
PSMTXRotRad(sp18, 'x', MTXDegToRad(spC.x + 10.0f)); MTXRotRad(sp18, 'x', MTXDegToRad(spC.x + 10.0f));
PSMTXConcat(sp18, sp48, sp48); MTXConcat(sp18, sp48, sp48);
BoardModelMtxSet(itemMdl, &sp48); BoardModelMtxSet(itemMdl, &sp48);
BoardModelRotSet(itemMdl, 0.0f, 0.0f, 0.0f); BoardModelRotSet(itemMdl, 0.0f, 0.0f, 0.0f);
BoardModelPosSet(itemMdl, arg0->trans.x, arg0->trans.y + var_f29, arg0->trans.z); 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; Vec spC;
s32 var_r26; s32 var_r26;
s8 temp_r28; s8 temp_r28;
@ -581,14 +575,16 @@ static void SetShopWinItem(ShopWinWork *arg0, omObjData *arg1) {
} }
} }
static void PauseShopWin(void) { static void PauseShopWin(void)
{
if (shopWinObj) { if (shopWinObj) {
OM_GET_WORK_PTR(shopWinObj, ShopWinWork)->unk00_field0 = 1; OM_GET_WORK_PTR(shopWinObj, ShopWinWork)->unk00_field0 = 1;
shopWinObj = NULL; shopWinObj = NULL;
} }
} }
void StartItemGive(void) { void StartItemGive(void)
{
Vec sp14; Vec sp14;
Vec sp8; Vec sp8;
omObjData *temp_r30; omObjData *temp_r30;
@ -605,7 +601,7 @@ void StartItemGive(void) {
BoardModelMotionStart(itemMdl, 0, 0); BoardModelMotionStart(itemMdl, 0, 0);
BoardModelMotionSpeedSet(itemMdl, 0.0f); BoardModelMotionSpeedSet(itemMdl, 0.0f);
BoardModelPosGet(itemMdl, &sp14); BoardModelPosGet(itemMdl, &sp14);
PSMTXIdentity(sp20); MTXIdentity(sp20);
BoardModelMtxSet(itemMdl, &sp20); BoardModelMtxSet(itemMdl, &sp20);
OSs16tof32(&angleVal, &temp_r30->scale.z); OSs16tof32(&angleVal, &temp_r30->scale.z);
temp_r30->scale.z = -temp_r30->scale.z / 40.0f; temp_r30->scale.z = -temp_r30->scale.z / 40.0f;
@ -621,7 +617,8 @@ void StartItemGive(void) {
itemGiveObj = temp_r30; itemGiveObj = temp_r30;
} }
static void ExecItemGive(omObjData *arg0) { static void ExecItemGive(omObjData *arg0)
{
ItemGiveWork *temp_r29; ItemGiveWork *temp_r29;
float var_f30; float var_f30;
@ -653,7 +650,8 @@ static void ExecItemGive(omObjData *arg0) {
BoardModelRotYSet(itemMdl, var_f30); BoardModelRotYSet(itemMdl, var_f30);
} }
static void MoveItemGive(omObjData *arg0, ItemGiveWork *arg1) { static void MoveItemGive(omObjData *arg0, ItemGiveWork *arg1)
{
Vec sp1C; Vec sp1C;
Vec sp10; Vec sp10;
float temp_f27; float temp_f27;
@ -665,13 +663,15 @@ static void MoveItemGive(omObjData *arg0, ItemGiveWork *arg1) {
arg1->unk00_field1 = 2; arg1->unk00_field1 = 2;
BoardMakeRandomItem(); BoardMakeRandomItem();
BoardItemStart(GWSystem.player_curr, 0xD); BoardItemStart(GWSystem.player_curr, 0xD);
} else { }
else {
arg1->unk00_field1 = 1; arg1->unk00_field1 = 1;
arg1->unk04 = 0xF; arg1->unk04 = 0xF;
BoardPlayerPosGet(shopPlayer, &sp1C); BoardPlayerPosGet(shopPlayer, &sp1C);
if (BoardPlayerSizeGet(shopPlayer) == 1) { if (BoardPlayerSizeGet(shopPlayer) == 1) {
arg0->rot.x = (sp1C.y + 30.0f - arg0->trans.y) / 22.5f; 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->rot.x = (sp1C.y + 70.0f - arg0->trans.y) / 22.5f;
} }
arg0->trans.y = arg0->rot.y; arg0->trans.y = arg0->rot.y;
@ -692,7 +692,8 @@ static void MoveItemGive(omObjData *arg0, ItemGiveWork *arg1) {
BoardCameraDirGet(&sp10); BoardCameraDirGet(&sp10);
var_f26 = BoardDAngleCalc(atan2d(-sp10.x, -sp10.z)); var_f26 = BoardDAngleCalc(atan2d(-sp10.x, -sp10.z));
OSf32tos16(&var_f26, &angleVal); OSf32tos16(&var_f26, &angleVal);
} else { }
else {
arg0->scale.x += arg0->scale.y; arg0->scale.x += arg0->scale.y;
arg0->trans.x += arg0->rot.x; arg0->trans.x += arg0->rot.x;
arg0->trans.z += arg0->rot.z; arg0->trans.z += arg0->rot.z;
@ -706,7 +707,8 @@ static void MoveItemGive(omObjData *arg0, ItemGiveWork *arg1) {
arg1->unk02++; arg1->unk02++;
} }
static void ShrinkItemGive(omObjData *arg0, ItemGiveWork *arg1) { static void ShrinkItemGive(omObjData *arg0, ItemGiveWork *arg1)
{
float var_f30; float var_f30;
if (arg1->unk02 == 0) { if (arg1->unk02 == 0) {
@ -733,10 +735,12 @@ static void ShrinkItemGive(omObjData *arg0, ItemGiveWork *arg1) {
arg1->unk02 += 4; arg1->unk02 += 4;
} }
static void WaitItemGive(omObjData *arg0, ItemGiveWork *arg1) { static void WaitItemGive(omObjData *arg0, ItemGiveWork *arg1)
{
if (arg1->unk02 > 20) { if (arg1->unk02 > 20) {
BoardModelVisibilitySet(itemMdl, 0); BoardModelVisibilitySet(itemMdl, 0);
} else { }
else {
arg1->unk02++; arg1->unk02++;
} }
if (BoardItemDoneCheck()) { if (BoardItemDoneCheck()) {
@ -744,44 +748,25 @@ static void WaitItemGive(omObjData *arg0, ItemGiveWork *arg1) {
} }
} }
static s8 itemPrioTbl[2][5][14] = { 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 },
{ 0x14, 0x14, 0x0F, 0x0F, 0x05, 0x07, 0x05, 0x05, 0x00, 0x05, 0x00, 0x03, 0x00, 0x00 }, { 0x07, 0x07, 0x0E, 0x0C, 0x0A, 0x0A, 0x0A, 0x08, 0x05, 0x09, 0x00, 0x08, 0x00, 0x00 },
{ 0x0F, 0x0F, 0x0D, 0x0A, 0x0A, 0x0A, 0x0A, 0x05, 0x00, 0x07, 0x00, 0x05, 0x00, 0x00 }, { 0x0A, 0x0A, 0x0D, 0x0C, 0x0A, 0x0A, 0x07, 0x0A, 0x05, 0x05, 0x00, 0x08, 0x00, 0x00 },
{ 0x07, 0x07, 0x0E, 0x0C, 0x0A, 0x0A, 0x0A, 0x08, 0x05, 0x09, 0x00, 0x08, 0x00, 0x00 }, { 0x07, 0x07, 0x0D, 0x0A, 0x0D, 0x07, 0x0A, 0x0A, 0x07, 0x08, 0x00, 0x08, 0x00, 0x00 } },
{ 0x0A, 0x0A, 0x0D, 0x0C, 0x0A, 0x0A, 0x07, 0x0A, 0x05, 0x05, 0x00, 0x08, 0x00, 0x00 }, { { 0x0F, 0x0F, 0x12, 0x0F, 0x05, 0x05, 0x05, 0x05, 0x00, 0x05, 0x00, 0x02, 0x05, 0x05 },
{ 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 }, { 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 }, { 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 }, { 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] = { 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 } } };
{ 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] = { static float cursorPosTbl[6][2]
{ 190.0f, 182.0f }, = { { 190.0f, 182.0f }, { 190.0f, 208.0f }, { 190.0f, 234.0f }, { 190.0f, 260.0f }, { 190.0f, 286.0f }, { 190.0f, 312.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_r25;
s32 temp_r20; s32 temp_r20;
s32 temp_r19; s32 temp_r19;
@ -795,10 +780,11 @@ static void GetShopItems(s32 arg0) {
s32 var_r29; s32 var_r29;
s32 var_r30; 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) { if (BoardPlayerCoinsGet(arg0) < 30) {
var_r27 = 0; var_r27 = 0;
} else { }
else {
var_r27 = 1; var_r27 = 1;
} }
temp_r19 = rankItemGroupTbl[var_r27][GWPlayer[arg0].rank][temp_r22]; 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 temp_r29;
s32 var_r31; s32 var_r31;
s32 var_r30; s32 var_r30;
@ -847,9 +834,11 @@ static void GetDefaultShopItems(s32 arg0) {
temp_r29 = BoardRandMod(100); temp_r29 = BoardRandMod(100);
if (temp_r29 > 90) { if (temp_r29 > 90) {
var_r30 = 3; var_r30 = 3;
} else if (temp_r29 > 40) { }
else if (temp_r29 > 40) {
var_r30 = BoardRandMod(2) + 1; var_r30 = BoardRandMod(2) + 1;
} else { }
else {
var_r30 = 0; var_r30 = 0;
} }
for (var_r31 = 0; var_r31 < 5; var_r31++) { 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 sp8[5];
s32 var_r29; s32 var_r29;
s32 i; 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_r27;
s32 temp_r30; s32 temp_r30;
s32 temp_r29; s32 temp_r29;
@ -910,14 +901,13 @@ static void DecideComEnter(s32 arg0) {
BoardComKeySetRight(); BoardComKeySetRight();
return; return;
} }
} else { }
else {
temp_r27 = GWPlayer[arg0].space_curr; temp_r27 = GWPlayer[arg0].space_curr;
temp_r30 = BoardComPathShortcutLenGet(temp_r27, 8, 0); temp_r30 = BoardComPathShortcutLenGet(temp_r27, 8, 0);
temp_r29 = BoardComPathShortcutLenGet(temp_r27, 8, 1); temp_r29 = BoardComPathShortcutLenGet(temp_r27, 8, 1);
if ((temp_r30 != 0 || temp_r29 != 0) if ((temp_r30 != 0 || temp_r29 != 0) && (BoardPlayerCoinsGet(arg0) >= 17 || (temp_r29 >= temp_r26 && temp_r30 >= temp_r26))
&& (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))
&& BoardPlayerCoinsGet(arg0) < 40
&& ((temp_r30 < 20 && temp_r30 > 0) || (temp_r29 < 10 && temp_r29 > 0))
&& BoardRandMod(100) > var_r28) { && BoardRandMod(100) > var_r28) {
BoardComKeySetRight(); BoardComKeySetRight();
return; return;
@ -926,18 +916,21 @@ static void DecideComEnter(s32 arg0) {
BoardComKeySetLeft(); BoardComKeySetLeft();
} }
static void DecideComBuy(s32 arg0) { static void DecideComBuy(s32 arg0)
{
if (!GWPlayer[arg0].com) { if (!GWPlayer[arg0].com) {
return; return;
} }
if (comF != 0) { if (comF != 0) {
BoardComKeySetDown(); BoardComKeySetDown();
} else { }
else {
BoardComKeySetUp(); BoardComKeySetUp();
} }
} }
static s32 GetComItemChoice(s32 arg0) { static s32 GetComItemChoice(s32 arg0)
{
s16 sp8; s16 sp8;
s32 temp_r26; s32 temp_r26;
s32 var_r28 = 0; s32 var_r28 = 0;
@ -954,7 +947,8 @@ static s32 GetComItemChoice(s32 arg0) {
for (var_r27 = i = 0; i < 5; i++) { for (var_r27 = i = 0; i < 5; i++) {
if (temp_r26 >= itemPriceTbl[activeItemTbl[i]]) { if (temp_r26 >= itemPriceTbl[activeItemTbl[i]]) {
var_r30 = BoardComItemWeightGet(arg0, activeItemTbl[i]); var_r30 = BoardComItemWeightGet(arg0, activeItemTbl[i]);
} else { }
else {
var_r30 = 0; var_r30 = 0;
} }
if (BoardPlayerItemFind(arg0, activeItemTbl[i]) != -1) { if (BoardPlayerItemFind(arg0, activeItemTbl[i]) != -1) {
@ -968,28 +962,31 @@ static s32 GetComItemChoice(s32 arg0) {
if (var_r27 == 0) { if (var_r27 == 0) {
comF = 1; comF = 1;
var_r28 = 5; var_r28 = 5;
} else { }
else {
var_r28 = var_r25; var_r28 = var_r25;
} }
return var_r28; return var_r28;
} }
static void WaitItemChoice(void) { static void WaitItemChoice(void)
{
while (itemChoiceObj) { while (itemChoiceObj) {
HuPrcVSleep(); HuPrcVSleep();
} }
} }
static void CreateShopItemChoice(s32 arg0, s32 arg1) { static void CreateShopItemChoice(s32 arg0, s32 arg1)
{
omObjData *temp_r30; omObjData *temp_r30;
ItemChoiceWork *var_r31; ItemChoiceWork *var_r31;
s16 spC; s16 spC;
s16 i; s16 i;
#if VERSION_PAL #if VERSION_PAL
for(i=0; i<6; i++) { for (i = 0; i < 6; i++) {
cursorPosTbl[i][0] = 190; cursorPosTbl[i][0] = 190;
} }
#endif #endif
temp_r30 = omAddObjEx(boardObjMan, 0x7E01, 0, 0, -1, UpdateShopItemChoice); temp_r30 = omAddObjEx(boardObjMan, 0x7E01, 0, 0, -1, UpdateShopItemChoice);
itemChoiceObj = temp_r30; itemChoiceObj = temp_r30;
itemChoice = -1; itemChoice = -1;
@ -1001,29 +998,30 @@ static void CreateShopItemChoice(s32 arg0, s32 arg1) {
var_r31->unk02 = 0; var_r31->unk02 = 0;
var_r31->unk03 = arg1; var_r31->unk03 = arg1;
var_r31->unk06 = HuSprGrpCreate(1); var_r31->unk06 = HuSprGrpCreate(1);
#if VERSION_PAL #if VERSION_PAL
if (GWLanguageGet() != 0) { if (GWLanguageGet() != 0) {
s16 winId = BoardWinIDGet(); s16 winId = BoardWinIDGet();
if(winId != -1) { if (winId != -1) {
WindowData *winP = &winData[winId]; WindowData *winP = &winData[winId];
for(i=0; i<6; i++) { for (i = 0; i < 6; i++) {
cursorPosTbl[i][0] = winP->pos_x+96; 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; cursorPosTbl[i][0] = 166;
} }
} }
} }
temp_r30->trans.x = cursorPosTbl[0][0]; temp_r30->trans.x = cursorPosTbl[0][0];
temp_r30->trans.y = cursorPosTbl[0][1]; temp_r30->trans.y = cursorPosTbl[0][1];
#else #else
temp_r30->trans.x = cursorPosTbl[0][0]; temp_r30->trans.x = cursorPosTbl[0][0];
temp_r30->trans.y = cursorPosTbl[0][1]; temp_r30->trans.y = cursorPosTbl[0][1];
if (GWLanguageGet() != 0) { if (GWLanguageGet() != 0) {
temp_r30->trans.x -= 24.0f; temp_r30->trans.x -= 24.0f;
} }
#endif #endif
if (GWPlayer[arg0].com) { if (GWPlayer[arg0].com) {
var_r31->unk01 = GWMessDelayGet(); 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); HuSprPosSet(var_r31->unk06, 0, temp_r30->trans.x, temp_r30->trans.y);
} }
static s32 GetShopItemChoice(void) { static s32 GetShopItemChoice(void)
{
return itemChoice; return itemChoice;
} }
static s32 GetShopItemWinChoice(void) { static s32 GetShopItemWinChoice(void)
{
ItemChoiceWork *var_r31; ItemChoiceWork *var_r31;
if (!itemChoiceObj) { if (!itemChoiceObj) {
@ -1047,7 +1047,8 @@ static s32 GetShopItemWinChoice(void) {
return var_r31->unk02; return var_r31->unk02;
} }
static void MoveShopItemChoice(omObjData *arg0, ItemChoiceWork *arg1) { static void MoveShopItemChoice(omObjData *arg0, ItemChoiceWork *arg1)
{
u32 sp8; u32 sp8;
s32 temp_r28; s32 temp_r28;
s32 temp_r29; s32 temp_r29;
@ -1055,14 +1056,15 @@ static void MoveShopItemChoice(omObjData *arg0, ItemChoiceWork *arg1) {
temp_r28 = arg1->unk02; temp_r28 = arg1->unk02;
arg0->trans.x = cursorPosTbl[arg1->unk02][0]; arg0->trans.x = cursorPosTbl[arg1->unk02][0];
arg0->trans.y = cursorPosTbl[arg1->unk02][1]; arg0->trans.y = cursorPosTbl[arg1->unk02][1];
#if VERSION_NTSC #if VERSION_NTSC
if (GWLanguageGet() != 0) { if (GWLanguageGet() != 0) {
arg0->trans.x -= 24.0f; arg0->trans.x -= 24.0f;
} }
#endif #endif
if (GWPlayer[arg1->unk00_field1].com) { if (GWPlayer[arg1->unk00_field1].com) {
GetShopItemChoiceInput(arg1, arg0, &sp8); GetShopItemChoiceInput(arg1, arg0, &sp8);
} else { }
else {
temp_r29 = GWPlayer[arg1->unk00_field1].port; temp_r29 = GWPlayer[arg1->unk00_field1].port;
sp8 = HuPadDStkRep[temp_r29] | HuPadBtnDown[temp_r29]; sp8 = HuPadDStkRep[temp_r29] | HuPadBtnDown[temp_r29];
} }
@ -1077,7 +1079,8 @@ static void MoveShopItemChoice(omObjData *arg0, ItemChoiceWork *arg1) {
HuAudFXPlay(2); HuAudFXPlay(2);
if (GWPlayer[arg1->unk00_field1].com) { if (GWPlayer[arg1->unk00_field1].com) {
arg1->unk05 = 0x32; arg1->unk05 = 0x32;
} else { }
else {
arg1->unk05 = 5; arg1->unk05 = 5;
} }
return; 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; ItemChoiceWork *temp_r31;
temp_r31 = OM_GET_WORK_PTR(arg0, ItemChoiceWork); temp_r31 = OM_GET_WORK_PTR(arg0, ItemChoiceWork);
@ -1120,25 +1124,31 @@ static void UpdateShopItemChoice(omObjData *arg0) {
if (temp_r31->unk05 == 0) { if (temp_r31->unk05 == 0) {
temp_r31->unk00_field0 = 1; temp_r31->unk00_field0 = 1;
} }
} else if (temp_r31->unk01 != 0) { }
else if (temp_r31->unk01 != 0) {
temp_r31->unk01--; temp_r31->unk01--;
} else if (temp_r31->unk04 != 0) { }
else if (temp_r31->unk04 != 0) {
temp_r31->unk04--; temp_r31->unk04--;
} else { }
else {
MoveShopItemChoice(arg0, temp_r31); MoveShopItemChoice(arg0, temp_r31);
} }
HuSprPosSet(temp_r31->unk06, 0, arg0->trans.x, arg0->trans.y); 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) { if (arg0->unk02 == arg0->unk03) {
*arg2 = 0x100; *arg2 = 0x100;
} else { }
else {
*arg2 = 4; *arg2 = 4;
} }
} }
void BoardShopTutorialExec(s32 arg0) { void BoardShopTutorialExec(s32 arg0)
{
Vec sp48; Vec sp48;
Vec sp3C; Vec sp3C;
Vec sp30; Vec sp30;
@ -1155,7 +1165,8 @@ void BoardShopTutorialExec(s32 arg0) {
sp10 = BoardWinPortraitGet(); sp10 = BoardWinPortraitGet();
if (BoardSpaceFlagGet(0, arg0) & 0x80000) { if (BoardSpaceFlagGet(0, arg0) & 0x80000) {
shopMdlPtr = shopMdlIdx[0]; shopMdlPtr = shopMdlIdx[0];
} else { }
else {
shopMdlPtr = shopMdlIdx[1]; shopMdlPtr = shopMdlIdx[1];
} }
temp_r27 = BoardSpaceLinkFlagSearch(0, arg0, 0x02000000); temp_r27 = BoardSpaceLinkFlagSearch(0, arg0, 0x02000000);

View file

@ -1111,4 +1111,8 @@ void BoardSpaceDestroy(void)
HuMemDirectFree(spaceTexData); HuMemDirectFree(spaceTexData);
spaceTexData = NULL; spaceTexData = NULL;
} }
#ifdef TARGET_PC
GXDestroyTexObj(&spaceHiliteTex);
GXDestroyTexObj(&spaceTex);
#endif
} }

View file

@ -3,15 +3,6 @@
#include "game/data.h" #include "game/data.h"
#include "game/disp.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/audio.h"
#include "game/board/com.h" #include "game/board/com.h"
#include "game/board/main.h" #include "game/board/main.h"
@ -21,6 +12,15 @@
#include "game/board/tutorial.h" #include "game/board/tutorial.h"
#include "game/board/ui.h" #include "game/board/ui.h"
#include "game/board/window.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" #include "ext_math.h"
@ -74,77 +74,28 @@ static Process *starProc;
static s16 starParman = -1; static s16 starParman = -1;
static s16 hostMdl = -1; static s16 hostMdl = -1;
static const s32 starMesTbl1[9] = { 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, 0), MAKE_MESSID(12, 45), MAKE_MESSID(12, 0), MAKE_MESSID(12, 0), 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] = { static const s32 starMesTbl2[9][2]
{ MAKE_MESSID(21, 34), MAKE_MESSID(21, 40) }, = { { 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, 35), MAKE_MESSID(21, 41) }, { 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, 36), MAKE_MESSID(21, 42) }, { MAKE_MESSID(21, 34), MAKE_MESSID(21, 40) }, { MAKE_MESSID(21, 34), MAKE_MESSID(21, 40) }, { MAKE_MESSID(21, 34), MAKE_MESSID(21, 40) } };
{ 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[] = { s32 boardStarSndTbl[] = { 0x00000120, 0x00000160, 0x000001A0, 0x000001E0, 0x00000220, 0x00000260, 0x000002A0, 0x000002E0 };
0x00000120,
0x00000160,
0x000001A0,
0x000001E0,
0x00000220,
0x00000260,
0x000002A0,
0x000002E0
};
static s32 hostMotTbl[9][2] = { static s32 hostMotTbl[9][2] = { { DATA_MAKE_NUM(DATADIR_W01, 33), DATA_MAKE_NUM(DATADIR_BOARD, 157) },
{ 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_W02, 7), DATA_MAKE_NUM(DATADIR_BOARD, 158) }, { 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_W03, 31), DATA_MAKE_NUM(DATADIR_BOARD, 159) }, { DATA_MAKE_NUM(DATADIR_W06, 21), DATA_MAKE_NUM(DATADIR_BOARD, 162) } };
{ 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 = { static HsfanimStruct00 starEffParam = { 0x001E, { 0x00, 0x00 }, // padding?
0x001E, 3.3f, 70.0f, 7.0f, { 0.0f, -0.05f, 0.0f }, 2.0f, 1.0f, 20.0f, 0.98f, 0x0002,
{ 0x00, 0x00 }, // padding? { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x40, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
3.3f, { 0xFF, 0x80, 0x80, 0x00, 0xFF, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } };
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; hostMdl = arg0;
if (GWBoardGet() == BOARD_ID_EXTRA1 || GWBoardGet() == BOARD_ID_EXTRA2) { if (GWBoardGet() == BOARD_ID_EXTRA1 || GWBoardGet() == BOARD_ID_EXTRA2) {
return; return;
@ -154,11 +105,13 @@ void BoardStarHostSet(s16 arg0) {
} }
} }
s16 BoardStarHostMdlGet(void) { s16 BoardStarHostMdlGet(void)
{
return hostMdl; return hostMdl;
} }
void BoardStarExec(s32 arg0, s32 arg1) { void BoardStarExec(s32 arg0, s32 arg1)
{
if (GWBoardGet() == BOARD_ID_EXTRA1 || GWBoardGet() == BOARD_ID_EXTRA2) { if (GWBoardGet() == BOARD_ID_EXTRA1 || GWBoardGet() == BOARD_ID_EXTRA2) {
return; return;
} }
@ -173,7 +126,8 @@ void BoardStarExec(s32 arg0, s32 arg1) {
} }
} }
static void ExecStar(void) { static void ExecStar(void)
{
Vec sp24; Vec sp24;
Vec sp18; Vec sp18;
Vec spC; Vec spC;
@ -215,22 +169,23 @@ static void ExecStar(void) {
BoardPlayerIdleSet(temp_r31); BoardPlayerIdleSet(temp_r31);
if (BoardDAngleCalc(temp_f30 - temp_f29) < 0.0f) { if (BoardDAngleCalc(temp_f30 - temp_f29) < 0.0f) {
var_f28 = -BoardDAngleCalc(temp_f30 - temp_f29); var_f28 = -BoardDAngleCalc(temp_f30 - temp_f29);
} else { }
else {
var_f28 = BoardDAngleCalc(temp_f30 - temp_f29); var_f28 = BoardDAngleCalc(temp_f30 - temp_f29);
} }
if (var_f28 > 90.0f) { if (var_f28 > 90.0f) {
var_r25 = 30; var_r25 = 30;
} else { }
else {
var_r25 = 15; var_r25 = 15;
} }
BoardPlayerMotBlendSet(temp_r31, temp_f30, var_r25); BoardPlayerMotBlendSet(temp_r31, temp_f30, var_r25);
temp_f27 = BoardModelRotYGet(temp_r30); temp_f27 = BoardModelRotYGet(temp_r30);
var_f31 = BoardDAngleCalc(temp_f30 + 180.0f) - temp_f27; var_f31 = BoardDAngleCalc(temp_f30 + 180.0f) - temp_f27;
if ((var_f31 <= 4.0f && var_f31 >= 0.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_f31 <= 360.0f && var_f31 >= 355.0f)
|| (var_f31 <= 0.0f && var_f31 >= -4.0f)) {
var_r26 = 0; var_r26 = 0;
} else { }
else {
var_r26 = 1; var_r26 = 1;
} }
if (var_r26 != 0) { if (var_r26 != 0) {
@ -253,12 +208,14 @@ static void ExecStar(void) {
BoardWinCreate(0, temp_r29, BoardWinPortraitGetStar()); BoardWinCreate(0, temp_r29, BoardWinPortraitGetStar());
BoardWinWait(); BoardWinWait();
BoardWinKill(); 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; temp_r29 = starMesTbl1[temp_r27] + 2;
BoardWinCreate(2, temp_r29, BoardWinPortraitGetStar()); BoardWinCreate(2, temp_r29, BoardWinPortraitGetStar());
BoardWinWait(); BoardWinWait();
BoardWinKill(); BoardWinKill();
} else { }
else {
BoardStatusShowSetAll(0); BoardStatusShowSetAll(0);
while (!BoardStatusStopCheck(0) || !BoardStatusStopCheck(1) || !BoardStatusStopCheck(2) || !BoardStatusStopCheck(3)) { while (!BoardStatusStopCheck(0) || !BoardStatusStopCheck(1) || !BoardStatusStopCheck(2) || !BoardStatusStopCheck(3)) {
HuPrcVSleep(); HuPrcVSleep();
@ -286,7 +243,8 @@ static void ExecStar(void) {
if (GWPlayer[temp_r31].com) { if (GWPlayer[temp_r31].com) {
if (BoardPlayerCoinsGet(temp_r31) >= 20) { if (BoardPlayerCoinsGet(temp_r31) >= 20) {
BoardComKeySetUp(); BoardComKeySetUp();
} else { }
else {
BoardComKeySetDown(); BoardComKeySetDown();
} }
} }
@ -325,7 +283,7 @@ static void ExecStar(void) {
break; break;
} }
} }
block_A: block_A:
temp_r29 = starMesTbl1[temp_r27] + 3; temp_r29 = starMesTbl1[temp_r27] + 3;
BoardWinCreate(2, temp_r29, BoardWinPortraitGetStar()); BoardWinCreate(2, temp_r29, BoardWinPortraitGetStar());
BoardWinWait(); BoardWinWait();
@ -381,7 +339,8 @@ block_B:
HuPrcEnd(); HuPrcEnd();
} }
static void DestroyStar(void) { static void DestroyStar(void)
{
s32 i; s32 i;
_ClearFlag(0x10017); _ClearFlag(0x10017);
@ -394,7 +353,8 @@ static void DestroyStar(void) {
starProc = NULL; starProc = NULL;
} }
static void GiveStarMain(omObjData *arg0) { static void GiveStarMain(omObjData *arg0)
{
GiveStarWork *temp_r30; GiveStarWork *temp_r30;
temp_r30 = OM_GET_WORK_PTR(arg0, GiveStarWork); temp_r30 = OM_GET_WORK_PTR(arg0, GiveStarWork);
@ -407,7 +367,8 @@ static void GiveStarMain(omObjData *arg0) {
} }
if (temp_r30->unk04 != 0) { if (temp_r30->unk04 != 0) {
temp_r30->unk04--; temp_r30->unk04--;
} else { }
else {
switch (temp_r30->unk01) { switch (temp_r30->unk01) {
case 4: case 4:
break; 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; float var_f31;
if (arg0->unk00_field1 != 0) { 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; Vec sp8;
BoardPlayerPosGet(arg0->unk00_field3, &sp8); BoardPlayerPosGet(arg0->unk00_field3, &sp8);
@ -465,7 +428,8 @@ static void InitGiveStar(GiveStarWork *arg0, omObjData *arg1) {
InitGiveStarEffect(); InitGiveStarEffect();
} }
static void MoveGiveStar(GiveStarWork *arg0, omObjData *arg1) { static void MoveGiveStar(GiveStarWork *arg0, omObjData *arg1)
{
Vec sp8; Vec sp8;
float temp_f31; float temp_f31;
@ -482,7 +446,8 @@ static void MoveGiveStar(GiveStarWork *arg0, omObjData *arg1) {
arg1->trans.z += arg1->rot.z; arg1->trans.z += arg1->rot.z;
arg1->trans.y += -0.08166667f * temp_f31 * temp_f31 * 0.97f + 50.0f; arg1->trans.y += -0.08166667f * temp_f31 * temp_f31 * 0.97f + 50.0f;
arg0->unk0A++; arg0->unk0A++;
} else { }
else {
arg1->trans.y += -4.0f; arg1->trans.y += -4.0f;
if (arg1->trans.y <= sp8.y + 300.0f) { if (arg1->trans.y <= sp8.y + 300.0f) {
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; Vec sp8;
float var_f30; float var_f30;
@ -505,7 +471,8 @@ static void ShrinkGiveStar(GiveStarWork *arg0, omObjData *arg1) {
if (arg0->unk08 < 90) { if (arg0->unk08 < 90) {
if (BoardPlayerSizeGet(arg0->unk00_field3) != 1) { if (BoardPlayerSizeGet(arg0->unk00_field3) != 1) {
arg0->unk08 += 2; arg0->unk08 += 2;
} else { }
else {
arg0->unk08 += 1.4f; arg0->unk08 += 1.4f;
} }
if (arg0->unk08 > 90) { if (arg0->unk08 > 90) {
@ -519,7 +486,8 @@ static void ShrinkGiveStar(GiveStarWork *arg0, omObjData *arg1) {
} }
arg1->scale.y = arg1->scale.x; arg1->scale.y = arg1->scale.x;
arg1->scale.z = arg1->scale.x; arg1->scale.z = arg1->scale.x;
} else { }
else {
omVibrate(arg0->unk00_field3, 12, 0xC, 0); omVibrate(arg0->unk00_field3, 12, 0xC, 0);
arg0->unk00_field0 = 1; arg0->unk00_field0 = 1;
arg0->unk01 = 4; 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; GiveStarWork *temp_r31;
if (giveStarObj) { if (giveStarObj) {
@ -538,7 +507,8 @@ static void StopGiveStar(void) {
} }
} }
static void InitGiveStarEffect(void) { static void InitGiveStarEffect(void)
{
s16 temp_r3; s16 temp_r3;
void *var_r30; void *var_r30;
@ -553,7 +523,8 @@ static void InitGiveStarEffect(void) {
HuDataDirClose(DATADIR_EFFECT); HuDataDirClose(DATADIR_EFFECT);
} }
static void KillGiveStarEffect(void) { static void KillGiveStarEffect(void)
{
if (starParman != -1) { if (starParman != -1) {
Hu3DParManKill(starParman); Hu3DParManKill(starParman);
starParman = -1; 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); GiveStarWork *temp_r28 = OM_GET_WORK_PTR(giveStarObj, GiveStarWork);
temp_r28->unk01 = 0; temp_r28->unk01 = 0;
} }
static inline void StarInlineFunc01(void) { static inline void StarInlineFunc01(void)
{
GiveStarWork *temp_r27 = OM_GET_WORK_PTR(giveStarObj, GiveStarWork); GiveStarWork *temp_r27 = OM_GET_WORK_PTR(giveStarObj, GiveStarWork);
while (temp_r27->unk01 != 4) { 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); GiveStarWork *temp_r29 = OM_GET_WORK_PTR(giveStarObj, GiveStarWork);
temp_r29->unk00_field1 = 1; temp_r29->unk00_field1 = 1;
@ -584,7 +558,8 @@ static inline void StarInlineFunc02(void) {
temp_r29->unk01 = 2; temp_r29->unk01 = 2;
} }
void BoardStarGive(s32 arg0, Vec *arg1) { void BoardStarGive(s32 arg0, Vec *arg1)
{
Vec sp8; Vec sp8;
s32 temp_r25; s32 temp_r25;
GiveStarWork *temp_r31; GiveStarWork *temp_r31;
@ -631,7 +606,8 @@ void BoardStarGive(s32 arg0, Vec *arg1) {
HuPrcSleep(10); HuPrcSleep(10);
if (_CheckFlag(FLAG_ID_MAKE(1, 11))) { if (_CheckFlag(FLAG_ID_MAKE(1, 11))) {
BoardPlayerMotionEndWait(arg0); BoardPlayerMotionEndWait(arg0);
} else { }
else {
temp_r25 = HuAudSStreamPlay(6); temp_r25 = HuAudSStreamPlay(6);
BoardPlayerMotionEndWait(arg0); BoardPlayerMotionEndWait(arg0);
while (msmStreamGetStatus(temp_r25) != 0) { while (msmStreamGetStatus(temp_r25) != 0) {
@ -641,7 +617,8 @@ void BoardStarGive(s32 arg0, Vec *arg1) {
BoardPlayerVoiceEnableSet(arg0, 7, 1); BoardPlayerVoiceEnableSet(arg0, 7, 1);
} }
void BoardStarShowNext(s32 arg0) { void BoardStarShowNext(s32 arg0)
{
Mtx spBC; Mtx spBC;
Mtx sp8C; Mtx sp8C;
Mtx sp5C; Mtx sp5C;
@ -669,7 +646,8 @@ void BoardStarShowNext(s32 arg0) {
while (WipeStatGet() != 0) { while (WipeStatGet() != 0) {
HuPrcVSleep(); HuPrcVSleep();
} }
} else { }
else {
HuPrcSleep(18); HuPrcSleep(18);
} }
BoardStatusItemSet(0); BoardStatusItemSet(0);
@ -703,14 +681,16 @@ void BoardStarShowNext(s32 arg0) {
temp_f31 = VECMag(&sp20); temp_f31 = VECMag(&sp20);
if (temp_f31 > 3000.0f) { if (temp_f31 > 3000.0f) {
var_r27 = 0xF0; var_r27 = 0xF0;
} else if (temp_f31 > 1500.0f) { }
else if (temp_f31 > 1500.0f) {
var_r27 = 0x78; var_r27 = 0x78;
} else { }
else {
var_r27 = 0x78; var_r27 = 0x78;
} }
BoardViewMoveStart(&sp38, &sp50, var_r27); BoardViewMoveStart(&sp38, &sp50, var_r27);
showNextObj->trans.x = 68.0f; showNextObj->trans.x = 68.0f;
showNextObj->trans.y = HU_DISP_HEIGHT-50; showNextObj->trans.y = HU_DISP_HEIGHT - 50;
showNextObj->trans.z = 100.0f; showNextObj->trans.z = 100.0f;
sp44.x = showNextObj->trans.x; sp44.x = showNextObj->trans.x;
sp44.y = showNextObj->trans.y; sp44.y = showNextObj->trans.y;
@ -718,9 +698,9 @@ void BoardStarShowNext(s32 arg0) {
Hu3D2Dto3D(&sp44, 1, &sp44); Hu3D2Dto3D(&sp44, 1, &sp44);
BoardModelPosSetV(BoardStarHostMdlGet(), &sp44); BoardModelPosSetV(BoardStarHostMdlGet(), &sp44);
BoardCameraRotGet(&sp2C); BoardCameraRotGet(&sp2C);
PSMTXRotRad(sp5C, 'y', MTXDegToRad(10.0f)); MTXRotRad(sp5C, 'y', MTXDegToRad(10.0f));
PSMTXRotRad(sp8C, 'x', MTXDegToRad(sp2C.x)); MTXRotRad(sp8C, 'x', MTXDegToRad(sp2C.x));
PSMTXConcat(sp8C, sp5C, spBC); MTXConcat(sp8C, sp5C, spBC);
BoardModelMtxSet(BoardStarHostMdlGet(), &spBC); BoardModelMtxSet(BoardStarHostMdlGet(), &spBC);
BoardModelRotSet(BoardStarHostMdlGet(), 0.0f, 0.0f, 0.0f); BoardModelRotSet(BoardStarHostMdlGet(), 0.0f, 0.0f, 0.0f);
BoardModelScaleSet(BoardStarHostMdlGet(), 0.09f, 0.09f, 0.09f); BoardModelScaleSet(BoardStarHostMdlGet(), 0.09f, 0.09f, 0.09f);
@ -735,7 +715,8 @@ void BoardStarShowNext(s32 arg0) {
} }
if (var_r28 == 0) { if (var_r28 == 0) {
var_r30 = starMesTbl1[GWBoardGet()] + 6; var_r30 = starMesTbl1[GWBoardGet()] + 6;
} else { }
else {
var_r30 = starMesTbl2[GWBoardGet()][0]; var_r30 = starMesTbl2[GWBoardGet()][0];
} }
BoardWinCreate(3, var_r30, -1); BoardWinCreate(3, var_r30, -1);
@ -749,7 +730,8 @@ void BoardStarShowNext(s32 arg0) {
HuPrcSleep(3); HuPrcSleep(3);
if (var_r28 == 0) { if (var_r28 == 0) {
var_r30 = starMesTbl1[GWBoardGet()] + 7; var_r30 = starMesTbl1[GWBoardGet()] + 7;
} else { }
else {
var_r30 = starMesTbl2[GWBoardGet()][1]; var_r30 = starMesTbl2[GWBoardGet()][1];
} }
BoardWinCreate(3, var_r30, -1); BoardWinCreate(3, var_r30, -1);
@ -765,7 +747,7 @@ void BoardStarShowNext(s32 arg0) {
HuPrcVSleep(); HuPrcVSleep();
} }
BoardViewWait(); BoardViewWait();
PSMTXIdentity(spBC); MTXIdentity(spBC);
BoardModelMtxSet(BoardStarHostMdlGet(), &spBC); BoardModelMtxSet(BoardStarHostMdlGet(), &spBC);
HideNextHost(1); HideNextHost(1);
while (showNextObj) { while (showNextObj) {
@ -786,7 +768,8 @@ void BoardStarShowNext(s32 arg0) {
_ClearFlag(FLAG_ID_MAKE(1, 28)); _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); ShowNextWork *temp_r30 = OM_GET_WORK_PTR(arg0, ShowNextWork);
Vec sp8; Vec sp8;
@ -815,7 +798,8 @@ static void ShowNextUpdate(omObjData *arg0) {
BoardModelPosSetV(BoardStarHostMdlGet(), &sp8); BoardModelPosSetV(BoardStarHostMdlGet(), &sp8);
} }
static void HideNextHost(s32 arg0) { static void HideNextHost(s32 arg0)
{
ShowNextWork *temp_r31 = OM_GET_WORK_PTR(showNextObj, ShowNextWork); ShowNextWork *temp_r31 = OM_GET_WORK_PTR(showNextObj, ShowNextWork);
temp_r31->unk01 = arg0; temp_r31->unk01 = arg0;

Some files were not shown because too many files have changed in this diff Show more