commit
909c743527
141 changed files with 7242 additions and 3522 deletions
3
.gitmodules
vendored
3
.gitmodules
vendored
|
|
@ -1,3 +1,6 @@
|
|||
[submodule "extern/musyx"]
|
||||
path = extern/musyx
|
||||
url = https://github.com/AxioDL/musyx
|
||||
[submodule "extern/aurora"]
|
||||
path = extern/aurora
|
||||
url = https://github.com/dbalatoni13/aurora.git
|
||||
|
|
|
|||
136
CMakeLists.txt
Normal file
136
CMakeLists.txt
Normal 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)
|
||||
18
README.md
18
README.md
|
|
@ -59,7 +59,7 @@ Linux
|
|||
- For non-x86(_64) platforms: Install wine from your package manager.
|
||||
- For x86(_64), [wibo](https://github.com/decompals/wibo), a minimal 32-bit Windows binary wrapper, will be automatically downloaded and used.
|
||||
|
||||
Building
|
||||
Building the game for the GameCube
|
||||
========
|
||||
|
||||
- Clone the repository:
|
||||
|
|
@ -89,11 +89,13 @@ Building
|
|||
ninja
|
||||
```
|
||||
|
||||
Diffing
|
||||
=======
|
||||
Building the game for PC
|
||||
=====
|
||||
After you got the GameCube build up and running for `GMPE01_00`:
|
||||
- Generate project files using CMake:
|
||||
```
|
||||
cmake -B build/port -G "Visual Studio 17 2022" -A Win32
|
||||
```
|
||||
Linux and MacOS, and x64 support is coming later.
|
||||
|
||||
Once the initial build succeeds, an `objdiff.json` should exist in the project root.
|
||||
|
||||
Download the latest release from [encounter/objdiff](https://github.com/encounter/objdiff). Under project settings, set `Project directory`. The configuration should be loaded automatically.
|
||||
|
||||
Select an object from the left sidebar to begin diffing. Changes to the project will rebuild automatically: changes to source files, headers, `configure.py`, `splits.txt` or `symbols.txt`.
|
||||
- Open the solution in Visual Studio and build. [Fix for UtilsVulkan.h](https://github.com/encounter/dawn-cmake/blob/f10e70a26db00bb89f88be4204cf49ffc869e194/src/dawn/native/vulkan/UtilsVulkan.h#L128-L132)
|
||||
|
|
|
|||
|
|
@ -207,4 +207,4 @@ lbl_1_bss_19F8 = .bss:0x000019F8; // type:object size:0x20
|
|||
lbl_1_bss_1A18 = .bss:0x00001A18; // type:object size:0x2
|
||||
stageSprId = .bss:0x00001A1A; // type:object size:0x42 data:2byte
|
||||
stageMotId = .bss:0x00001A5C; // type:object size:0x40 data:2byte
|
||||
stageSprId = .bss:0x00001A9C; // type:object size:0x40 data:2byte
|
||||
stageMdlId = .bss:0x00001A9C; // type:object size:0x40 data:2byte
|
||||
|
|
|
|||
|
|
@ -4620,7 +4620,7 @@ lbl_80192160 = .bss:0x80192160; // type:object size:0x100
|
|||
lbl_80192260 = .bss:0x80192260; // type:object size:0x100
|
||||
wipeData = .bss:0x80192360; // type:object size:0x4C data:4byte
|
||||
winData = .bss:0x801923C0; // type:object size:0x3000 align:32 data:byte
|
||||
winKey = .bss:0x801953C0; // type:object size:0x10
|
||||
winKey = .bss:0x801953C0; // type:object size:0x10 scope:local
|
||||
winComKeyBuf = .bss:0x801953D0; // type:object size:0x1400
|
||||
ARInfo = .bss:0x801967E0; // type:object size:0x400 scope:local data:byte
|
||||
arqReq = .bss:0x80196BE0; // type:object size:0x20 scope:local
|
||||
|
|
|
|||
|
|
@ -4619,7 +4619,7 @@ lbl_80192160 = .bss:0x80192160; // type:object size:0x100
|
|||
lbl_80192260 = .bss:0x80192260; // type:object size:0x100
|
||||
wipeData = .bss:0x80192360; // type:object size:0x4C data:4byte
|
||||
winData = .bss:0x801923C0; // type:object size:0x3000 align:32 data:byte
|
||||
winKey = .bss:0x801953C0; // type:object size:0x10
|
||||
winKey = .bss:0x801953C0; // type:object size:0x10 scope:local
|
||||
winComKeyBuf = .bss:0x801953D0; // type:object size:0x1400
|
||||
ARInfo = .bss:0x801967E0; // type:object size:0x400 data:byte
|
||||
arqReq = .bss:0x80196BE0; // type:object size:0x20 scope:local
|
||||
|
|
|
|||
|
|
@ -4452,7 +4452,7 @@ lbl_80192160 = .bss:0x80191E00; // type:object size:0x100
|
|||
lbl_80192260 = .bss:0x80191F00; // type:object size:0x100
|
||||
wipeData = .bss:0x80192000; // type:object size:0x4C data:4byte
|
||||
winData = .bss:0x80192060; // type:object size:0x3000 data:byte
|
||||
winKey = .bss:0x80195060; // type:object size:0x10
|
||||
winKey = .bss:0x80195060; // type:object size:0x10 scope:local
|
||||
winComKeyBuf = .bss:0x80195070; // type:object size:0x1400
|
||||
ARInfo = .bss:0x80196480; // type:object size:0x400 scope:local data:byte
|
||||
arqReq = .bss:0x80196880; // type:object size:0x20 scope:local
|
||||
|
|
|
|||
|
|
@ -5547,7 +5547,7 @@ lbl_80192160 = .bss:0x801AF500; // type:object size:0x100
|
|||
lbl_80192260 = .bss:0x801AF600; // type:object size:0x100
|
||||
wipeData = .bss:0x801AF700; // type:object size:0x4C data:4byte
|
||||
winData = .bss:0x801AF760; // type:object size:0x3000 align:32 data:byte
|
||||
winKey = .bss:0x801B2760; // type:object size:0x10
|
||||
winKey = .bss:0x801B2760; // type:object size:0x10 scope:local
|
||||
winComKeyBuf = .bss:0x801B2770; // type:object size:0x1400
|
||||
mesWInsert = .bss:0x801B3B70; // type:object size:0x10 scope:local
|
||||
ARInfo = .bss:0x801B3B80; // type:object size:0x400 data:byte
|
||||
|
|
|
|||
|
|
@ -160,6 +160,7 @@ config.asflags = [
|
|||
"-mgekko",
|
||||
"--strip-local-absolute",
|
||||
"-I include",
|
||||
"-I libc",
|
||||
f"-I build/{config.version}/include",
|
||||
f"--defsym version={version_num}",
|
||||
]
|
||||
|
|
@ -192,6 +193,7 @@ cflags_base = [
|
|||
"-fp_contract on",
|
||||
"-str reuse",
|
||||
"-i include",
|
||||
"-i libc",
|
||||
"-i extern/musyx/include",
|
||||
f"-i build/{config.version}/include",
|
||||
"-multibyte",
|
||||
|
|
@ -270,6 +272,7 @@ cflags_musyx = [
|
|||
"-nodefaults",
|
||||
"-nosyspath",
|
||||
"-i include",
|
||||
"-i libc",
|
||||
"-i extern/musyx/include",
|
||||
"-inline auto",
|
||||
"-O4,p",
|
||||
|
|
|
|||
61
dol.def
Normal file
61
dol.def
Normal 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
1
extern/aurora
vendored
Submodule
|
|
@ -0,0 +1 @@
|
|||
Subproject commit d9de6603c79917a5353abd3a9cc26ec557ceee05
|
||||
2
extern/musyx
vendored
2
extern/musyx
vendored
|
|
@ -1 +1 @@
|
|||
Subproject commit a170f2ef4a3f51edb89bc792dff79d55b2c42a89
|
||||
Subproject commit a579f4d4abbac1c67fddf0d361291320f81a7b6c
|
||||
|
|
@ -29,10 +29,10 @@ typedef enum {
|
|||
DEMO_STAT_IO = 4
|
||||
} DEMO_STAT_DISP;
|
||||
|
||||
extern unsigned char DemoStatEnable;
|
||||
|
||||
void DEMOSetStats(DemoStatData * stat, unsigned long nstats, DEMO_STAT_DISP disp);
|
||||
void DEMOUpdateStats(unsigned char inc);
|
||||
void DEMOPrintStats(void);
|
||||
void DEMOUpdateStats(unsigned char inc);
|
||||
void DEMOPrintStats(void);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -20,8 +20,10 @@ void GXSetPointSize(u8 pointSize, GXTexOffset texOffsets);
|
|||
void GXEnableTexOffsets(GXTexCoordID coord, GXBool line_enable, GXBool point_enable);
|
||||
#ifdef TARGET_PC
|
||||
void GXSetArray(GXAttr attr, const void* data, u32 size, u8 stride);
|
||||
#define GXSETARRAY(attr, data, size, stride) GXSetArray((attr), (data), (size), (stride))
|
||||
#else
|
||||
void GXSetArray(GXAttr attr, const void* data, u8 stride);
|
||||
#define GXSETARRAY(attr, data, size, stride) GXSetArray((attr), (data), (stride))
|
||||
#endif
|
||||
void GXInvalidateVtxCache(void);
|
||||
|
||||
|
|
|
|||
|
|
@ -2,8 +2,9 @@
|
|||
#define _DOLPHIN_GXPRIV
|
||||
|
||||
#include "dolphin/gx.h"
|
||||
#include "dolphin/os.h"
|
||||
|
||||
#ifdef DEBUG
|
||||
#ifndef NDEBUG
|
||||
#define ASSERTLINE(line, cond) \
|
||||
((cond) || (OSPanic(__FILE__, line, "Failed assertion " #cond), 0))
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,11 @@
|
|||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#if defined(__MWERKS__) && !defined(GEKKO)
|
||||
#define GEKKO
|
||||
#endif
|
||||
|
||||
#ifndef GEKKO
|
||||
#define MTX_USE_C
|
||||
#undef MTX_USE_PS
|
||||
|
|
@ -302,6 +306,20 @@ void PSMTXMultS16VecArray(const Mtx m, const S16Vec* srcBase, Vec* dstBase, u32
|
|||
void PSMTXROMultS16VecArray(const ROMtx m, const S16Vec* srcBase, Vec* dstBase, u32 count);
|
||||
#endif
|
||||
|
||||
#ifdef MTX_USE_PS
|
||||
#define MTXReorder PSMTXReorder
|
||||
#define MTXROMultVecArray PSMTXROMultVecArray
|
||||
#define MTXROSkin2VecArray PSMTXROSkin2VecArray
|
||||
#define MTXROMultS16VecArray PSMTXROMultS16VecArray
|
||||
#define MTXMultS16VecArray PSMTXMultS16VecArray
|
||||
#else // MTX_USE_C
|
||||
#define MTXReorder C_MTXReorder
|
||||
#define MTXROMultVecArray C_MTXROMultVecArray
|
||||
#define MTXROSkin2VecArray C_MTXROSkin2VecArray
|
||||
#define MTXROMultS16VecArray C_MTXROMultS16VecArray
|
||||
#define MTXMultS16VecArray C_MTXMultS16VecArray
|
||||
#endif
|
||||
|
||||
void MTXInitStack(MtxStack* sPtr, u32 numMtx);
|
||||
MtxPtr MTXPush(MtxStack* sPtr, const Mtx m);
|
||||
MtxPtr MTXPushFwd(MtxStack* sPtr, const Mtx m);
|
||||
|
|
|
|||
|
|
@ -23,10 +23,15 @@ extern "C" {
|
|||
#endif
|
||||
typedef s64 OSTime;
|
||||
typedef u32 OSTick;
|
||||
#ifdef __MWERKS__
|
||||
u32 __OSBusClock AT_ADDRESS(OS_BASE_CACHED | 0x00F8); // sync with OSLoMem.h
|
||||
u32 __OSCoreClock AT_ADDRESS(OS_BASE_CACHED | 0x00FC); // sync with OSLoMem.h
|
||||
#define OS_BUS_CLOCK (u32) __OSBusClock
|
||||
#define OS_CORE_CLOCK __OSCoreClock
|
||||
#else
|
||||
#define OS_BUS_CLOCK 162000000ull
|
||||
#define OS_CORE_CLOCK 486000000ull
|
||||
#endif
|
||||
#define OS_TIMER_CLOCK (OS_BUS_CLOCK / 4)
|
||||
|
||||
#ifndef _DEBUG
|
||||
|
|
@ -57,8 +62,8 @@ u32 OSUncachedToCached(void *ucaddr);
|
|||
|
||||
#define OSDiffTick(tick1, tick0) ((s32)(tick1) - (s32)(tick0))
|
||||
|
||||
#define OSRoundUp32B(x) (((u32)(x) + 0x1F) & ~(0x1F))
|
||||
#define OSRoundDown32B(x) (((u32)(x)) & ~(0x1F))
|
||||
#define OSRoundUp32B(x) (((size_t)(x) + 0x1F) & ~(0x1F))
|
||||
#define OSRoundDown32B(x) (((size_t)(x)) & ~(0x1F))
|
||||
|
||||
#define OSRoundUp(x, align) (((x) + (align)-1) & (-(align)))
|
||||
#define OSRoundUpPtr(x, align) ((void*)((((u32)(x)) + (align)-1) & (~((align)-1))))
|
||||
|
|
|
|||
|
|
@ -9,17 +9,17 @@ extern "C" {
|
|||
typedef int OSHeapHandle;
|
||||
typedef void (*OSAllocVisitor)(void *obj, u32 size);
|
||||
void *OSInitAlloc(void *arenaStart, void *arenaEnd, int maxHeaps);
|
||||
OSHeapHandle OSCreateHeap(void *start, void *end);
|
||||
uintptr_t OSCreateHeap(void *start, void *end);
|
||||
void OSDestroyHeap(OSHeapHandle heap);
|
||||
void OSAddToHeap(OSHeapHandle heap, void *start, void *end);
|
||||
OSHeapHandle OSSetCurrentHeap(OSHeapHandle heap);
|
||||
void *OSAllocFromHeap(OSHeapHandle heap, u32 size);
|
||||
void *OSAllocFromHeap(int heap, unsigned long size);
|
||||
void *OSAllocFixed(void **rstart, void **rend);
|
||||
void OSFreeToHeap(OSHeapHandle heap, void *ptr);
|
||||
long OSCheckHeap(OSHeapHandle heap);
|
||||
void OSDumpHeap(OSHeapHandle heap);
|
||||
u32 OSReferentSize(void *ptr);
|
||||
void OSVisitAllocated(OSAllocVisitor visitor);
|
||||
unsigned long OSReferentSize(void *ptr);
|
||||
void OSVisitAllocated(void (*visitor)(void *, unsigned long));
|
||||
extern volatile OSHeapHandle __OSCurrHeap;
|
||||
#define OSAlloc(size) OSAllocFromHeap(__OSCurrHeap, (size))
|
||||
#define OSFree(ptr) OSFreeToHeap(__OSCurrHeap, (ptr))
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
#ifndef _DOLPHIN_OSFASTCAST
|
||||
#define _DOLPHIN_OSFASTCAST
|
||||
|
||||
#include "dolphin/types.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
|
@ -44,6 +46,7 @@ static inline void OSInitFastCast(void) {
|
|||
|
||||
static inline s16 __OSf32tos16(register f32 inF)
|
||||
{
|
||||
#ifdef __MWERKS__
|
||||
u32 tmp;
|
||||
register u32* tmpPtr = &tmp;
|
||||
register s16 out;
|
||||
|
|
@ -55,12 +58,16 @@ static inline s16 __OSf32tos16(register f32 inF)
|
|||
// clang-format on
|
||||
|
||||
return out;
|
||||
#else
|
||||
return (s16) inF;
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void OSf32tos16(f32 *f, s16 *out) { *out = __OSf32tos16(*f); }
|
||||
|
||||
static inline u8 __OSf32tou8(register f32 inF)
|
||||
{
|
||||
#ifdef __MWERKS__
|
||||
u32 tmp;
|
||||
register u32 *tmpPtr = &tmp;
|
||||
register u8 out;
|
||||
|
|
@ -72,12 +79,16 @@ static inline u8 __OSf32tou8(register f32 inF)
|
|||
// clang-format on
|
||||
|
||||
return out;
|
||||
#else
|
||||
return (u8)inF;
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void OSf32tou8(f32 *f, u8 *out) { *out = __OSf32tou8(*f); }
|
||||
|
||||
static inline s8 __OSf32tos8(register f32 inF)
|
||||
{
|
||||
#ifdef __MWERKS__
|
||||
u32 tmp;
|
||||
register u32 *tmpPtr = &tmp;
|
||||
register s8 out;
|
||||
|
|
@ -90,12 +101,16 @@ static inline s8 __OSf32tos8(register f32 inF)
|
|||
// clang-format on
|
||||
|
||||
return out;
|
||||
#else
|
||||
return (s8) inF;
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void OSf32tos8(f32 *f, s8 *out) { *out = __OSf32tos8(*f); }
|
||||
|
||||
static inline u16 __OSf32tou16(register f32 inF)
|
||||
{
|
||||
#ifdef __MWERKS__
|
||||
u32 tmp;
|
||||
register u32 *tmpPtr = &tmp;
|
||||
register u16 out;
|
||||
|
|
@ -107,11 +122,15 @@ static inline u16 __OSf32tou16(register f32 inF)
|
|||
// clang-format on
|
||||
|
||||
return out;
|
||||
#else
|
||||
return (u16) inF;
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void OSf32tou16(f32 *f, u16 *out) { *out = __OSf32tou16(*f); }
|
||||
|
||||
static inline float __OSs8tof32(register const s8* arg) {
|
||||
#ifdef __MWERKS__
|
||||
register float ret;
|
||||
|
||||
asm {
|
||||
|
|
@ -119,11 +138,15 @@ static inline float __OSs8tof32(register const s8* arg) {
|
|||
}
|
||||
|
||||
return ret;
|
||||
#else
|
||||
return (f32)*arg;
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void OSs8tof32(const s8* in, float* out) { *out = __OSs8tof32(in); }
|
||||
|
||||
static inline float __OSs16tof32(register const s16* arg) {
|
||||
#ifdef __MWERKS__
|
||||
register float ret;
|
||||
|
||||
asm {
|
||||
|
|
@ -131,11 +154,15 @@ static inline float __OSs16tof32(register const s16* arg) {
|
|||
}
|
||||
|
||||
return ret;
|
||||
#else
|
||||
return (f32)*arg;
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void OSs16tof32(const s16* in, float* out) { *out = __OSs16tof32(in); }
|
||||
|
||||
static inline float __OSu8tof32(register const u8* arg) {
|
||||
#ifdef __MWERKS__
|
||||
register float ret;
|
||||
|
||||
asm {
|
||||
|
|
@ -143,11 +170,15 @@ static inline float __OSu8tof32(register const u8* arg) {
|
|||
}
|
||||
|
||||
return ret;
|
||||
#else
|
||||
return (f32)*arg;
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void OSu8tof32(const u8* in, float* out) { *out = __OSu8tof32(in); }
|
||||
|
||||
static inline float __OSu16tof32(register const u16* arg) {
|
||||
#ifdef __MWERKS__
|
||||
register float ret;
|
||||
|
||||
asm {
|
||||
|
|
@ -155,6 +186,9 @@ static inline float __OSu16tof32(register const u16* arg) {
|
|||
}
|
||||
|
||||
return ret;
|
||||
#else
|
||||
return (f32)*arg;
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void OSu16tof32(const u16* in, float* out) { *out = __OSu16tof32(in); }
|
||||
|
|
|
|||
|
|
@ -20,6 +20,9 @@ typedef unsigned char u8;
|
|||
typedef unsigned short int u16;
|
||||
typedef unsigned long u32;
|
||||
typedef unsigned long long int u64;
|
||||
|
||||
typedef u32 size_t;
|
||||
typedef u32 uintptr_t;
|
||||
#endif
|
||||
|
||||
typedef volatile u8 vu8;
|
||||
|
|
@ -64,7 +67,7 @@ typedef int BOOL;
|
|||
#define NULL ((void *)0)
|
||||
#endif
|
||||
#endif
|
||||
#if !defined(__cplusplus) || __cplusplus < 201103L
|
||||
#if !defined(__cplusplus)
|
||||
#ifndef nullptr
|
||||
#define nullptr NULL
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ u32 VIGetTvFormat(void);
|
|||
void VISetNextFrameBuffer(void* fb);
|
||||
void VIWaitForRetrace(void);
|
||||
void VISetBlack(BOOL black);
|
||||
void VIConfigurePan(u16 xOrg, u16 yOrg, u16 width, u16 height);
|
||||
|
||||
#ifdef TARGET_PC
|
||||
void VISetWindowTitle(const char* title);
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@
|
|||
#include "math.h"
|
||||
#include "dolphin/mtx.h"
|
||||
|
||||
#define M_PI 3.141592653589793
|
||||
|
||||
typedef struct vec2f {
|
||||
float x;
|
||||
float y;
|
||||
|
|
@ -33,7 +35,7 @@ typedef struct vec2f {
|
|||
#define atan2d(y, x) (180.0*(atan2((y), (x)) / M_PI))
|
||||
|
||||
#ifndef __MWERKS__
|
||||
void HuSetVecF(Vec* arg0, f32 arg8, f32 arg9, f32 argA)
|
||||
void HuSetVecF(Vec *arg0, f32 arg8, f32 arg9, f32 argA);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
#include "game/flag.h"
|
||||
#include "version.h"
|
||||
|
||||
//HACK: to prevent prototype errors
|
||||
// HACK: to prevent prototype errors
|
||||
extern void HuPadRumbleAllStop(void);
|
||||
|
||||
typedef struct player_config {
|
||||
|
|
@ -17,12 +17,12 @@ typedef struct player_config {
|
|||
} PlayerConfig;
|
||||
|
||||
typedef struct system_state {
|
||||
/* 0x00 */ struct {
|
||||
/* 0x00 */ struct {
|
||||
u8 party : 1;
|
||||
u8 team : 1;
|
||||
};
|
||||
/* 0x01 */ u8 diff_story;
|
||||
/* 0x02 */ struct {
|
||||
/* 0x01 */ u8 diff_story;
|
||||
/* 0x02 */ struct {
|
||||
u16 bonus_star : 1;
|
||||
u16 explain_mg : 1;
|
||||
u16 show_com_mg : 1;
|
||||
|
|
@ -30,35 +30,35 @@ typedef struct system_state {
|
|||
u16 mess_speed : 2;
|
||||
u16 save_mode : 2;
|
||||
};
|
||||
/* 0x04 */ u8 turn;
|
||||
/* 0x05 */ u8 max_turn;
|
||||
/* 0x06 */ u8 star_flag;
|
||||
/* 0x07 */ u8 star_total;
|
||||
/* 0x08 */ struct {
|
||||
u8 star_pos : 3;
|
||||
u8 board : 5;
|
||||
};
|
||||
/* 0x09 */ s8 last5_effect;
|
||||
/* 0x0A */ s8 player_curr;
|
||||
/* 0x0B */ u8 storyCharBit;
|
||||
/* 0x0C */ s8 storyChar;
|
||||
/* 0x0E */ s16 block_pos;
|
||||
/* 0x10 */ u8 ATTRIBUTE_ALIGN(4) board_data[32];
|
||||
/* 0x30 */ u8 mess_delay;
|
||||
/* 0x31 */ struct {
|
||||
/* 0x04 */ u8 turn;
|
||||
/* 0x05 */ u8 max_turn;
|
||||
/* 0x06 */ u8 star_flag;
|
||||
/* 0x07 */ u8 star_total;
|
||||
/* 0x08 */ struct {
|
||||
u8 star_pos : 3;
|
||||
u8 board : 5;
|
||||
};
|
||||
/* 0x09 */ s8 last5_effect;
|
||||
/* 0x0A */ s8 player_curr;
|
||||
/* 0x0B */ u8 storyCharBit;
|
||||
/* 0x0C */ s8 storyChar;
|
||||
/* 0x0E */ s16 block_pos;
|
||||
/* 0x10 */ u8 ATTRIBUTE_ALIGN(4) board_data[32];
|
||||
/* 0x30 */ u8 mess_delay;
|
||||
/* 0x31 */ struct {
|
||||
u8 bowser_loss : 4;
|
||||
u8 bowser_event : 4;
|
||||
};
|
||||
/* 0x32 */ s8 lucky_value;
|
||||
/* 0x34 */ u16 mg_next;
|
||||
/* 0x36 */ s16 mg_type;
|
||||
/* 0x38 */ u16 unk_38;
|
||||
/* 0x3A */ u8 flag[3][16];
|
||||
/* 0x6A */ u8 unk_6A[0x72];
|
||||
} SystemState; //8018fcf8, sizeof 0xDC
|
||||
/* 0x32 */ s8 lucky_value;
|
||||
/* 0x34 */ u16 mg_next;
|
||||
/* 0x36 */ s16 mg_type;
|
||||
/* 0x38 */ u16 unk_38;
|
||||
/* 0x3A */ u8 flag[3][16];
|
||||
/* 0x6A */ u8 unk_6A[0x72];
|
||||
} SystemState; // 8018fcf8, sizeof 0xDC
|
||||
|
||||
typedef struct player_state {
|
||||
/* 0x00 */ struct {
|
||||
/* 0x00 */ struct {
|
||||
u16 diff : 2;
|
||||
u16 com : 1;
|
||||
u16 character : 4;
|
||||
|
|
@ -66,15 +66,15 @@ typedef struct player_state {
|
|||
u16 draw_ticket : 1;
|
||||
u16 ticket_player : 6;
|
||||
};
|
||||
/* 0x02 */ struct {
|
||||
/* 0x02 */ struct {
|
||||
u8 team : 1;
|
||||
u8 spark : 1;
|
||||
u8 player_idx : 2;
|
||||
};
|
||||
/* 0x03 */ s8 handicap;
|
||||
/* 0x04 */ s8 port;
|
||||
/* 0x05 */ s8 items[3];
|
||||
/* 0x08 */ struct {
|
||||
/* 0x03 */ s8 handicap;
|
||||
/* 0x04 */ s8 port;
|
||||
/* 0x05 */ s8 items[3];
|
||||
/* 0x08 */ struct {
|
||||
u16 color : 2;
|
||||
u16 moving : 1;
|
||||
u16 jump : 1;
|
||||
|
|
@ -85,30 +85,30 @@ typedef struct player_state {
|
|||
u16 bowser_suit : 1;
|
||||
u16 team_backup : 1;
|
||||
};
|
||||
/* 0x0A */ s8 roll;
|
||||
/* 0x0C */ s16 space_curr;
|
||||
/* 0x0E */ s16 space_prev;
|
||||
/* 0x10 */ s16 space_next;
|
||||
/* 0x12 */ s16 space_shock;
|
||||
/* 0x14 */ s8 blue_count;
|
||||
/* 0x15 */ s8 red_count;
|
||||
/* 0x16 */ s8 question_count;
|
||||
/* 0x17 */ s8 fortune_count;
|
||||
/* 0x18 */ s8 bowser_count;
|
||||
/* 0x19 */ s8 battle_count;
|
||||
/* 0x1A */ s8 mushroom_count;
|
||||
/* 0x1B */ s8 warp_count;
|
||||
/* 0x1C */ s16 coins;
|
||||
/* 0x1E */ s16 coins_mg;
|
||||
/* 0x20 */ s16 coins_total;
|
||||
/* 0x22 */ s16 coins_max;
|
||||
/* 0x24 */ s16 coins_battle;
|
||||
/* 0x26 */ s16 coin_collect;
|
||||
/* 0x28 */ s16 coin_win;
|
||||
/* 0x2A */ s16 stars;
|
||||
/* 0x2C */ s16 stars_max;
|
||||
/* 0x2E */ char unk_2E[2];
|
||||
} PlayerState; //size of 0x30
|
||||
/* 0x0A */ s8 roll;
|
||||
/* 0x0C */ s16 space_curr;
|
||||
/* 0x0E */ s16 space_prev;
|
||||
/* 0x10 */ s16 space_next;
|
||||
/* 0x12 */ s16 space_shock;
|
||||
/* 0x14 */ s8 blue_count;
|
||||
/* 0x15 */ s8 red_count;
|
||||
/* 0x16 */ s8 question_count;
|
||||
/* 0x17 */ s8 fortune_count;
|
||||
/* 0x18 */ s8 bowser_count;
|
||||
/* 0x19 */ s8 battle_count;
|
||||
/* 0x1A */ s8 mushroom_count;
|
||||
/* 0x1B */ s8 warp_count;
|
||||
/* 0x1C */ s16 coins;
|
||||
/* 0x1E */ s16 coins_mg;
|
||||
/* 0x20 */ s16 coins_total;
|
||||
/* 0x22 */ s16 coins_max;
|
||||
/* 0x24 */ s16 coins_battle;
|
||||
/* 0x26 */ s16 coin_collect;
|
||||
/* 0x28 */ s16 coin_win;
|
||||
/* 0x2A */ s16 stars;
|
||||
/* 0x2C */ s16 stars_max;
|
||||
/* 0x2E */ char unk_2E[2];
|
||||
} PlayerState; // size of 0x30
|
||||
|
||||
typedef struct pause_backup_config {
|
||||
u8 explain_mg : 1;
|
||||
|
|
@ -119,21 +119,21 @@ typedef struct pause_backup_config {
|
|||
} PauseBackupConfig;
|
||||
|
||||
typedef struct game_stat {
|
||||
/* 0x0 */ s16 unk_00;
|
||||
/* 0x2 */ u8 language;
|
||||
/* 0x3 */ u8 sound_mode;
|
||||
/* 0x4 */ s8 rumble;
|
||||
/* 0x6 */ u16 total_stars;
|
||||
/* 0x8 */ OSTime create_time;
|
||||
/* 0x10 */ u32 mg_custom[2];
|
||||
/* 0x18 */ u32 mg_avail[2];
|
||||
/* 0x20 */ u32 mg_record[15];
|
||||
/* 0x5C */ u8 board_win_count[9][8];
|
||||
/* 0xA4 */ u8 board_play_count[9];
|
||||
/* 0xAE */ u16 board_max_stars[9];
|
||||
/* 0xC0 */ u16 board_max_coins[9];
|
||||
/* 0xD2 */ u8 present[60];
|
||||
/* 0x10E */ struct {
|
||||
/* 0x0 */ s16 unk_00;
|
||||
/* 0x2 */ u8 language;
|
||||
/* 0x3 */ u8 sound_mode;
|
||||
/* 0x4 */ s8 rumble;
|
||||
/* 0x6 */ u16 total_stars;
|
||||
/* 0x8 */ OSTime create_time;
|
||||
/* 0x10 */ u32 mg_custom[2];
|
||||
/* 0x18 */ u32 mg_avail[2];
|
||||
/* 0x20 */ u32 mg_record[15];
|
||||
/* 0x5C */ u8 board_win_count[9][8];
|
||||
/* 0xA4 */ u8 board_play_count[9];
|
||||
/* 0xAE */ u16 board_max_stars[9];
|
||||
/* 0xC0 */ u16 board_max_coins[9];
|
||||
/* 0xD2 */ u8 present[60];
|
||||
/* 0x10E */ struct {
|
||||
u8 story_continue : 1;
|
||||
u8 party_continue : 1;
|
||||
u8 open_w06 : 1;
|
||||
|
|
@ -141,17 +141,17 @@ typedef struct game_stat {
|
|||
u8 customPackEnable : 1;
|
||||
u8 musicAllF : 1;
|
||||
};
|
||||
/* 0x10F */ PauseBackupConfig story_pause;
|
||||
/* 0x110 */ PauseBackupConfig party_pause;
|
||||
/* 0x10F */ PauseBackupConfig story_pause;
|
||||
/* 0x110 */ PauseBackupConfig party_pause;
|
||||
} GameStat;
|
||||
|
||||
extern s16 GwLanguage;
|
||||
extern s16 GwLanguageSave;
|
||||
SHARED_SYM extern s16 GwLanguage;
|
||||
SHARED_SYM extern s16 GwLanguageSave;
|
||||
|
||||
extern PlayerConfig GWPlayerCfg[4];
|
||||
extern PlayerState GWPlayer[4];
|
||||
extern SystemState GWSystem;
|
||||
extern GameStat GWGameStat;
|
||||
SHARED_SYM extern PlayerConfig GWPlayerCfg[4];
|
||||
SHARED_SYM extern PlayerState GWPlayer[4];
|
||||
SHARED_SYM extern SystemState GWSystem;
|
||||
SHARED_SYM extern GameStat GWGameStat;
|
||||
|
||||
static inline s32 GWPlayerCfgGroupGet(s32 player)
|
||||
{
|
||||
|
|
@ -196,7 +196,8 @@ static inline s32 GWRumbleGet(void)
|
|||
static inline void GWRumbleSet(s32 value)
|
||||
{
|
||||
GWGameStat.rumble = value;
|
||||
if(value == 0) {
|
||||
if (value == 0) {
|
||||
// TODO PC: get rumble working
|
||||
HuPadRumbleAllStop();
|
||||
}
|
||||
}
|
||||
|
|
@ -206,7 +207,6 @@ static inline s32 GWBonusStarGet(void)
|
|||
return GWSystem.bonus_star;
|
||||
}
|
||||
|
||||
|
||||
static inline s32 GWMGExplainGet(void)
|
||||
{
|
||||
return GWSystem.explain_mg;
|
||||
|
|
@ -250,9 +250,9 @@ static inline s32 GWMessSpeedGet(void)
|
|||
|
||||
static inline void GWMessSpeedSet(s32 value)
|
||||
{
|
||||
#if VERSION_NTSC
|
||||
#if VERSION_NTSC
|
||||
GWSystem.mess_speed = value;
|
||||
switch(value) {
|
||||
switch (value) {
|
||||
case 0:
|
||||
GWSystem.mess_delay = 16;
|
||||
break;
|
||||
|
|
@ -265,9 +265,9 @@ static inline void GWMessSpeedSet(s32 value)
|
|||
GWSystem.mess_delay = 32;
|
||||
break;
|
||||
}
|
||||
#else
|
||||
#else
|
||||
GWSystem.mess_speed = value;
|
||||
switch(value) {
|
||||
switch (value) {
|
||||
case 0:
|
||||
GWSystem.mess_delay = 32;
|
||||
break;
|
||||
|
|
@ -275,7 +275,7 @@ static inline void GWMessSpeedSet(s32 value)
|
|||
case 2:
|
||||
GWSystem.mess_delay = 64;
|
||||
break;
|
||||
|
||||
|
||||
case 1:
|
||||
GWSystem.mess_delay = 48;
|
||||
break;
|
||||
|
|
@ -284,7 +284,7 @@ static inline void GWMessSpeedSet(s32 value)
|
|||
GWSystem.mess_delay = 120;
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void GWSaveModeSet(s32 value)
|
||||
|
|
@ -367,7 +367,7 @@ static inline void GWPlayerCoinWinSet(s32 player, s16 value)
|
|||
}
|
||||
}
|
||||
|
||||
#define GWPlayerCoinWinAdd(player, value) GWPlayerCoinWinSet((player), GWPlayerCoinWinGet((player))+(value))
|
||||
#define GWPlayerCoinCollectAdd(player, value) GWPlayerCoinCollectSet((player), (s32)GWPlayerCoinCollectGet((player))+(value))
|
||||
#define GWPlayerCoinWinAdd(player, value) GWPlayerCoinWinSet((player), GWPlayerCoinWinGet((player)) + (value))
|
||||
#define GWPlayerCoinCollectAdd(player, value) GWPlayerCoinCollectSet((player), (s32)GWPlayerCoinCollectGet((player)) + (value))
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -56,7 +56,6 @@ typedef struct hsf_draw_object {
|
|||
void Hu3DDrawPreInit(void);
|
||||
void Hu3DDraw(ModelData *arg0, Mtx arg1, Vec *arg2);
|
||||
s32 ObjCullCheck(HsfData *arg0, HsfObject *arg1, Mtx arg2);
|
||||
void FaceDraw(HsfDrawObject *arg0, HsfFace *arg1);
|
||||
void Hu3DDrawPost(void);
|
||||
void MakeDisplayList(s16 arg0, u32 arg1);
|
||||
HsfConstData *ObjConstantMake(HsfObject *arg0, u32 arg1);
|
||||
|
|
|
|||
|
|
@ -1,9 +1,159 @@
|
|||
#ifndef _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"
|
||||
|
||||
typedef struct jump_buf {
|
||||
typedef struct jmp_buf {
|
||||
u32 lr;
|
||||
u32 cr;
|
||||
u32 sp;
|
||||
|
|
@ -16,4 +166,11 @@ typedef struct jump_buf {
|
|||
s32 gcsetjmp(jmp_buf *jump);
|
||||
s32 gclongjmp(jmp_buf *jump, s32 status);
|
||||
|
||||
#define SETJMP(jump) gcsetjmp(&(jump))
|
||||
#define LONGJMP(jump, status) gclongjmp(&(jump), (status))
|
||||
|
||||
#define SETJMP_SET_IP(jump, func) jump.lr = (u32)func
|
||||
#define SETJMP_SET_SP(jump, stack_ptr) jump.sp = (u32)stack_ptr
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -28,14 +28,14 @@ u32 HuMemHeapSizeGet(HeapID heap);
|
|||
void *HuMemHeapPtrGet(HeapID heap);
|
||||
|
||||
void *HuMemHeapInit(void *ptr, s32 size);
|
||||
void *HuMemMemoryAlloc(void *heap_ptr, s32 size, u32 retaddr);
|
||||
void *HuMemMemoryAllocNum(void *heap_ptr, s32 size, u32 num, u32 retaddr);
|
||||
void HuMemMemoryFree(void *ptr, u32 retaddr);
|
||||
void HuMemMemoryFreeNum(void *heap_ptr, u32 num, u32 retaddr);
|
||||
void *HuMemMemoryAlloc(void *heap_ptr, s32 size, uintptr_t retaddr);
|
||||
void *HuMemMemoryAllocNum(void *heap_ptr, s32 size, u32 num, uintptr_t retaddr);
|
||||
void HuMemMemoryFree(void *ptr, uintptr_t retaddr);
|
||||
void HuMemMemoryFreeNum(void *heap_ptr, u32 num, uintptr_t retaddr);
|
||||
s32 HuMemUsedMemorySizeGet(void *heap_ptr);
|
||||
s32 HuMemUsedMemoryBlockGet(void *heap_ptr);
|
||||
s32 HuMemMemorySizeGet(void *ptr);
|
||||
s32 HuMemMemoryAllocSizeGet(s32 size);
|
||||
void HuMemHeapDump(void *heap_ptr, s16 status);
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -185,6 +185,7 @@ int msmMusPlay(int musId, MSM_MUSPARAM *musParam);
|
|||
s32 msmMusStop(int musNo, s32 speed);
|
||||
void msmMusPauseAll(BOOL pause, s32 speed);
|
||||
s32 msmMusPause(int musNo, BOOL pause, s32 speed);
|
||||
void msmMusFdoutEnd(void);
|
||||
s32 msmMusGetMidiCtrl(int musNo, s32 channel, s32 ctrl);
|
||||
void msmMusStopAll(BOOL checkGrp, s32 speed);
|
||||
s32 msmMusGetStatus(int musNo);
|
||||
|
|
|
|||
|
|
@ -5,6 +5,10 @@
|
|||
#include "game/process.h"
|
||||
#include "game/dvd.h"
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
#define OM_DLL_MAX 20
|
||||
|
||||
#define OVL_DEFINE(name, path) name,
|
||||
|
|
@ -60,9 +64,14 @@ typedef struct om_obj_data {
|
|||
|
||||
typedef struct om_dll_data {
|
||||
char *name;
|
||||
#if _WIN32
|
||||
HMODULE hModule;
|
||||
#else
|
||||
OSModuleHeader *module;
|
||||
void *bss;
|
||||
s32 ret;
|
||||
#endif
|
||||
|
||||
} omDllData;
|
||||
|
||||
void omMasterInit(s32 prio, FileListEntry *ovl_list, s32 ovl_count, OverlayID start_ovl);
|
||||
|
|
@ -112,26 +121,26 @@ void omSysPauseCtrl(s16 flag);
|
|||
extern omObjData *omDBGSysKeyObj;
|
||||
extern Process *omwatchproc;
|
||||
extern OverlayID omnextovl;
|
||||
extern OverlayID omcurovl;
|
||||
SHARED_SYM extern OverlayID omcurovl;
|
||||
extern s32 omcurdll;
|
||||
extern s32 omovlhisidx;
|
||||
extern s32 omovlevtno;
|
||||
SHARED_SYM extern s32 omovlhisidx;
|
||||
SHARED_SYM extern s32 omovlevtno;
|
||||
extern s32 omnextovlevtno;
|
||||
extern u32 omovlstat;
|
||||
SHARED_SYM extern u32 omovlstat;
|
||||
extern char omUPauseFlag;
|
||||
extern s16 omSysExitReq;
|
||||
SHARED_SYM extern s16 omSysExitReq;
|
||||
extern s16 omdispinfo;
|
||||
extern u8 omSysPauseEnableFlag;
|
||||
extern OverlayID omprevovl;
|
||||
|
||||
extern omDllData *omDLLinfoTbl[OM_DLL_MAX];
|
||||
|
||||
extern Vec CRot;
|
||||
extern Vec Center;
|
||||
extern float CZoom;
|
||||
extern Vec CRotM[16];
|
||||
extern Vec CenterM[16];
|
||||
extern float CZoomM[16];
|
||||
extern s16 omDBGMenuButton;
|
||||
SHARED_SYM extern Vec CRot;
|
||||
SHARED_SYM extern Vec Center;
|
||||
SHARED_SYM extern float CZoom;
|
||||
SHARED_SYM extern Vec CRotM[16];
|
||||
SHARED_SYM extern Vec CenterM[16];
|
||||
SHARED_SYM extern float CZoomM[16];
|
||||
SHARED_SYM extern s16 omDBGMenuButton;
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -2,23 +2,24 @@
|
|||
#define _GAME_PAD_H
|
||||
|
||||
#include "dolphin.h"
|
||||
#include "version.h"
|
||||
|
||||
#define PAD_BUTTON_DIR (PAD_BUTTON_LEFT | PAD_BUTTON_RIGHT | PAD_BUTTON_UP | PAD_BUTTON_DOWN)
|
||||
|
||||
#define PAD_BUTTON_TRIGGER_L 0x4000
|
||||
#define PAD_BUTTON_TRIGGER_R 0x2000
|
||||
|
||||
extern u16 HuPadBtn[4];
|
||||
extern u16 HuPadBtnDown[4];
|
||||
extern u16 HuPadBtnRep[4];
|
||||
extern s8 HuPadStkX[4];
|
||||
extern s8 HuPadStkY[4];
|
||||
extern s8 HuPadSubStkX[4];
|
||||
extern s8 HuPadSubStkY[4];
|
||||
extern u8 HuPadTrigL[4];
|
||||
extern u8 HuPadTrigR[4];
|
||||
extern u8 HuPadDStk[4];
|
||||
extern u8 HuPadDStkRep[4];
|
||||
SHARED_SYM extern u16 HuPadBtn[4];
|
||||
SHARED_SYM extern u16 HuPadBtnDown[4];
|
||||
SHARED_SYM extern u16 HuPadBtnRep[4];
|
||||
SHARED_SYM extern s8 HuPadStkX[4];
|
||||
SHARED_SYM extern s8 HuPadStkY[4];
|
||||
SHARED_SYM extern s8 HuPadSubStkX[4];
|
||||
SHARED_SYM extern s8 HuPadSubStkY[4];
|
||||
SHARED_SYM extern u8 HuPadTrigL[4];
|
||||
SHARED_SYM extern u8 HuPadTrigR[4];
|
||||
SHARED_SYM extern u8 HuPadDStk[4];
|
||||
SHARED_SYM extern u8 HuPadDStkRep[4];
|
||||
extern s8 HuPadErr[4];
|
||||
extern u16 _PadBtn[4];
|
||||
extern u16 _PadBtnDown[4];
|
||||
|
|
@ -32,4 +33,4 @@ void HuPadRumbleAllStop(void);
|
|||
s16 HuPadStatGet(s16 pad);
|
||||
u32 HuPadRumbleGet(void);
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1,9 +1,14 @@
|
|||
#ifndef _GAME_PROCESS_H
|
||||
#define _GAME_PROCESS_H
|
||||
|
||||
#include "game/jmp.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
#include "game/jmp.h"
|
||||
|
||||
#ifdef TARGET_PC
|
||||
#include <stdio.h>
|
||||
#endif
|
||||
|
||||
#define PROCESS_STAT_PAUSE 0x1
|
||||
#define PROCESS_STAT_UPAUSE 0x2
|
||||
#define PROCESS_STAT_PAUSE_EN 0x4
|
||||
|
|
@ -50,4 +55,4 @@ void HuPrcResetStat(Process *process, u16 value);
|
|||
void HuPrcAllPause(s32 flag);
|
||||
void HuPrcAllUPause(s32 flag);
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
|
|
|||
9
include/game/sreset.h
Normal file
9
include/game/sreset.h
Normal 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
|
||||
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
#include "game/animdata.h"
|
||||
#include "dolphin.h"
|
||||
#include "version.h"
|
||||
|
||||
#define MAKE_MESSID(bank, mess) (((bank) << 16)+(mess))
|
||||
#define MAKE_MESSID_PTR(ptr) ((u32)(ptr))
|
||||
|
|
@ -75,8 +76,8 @@ typedef struct {
|
|||
/* 0x160 */ u8 ATTRIBUTE_ALIGN(32) mess_pal[10][3];
|
||||
} WindowData; // Size 0x180
|
||||
|
||||
extern WindowData winData[32];
|
||||
extern void *messDataPtr;
|
||||
SHARED_SYM extern WindowData winData[32];
|
||||
SHARED_SYM extern void *messDataPtr;
|
||||
|
||||
void HuWindowInit(void);
|
||||
void HuWinInit(s32 mess_data_no);
|
||||
|
|
@ -139,6 +140,4 @@ void HuWinExCleanup(s16 window);
|
|||
void HuWinExAnimPopIn(s16 window, s16 portrait);
|
||||
void *MessData_MesPtrGet(void *data, u32 index);
|
||||
|
||||
extern void *messDataPtr;
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
#define _GAME_WIPE_H
|
||||
|
||||
#include "dolphin.h"
|
||||
#include "version.h"
|
||||
|
||||
#define WIPE_TYPE_PREV -1
|
||||
#define WIPE_TYPE_NORMAL 0
|
||||
|
|
@ -37,7 +38,7 @@ void WipeCreate(s16 mode, s16 type, s16 duration);
|
|||
void WipeColorSet(u8 r, u8 g, u8 b);
|
||||
u8 WipeStatGet(void);
|
||||
|
||||
extern WipeState wipeData;
|
||||
SHARED_SYM extern WipeState wipeData;
|
||||
extern BOOL wipeFadeInF;
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1,108 +1,108 @@
|
|||
#include "version.h"
|
||||
|
||||
OVL_DEFINE(OVL__MINI, "dll/_minigameDLL.rel")
|
||||
OVL_DEFINE(OVL_BOOT, "dll/bootdll.rel")
|
||||
OVL_DEFINE(OVL_E3SETUP, "dll/e3setupDLL.rel")
|
||||
OVL_DEFINE(OVL_INST, "dll/instdll.rel")
|
||||
OVL_DEFINE(OVL_M300, "dll/m300dll.rel")
|
||||
OVL_DEFINE(OVL_M302, "dll/m302dll.rel")
|
||||
OVL_DEFINE(OVL_M303, "dll/m303dll.rel")
|
||||
OVL_DEFINE(OVL_M330, "dll/m330dll.rel")
|
||||
OVL_DEFINE(OVL_M333, "dll/m333dll.rel")
|
||||
OVL_DEFINE(OVL_M401, "dll/m401dll.rel")
|
||||
OVL_DEFINE(OVL_M402, "dll/m402dll.rel")
|
||||
OVL_DEFINE(OVL_M403, "dll/m403dll.rel")
|
||||
OVL_DEFINE(OVL_M404, "dll/m404dll.rel")
|
||||
OVL_DEFINE(OVL_M405, "dll/m405dll.rel")
|
||||
OVL_DEFINE(OVL_M406, "dll/m406dll.rel")
|
||||
OVL_DEFINE(OVL_M407, "dll/m407dll.rel")
|
||||
OVL_DEFINE(OVL_M408, "dll/m408dll.rel")
|
||||
OVL_DEFINE(OVL_M409, "dll/m409dll.rel")
|
||||
OVL_DEFINE(OVL_M410, "dll/m410dll.rel")
|
||||
OVL_DEFINE(OVL_M411, "dll/m411dll.rel")
|
||||
OVL_DEFINE(OVL_M412, "dll/m412dll.rel")
|
||||
OVL_DEFINE(OVL_M413, "dll/m413dll.rel")
|
||||
OVL_DEFINE(OVL_M414, "dll/m414dll.rel")
|
||||
OVL_DEFINE(OVL_M415, "dll/m415dll.rel")
|
||||
OVL_DEFINE(OVL_M416, "dll/m416dll.rel")
|
||||
OVL_DEFINE(OVL_M417, "dll/m417dll.rel")
|
||||
OVL_DEFINE(OVL_M418, "dll/m418dll.rel")
|
||||
OVL_DEFINE(OVL_M419, "dll/m419dll.rel")
|
||||
OVL_DEFINE(OVL_M420, "dll/m420dll.rel")
|
||||
OVL_DEFINE(OVL_M421, "dll/m421dll.rel")
|
||||
OVL_DEFINE(OVL_M422, "dll/m422dll.rel")
|
||||
OVL_DEFINE(OVL_M423, "dll/m423dll.rel")
|
||||
OVL_DEFINE(OVL_M424, "dll/m424dll.rel")
|
||||
OVL_DEFINE(OVL_M425, "dll/m425dll.rel")
|
||||
OVL_DEFINE(OVL_M426, "dll/m426dll.rel")
|
||||
OVL_DEFINE(OVL_M427, "dll/m427dll.rel")
|
||||
OVL_DEFINE(OVL_M428, "dll/m428dll.rel")
|
||||
OVL_DEFINE(OVL_M429, "dll/m429dll.rel")
|
||||
OVL_DEFINE(OVL_M430, "dll/m430dll.rel")
|
||||
OVL_DEFINE(OVL_M431, "dll/m431dll.rel")
|
||||
OVL_DEFINE(OVL_M432, "dll/m432dll.rel")
|
||||
OVL_DEFINE(OVL_M433, "dll/m433dll.rel")
|
||||
OVL_DEFINE(OVL_M434, "dll/m434dll.rel")
|
||||
OVL_DEFINE(OVL_M435, "dll/m435dll.rel")
|
||||
OVL_DEFINE(OVL_M436, "dll/m436dll.rel")
|
||||
OVL_DEFINE(OVL_M437, "dll/m437dll.rel")
|
||||
OVL_DEFINE(OVL_M438, "dll/m438dll.rel")
|
||||
OVL_DEFINE(OVL_M439, "dll/m439dll.rel")
|
||||
OVL_DEFINE(OVL_M440, "dll/m440dll.rel")
|
||||
OVL_DEFINE(OVL_M441, "dll/m441dll.rel")
|
||||
OVL_DEFINE(OVL_M442, "dll/m442dll.rel")
|
||||
OVL_DEFINE(OVL_M443, "dll/m443dll.rel")
|
||||
OVL_DEFINE(OVL_M444, "dll/m444dll.rel")
|
||||
OVL_DEFINE(OVL_M445, "dll/m445dll.rel")
|
||||
OVL_DEFINE(OVL_M446, "dll/m446dll.rel")
|
||||
OVL_DEFINE(OVL_M447, "dll/m447dll.rel")
|
||||
OVL_DEFINE(OVL_M448, "dll/m448dll.rel")
|
||||
OVL_DEFINE(OVL_M449, "dll/m449dll.rel")
|
||||
OVL_DEFINE(OVL_M450, "dll/m450dll.rel")
|
||||
OVL_DEFINE(OVL_M451, "dll/m451dll.rel")
|
||||
OVL_DEFINE(OVL_M453, "dll/m453dll.rel")
|
||||
OVL_DEFINE(OVL_M455, "dll/m455dll.rel")
|
||||
OVL_DEFINE(OVL_M456, "dll/m456dll.rel")
|
||||
OVL_DEFINE(OVL_M457, "dll/m457dll.rel")
|
||||
OVL_DEFINE(OVL_M458, "dll/m458dll.rel")
|
||||
OVL_DEFINE(OVL_M459, "dll/m459dll.rel")
|
||||
OVL_DEFINE(OVL_M460, "dll/m460dll.rel")
|
||||
OVL_DEFINE(OVL_M461, "dll/m461dll.rel")
|
||||
OVL_DEFINE(OVL_M462, "dll/m462dll.rel")
|
||||
OVL_DEFINE(OVL_M463, "dll/m463dll.rel")
|
||||
OVL_DEFINE(OVL_MENT, "dll/mentdll.rel")
|
||||
OVL_DEFINE(OVL__MINI, "_minigameDLL")
|
||||
OVL_DEFINE(OVL_BOOT, "bootdll")
|
||||
OVL_DEFINE(OVL_E3SETUP, "e3setupDLL")
|
||||
OVL_DEFINE(OVL_INST, "instdll")
|
||||
OVL_DEFINE(OVL_M300, "m300dll")
|
||||
OVL_DEFINE(OVL_M302, "m302dll")
|
||||
OVL_DEFINE(OVL_M303, "m303dll")
|
||||
OVL_DEFINE(OVL_M330, "m330dll")
|
||||
OVL_DEFINE(OVL_M333, "m333dll")
|
||||
OVL_DEFINE(OVL_M401, "m401dll")
|
||||
OVL_DEFINE(OVL_M402, "m402dll")
|
||||
OVL_DEFINE(OVL_M403, "m403dll")
|
||||
OVL_DEFINE(OVL_M404, "m404dll")
|
||||
OVL_DEFINE(OVL_M405, "m405dll")
|
||||
OVL_DEFINE(OVL_M406, "m406dll")
|
||||
OVL_DEFINE(OVL_M407, "m407dll")
|
||||
OVL_DEFINE(OVL_M408, "m408dll")
|
||||
OVL_DEFINE(OVL_M409, "m409dll")
|
||||
OVL_DEFINE(OVL_M410, "m410dll")
|
||||
OVL_DEFINE(OVL_M411, "m411dll")
|
||||
OVL_DEFINE(OVL_M412, "m412dll")
|
||||
OVL_DEFINE(OVL_M413, "m413dll")
|
||||
OVL_DEFINE(OVL_M414, "m414dll")
|
||||
OVL_DEFINE(OVL_M415, "m415dll")
|
||||
OVL_DEFINE(OVL_M416, "m416dll")
|
||||
OVL_DEFINE(OVL_M417, "m417dll")
|
||||
OVL_DEFINE(OVL_M418, "m418dll")
|
||||
OVL_DEFINE(OVL_M419, "m419dll")
|
||||
OVL_DEFINE(OVL_M420, "m420dll")
|
||||
OVL_DEFINE(OVL_M421, "m421dll")
|
||||
OVL_DEFINE(OVL_M422, "m422dll")
|
||||
OVL_DEFINE(OVL_M423, "m423dll")
|
||||
OVL_DEFINE(OVL_M424, "m424dll")
|
||||
OVL_DEFINE(OVL_M425, "m425dll")
|
||||
OVL_DEFINE(OVL_M426, "m426dll")
|
||||
OVL_DEFINE(OVL_M427, "m427dll")
|
||||
OVL_DEFINE(OVL_M428, "m428dll")
|
||||
OVL_DEFINE(OVL_M429, "m429dll")
|
||||
OVL_DEFINE(OVL_M430, "m430dll")
|
||||
OVL_DEFINE(OVL_M431, "m431dll")
|
||||
OVL_DEFINE(OVL_M432, "m432dll")
|
||||
OVL_DEFINE(OVL_M433, "m433dll")
|
||||
OVL_DEFINE(OVL_M434, "m434dll")
|
||||
OVL_DEFINE(OVL_M435, "m435dll")
|
||||
OVL_DEFINE(OVL_M436, "m436dll")
|
||||
OVL_DEFINE(OVL_M437, "m437dll")
|
||||
OVL_DEFINE(OVL_M438, "m438dll")
|
||||
OVL_DEFINE(OVL_M439, "m439dll")
|
||||
OVL_DEFINE(OVL_M440, "m440dll")
|
||||
OVL_DEFINE(OVL_M441, "m441dll")
|
||||
OVL_DEFINE(OVL_M442, "m442dll")
|
||||
OVL_DEFINE(OVL_M443, "m443dll")
|
||||
OVL_DEFINE(OVL_M444, "m444dll")
|
||||
OVL_DEFINE(OVL_M445, "m445dll")
|
||||
OVL_DEFINE(OVL_M446, "m446dll")
|
||||
OVL_DEFINE(OVL_M447, "m447dll")
|
||||
OVL_DEFINE(OVL_M448, "m448dll")
|
||||
OVL_DEFINE(OVL_M449, "m449dll")
|
||||
OVL_DEFINE(OVL_M450, "m450dll")
|
||||
OVL_DEFINE(OVL_M451, "m451dll")
|
||||
OVL_DEFINE(OVL_M453, "m453dll")
|
||||
OVL_DEFINE(OVL_M455, "m455dll")
|
||||
OVL_DEFINE(OVL_M456, "m456dll")
|
||||
OVL_DEFINE(OVL_M457, "m457dll")
|
||||
OVL_DEFINE(OVL_M458, "m458dll")
|
||||
OVL_DEFINE(OVL_M459, "m459dll")
|
||||
OVL_DEFINE(OVL_M460, "m460dll")
|
||||
OVL_DEFINE(OVL_M461, "m461dll")
|
||||
OVL_DEFINE(OVL_M462, "m462dll")
|
||||
OVL_DEFINE(OVL_M463, "m463dll")
|
||||
OVL_DEFINE(OVL_MENT, "mentdll")
|
||||
#if VERSION_JP
|
||||
OVL_DEFINE(OVL_MGMODE, "dll/mgmodedll.rel")
|
||||
OVL_DEFINE(OVL_MODELTEST, "dll/modeltestdll.rel")
|
||||
OVL_DEFINE(OVL_MODESEL, "dll/modeseldll.rel")
|
||||
OVL_DEFINE(OVL_MOVIE, "dll/moviedll.rel")
|
||||
OVL_DEFINE(OVL_MGMODE, "mgmodedll")
|
||||
OVL_DEFINE(OVL_MODELTEST, "modeltestdll")
|
||||
OVL_DEFINE(OVL_MODESEL, "modeseldll")
|
||||
OVL_DEFINE(OVL_MOVIE, "moviedll")
|
||||
#else
|
||||
OVL_DEFINE(OVL_MESS, "dll/messdll.rel")
|
||||
OVL_DEFINE(OVL_MGMODE, "dll/mgmodedll.rel")
|
||||
OVL_DEFINE(OVL_MODELTEST, "dll/modeltestdll.rel")
|
||||
OVL_DEFINE(OVL_MODESEL, "dll/modeseldll.rel")
|
||||
OVL_DEFINE(OVL_MESS, "messdll")
|
||||
OVL_DEFINE(OVL_MGMODE, "mgmodedll")
|
||||
OVL_DEFINE(OVL_MODELTEST, "modeltestdll")
|
||||
OVL_DEFINE(OVL_MODESEL, "modeseldll")
|
||||
#endif
|
||||
OVL_DEFINE(OVL_MPEX, "dll/mpexdll.rel")
|
||||
OVL_DEFINE(OVL_MSETUP, "dll/msetupdll.rel")
|
||||
OVL_DEFINE(OVL_MSTORY2, "dll/mstory2dll.rel")
|
||||
OVL_DEFINE(OVL_MSTORY3, "dll/mstory3dll.rel")
|
||||
OVL_DEFINE(OVL_MSTORY4, "dll/mstory4dll.rel")
|
||||
OVL_DEFINE(OVL_MSTORY, "dll/mstorydll.rel")
|
||||
OVL_DEFINE(OVL_NIS, "dll/nisdll.rel")
|
||||
OVL_DEFINE(OVL_OPTION, "dll/option.rel")
|
||||
OVL_DEFINE(OVL_PRESENT, "dll/present.rel")
|
||||
OVL_DEFINE(OVL_RESULT, "dll/resultdll.rel")
|
||||
OVL_DEFINE(OVL_SAF, "dll/safdll.rel")
|
||||
OVL_DEFINE(OVL_SELMENU, "dll/selmenuDLL.rel")
|
||||
OVL_DEFINE(OVL_STAFF, "dll/staffdll.rel")
|
||||
OVL_DEFINE(OVL_SUBCHRSEL, "dll/subchrseldll.rel")
|
||||
OVL_DEFINE(OVL_W01, "dll/w01dll.rel")
|
||||
OVL_DEFINE(OVL_W02, "dll/w02dll.rel")
|
||||
OVL_DEFINE(OVL_W03, "dll/w03dll.rel")
|
||||
OVL_DEFINE(OVL_W04, "dll/w04dll.rel")
|
||||
OVL_DEFINE(OVL_W05, "dll/w05dll.rel")
|
||||
OVL_DEFINE(OVL_W06, "dll/w06dll.rel")
|
||||
OVL_DEFINE(OVL_W10, "dll/w10dll.rel")
|
||||
OVL_DEFINE(OVL_W20, "dll/w20dll.rel")
|
||||
OVL_DEFINE(OVL_W21, "dll/w21dll.rel")
|
||||
OVL_DEFINE(OVL_ZTAR, "dll/ztardll.rel")
|
||||
OVL_DEFINE(OVL_MPEX, "mpexdll")
|
||||
OVL_DEFINE(OVL_MSETUP, "msetupdll")
|
||||
OVL_DEFINE(OVL_MSTORY2, "mstory2dll")
|
||||
OVL_DEFINE(OVL_MSTORY3, "mstory3dll")
|
||||
OVL_DEFINE(OVL_MSTORY4, "mstory4dll")
|
||||
OVL_DEFINE(OVL_MSTORY, "mstorydll")
|
||||
OVL_DEFINE(OVL_NIS, "nisdll")
|
||||
OVL_DEFINE(OVL_OPTION, "option")
|
||||
OVL_DEFINE(OVL_PRESENT, "present")
|
||||
OVL_DEFINE(OVL_RESULT, "resultdll")
|
||||
OVL_DEFINE(OVL_SAF, "safdll")
|
||||
OVL_DEFINE(OVL_SELMENU, "selmenuDLL")
|
||||
OVL_DEFINE(OVL_STAFF, "staffdll")
|
||||
OVL_DEFINE(OVL_SUBCHRSEL, "subchrseldll")
|
||||
OVL_DEFINE(OVL_W01, "w01dll")
|
||||
OVL_DEFINE(OVL_W02, "w02dll")
|
||||
OVL_DEFINE(OVL_W03, "w03dll")
|
||||
OVL_DEFINE(OVL_W04, "w04dll")
|
||||
OVL_DEFINE(OVL_W05, "w05dll")
|
||||
OVL_DEFINE(OVL_W06, "w06dll")
|
||||
OVL_DEFINE(OVL_W10, "w10dll")
|
||||
OVL_DEFINE(OVL_W20, "w20dll")
|
||||
OVL_DEFINE(OVL_W21, "w21dll")
|
||||
OVL_DEFINE(OVL_ZTAR, "ztardll")
|
||||
|
|
|
|||
28
include/port/byteswap.h
Normal file
28
include/port/byteswap.h
Normal 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
18
include/port/imgui.h
Normal 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
|
||||
|
|
@ -21,4 +21,15 @@
|
|||
#define REFRESH_RATE 60
|
||||
#endif
|
||||
|
||||
#if _WIN32
|
||||
#ifdef TARGET_DOL
|
||||
#define SHARED_SYM __declspec(dllexport)
|
||||
#else
|
||||
#define SHARED_SYM __declspec(dllimport)
|
||||
#endif
|
||||
|
||||
#else
|
||||
#define SHARED_SYM
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1,8 +1,6 @@
|
|||
#ifndef _MATH_H
|
||||
#define _MATH_H
|
||||
|
||||
#define M_PI 3.141592653589793
|
||||
|
||||
#ifndef _MATH_INLINE
|
||||
#define _MATH_INLINE static inline
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load diff
|
|
@ -1180,4 +1180,7 @@ static void ShadowDraw(ModelData *model, Mtx mtx)
|
|||
GXPosition3f32(2000.0f, 0, 2000.0f);
|
||||
GXPosition3f32(-2000.0f, 0, 2000.0f);
|
||||
GXEnd();
|
||||
#ifdef TARGET_PC
|
||||
GXDestroyTexObj(&tex);
|
||||
#endif
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1308,6 +1308,9 @@ void fn_1_58E4(ModelData *modelData, Mtx arg1)
|
|||
GXSetTevColor(GX_TEVREG0, sp14);
|
||||
GXCallDisplayList(var_r31->unk_44, var_r31->unk_48);
|
||||
}
|
||||
#ifdef TARGET_PC
|
||||
GXDestroyTexObj(&sp3C);
|
||||
#endif
|
||||
}
|
||||
|
||||
AnimData *fn_1_5D64(u16 sizeX, u16 sizeY, s32 arg2)
|
||||
|
|
|
|||
|
|
@ -1002,12 +1002,15 @@ void fn_1_37A4(ModelData *arg0, Mtx arg1)
|
|||
GXClearVtxDesc();
|
||||
GXSetVtxDesc(GX_VA_POS, GX_INDEX16);
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_RGBA6, 0);
|
||||
GXSetArray(GX_VA_POS, lbl_1_bss_5AC.unk14, 0xC);
|
||||
GXSETARRAY(GX_VA_POS, lbl_1_bss_5AC.unk14, 900 * sizeof(Vec), sizeof(Vec));
|
||||
GXSetCullMode(GX_CULL_BACK);
|
||||
GXCallDisplayList(lbl_1_bss_5AC.unk24, lbl_1_bss_5AC.unk28);
|
||||
GXSetNumIndStages(0);
|
||||
GXSetTevDirect(GX_TEVSTAGE0);
|
||||
GXSetTevDirect(GX_TEVSTAGE1);
|
||||
#ifdef TARGET_PC
|
||||
GXDestroyTexObj(&spC);
|
||||
#endif
|
||||
}
|
||||
|
||||
void fn_1_3F1C(ModelData *arg0, Mtx arg1)
|
||||
|
|
@ -1077,6 +1080,9 @@ void fn_1_4024(ModelData *arg0, Mtx arg1)
|
|||
GXPosition3f32(600.0f, -2.0f, 1250.0f);
|
||||
GXPosition3f32(-600.0f, -2.0f, 1250.0f);
|
||||
GXEnd();
|
||||
#ifdef TARGET_PC
|
||||
GXDestroyTexObj(&sp18);
|
||||
#endif
|
||||
}
|
||||
|
||||
void fn_1_4700(ModelData *arg0, Mtx arg1)
|
||||
|
|
|
|||
|
|
@ -1111,19 +1111,19 @@ void fn_1_45BC(ModelData *arg0, Mtx arg1)
|
|||
GXClearVtxDesc();
|
||||
GXSetVtxDesc(GX_VA_POS, GX_INDEX16);
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
|
||||
GXSetArray(GX_VA_POS, var_r31->unk_84, sizeof(Vec));
|
||||
GXSETARRAY(GX_VA_POS, var_r31->unk_84, var_r31->unk_80 * sizeof(Vec), sizeof(Vec));
|
||||
GXSetVtxDesc(GX_VA_NRM, GX_INDEX16);
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_NRM_XYZ, GX_F32, 0);
|
||||
GXSetArray(GX_VA_NRM, var_r31->unk_88, sizeof(Vec));
|
||||
GXSETARRAY(GX_VA_NRM, var_r31->unk_88, var_r31->unk_80 * sizeof(Vec), sizeof(Vec));
|
||||
GXSetVtxDesc(GX_VA_CLR0, GX_INDEX16);
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0);
|
||||
GXSetArray(GX_VA_CLR0, var_r31->unk_90, 4);
|
||||
GXSETARRAY(GX_VA_CLR0, var_r31->unk_90, var_r31->unk_80 * sizeof(GXColor), sizeof(GXColor));
|
||||
GXCallDisplayList(var_r31->unk_A4, var_r31->unk_A0);
|
||||
for (var_r30 = 1; var_r30 < 29; var_r30++) {
|
||||
var_r29 = var_r30 * 35;
|
||||
GXSetArray(GX_VA_POS, &var_r31->unk_84[var_r29], sizeof(Vec));
|
||||
GXSetArray(GX_VA_NRM, &var_r31->unk_88[var_r29], sizeof(Vec));
|
||||
GXSetArray(GX_VA_CLR0, &var_r31->unk_90[var_r29], sizeof(GXColor));
|
||||
GXSETARRAY(GX_VA_POS, &var_r31->unk_84[var_r29], 35 * sizeof(Vec), sizeof(Vec));
|
||||
GXSETARRAY(GX_VA_NRM, &var_r31->unk_88[var_r29], 35 * sizeof(Vec), sizeof(Vec));
|
||||
GXSETARRAY(GX_VA_CLR0, &var_r31->unk_90[var_r29], 35 * sizeof(GXColor), sizeof(GXColor));
|
||||
GXCallDisplayList(var_r31->unk_A4, var_r31->unk_A0);
|
||||
}
|
||||
}
|
||||
|
|
@ -2956,7 +2956,7 @@ void fn_1_BC18(ModelData *arg0, float (*arg1)[4])
|
|||
if (HmfInverseMtxF3X3(arg1, sp128) == 0) {
|
||||
MTXIdentity(sp128);
|
||||
}
|
||||
PSMTXReorder(sp128, sp8);
|
||||
MTXReorder(sp128, sp8);
|
||||
if (var_r31->unk_4C) {
|
||||
var_r18 = var_r31->unk_4C;
|
||||
var_r18(arg0, var_r31, arg1);
|
||||
|
|
@ -2964,7 +2964,7 @@ void fn_1_BC18(ModelData *arg0, float (*arg1)[4])
|
|||
var_r29 = var_r31->unk_3C;
|
||||
var_r30 = var_r31->unk_40;
|
||||
var_r28 = var_r31->unk_44;
|
||||
PSMTXROMultVecArray(sp8, lbl_1_data_8E0, &sp38[0], 4);
|
||||
MTXROMultVecArray(sp8, lbl_1_data_8E0, &sp38[0], 4);
|
||||
for (var_r26 = 0; var_r26 < var_r31->unk_26; var_r26++, var_r29++) {
|
||||
if (!var_r29->unk_28) {
|
||||
var_r30->x = var_r30->y = var_r30->z = 0.0f;
|
||||
|
|
@ -3169,7 +3169,7 @@ void fn_1_C86C(ModelData *arg0, Mtx arg1)
|
|||
if (HmfInverseMtxF3X3(arg1, sp9C) == 0) {
|
||||
MTXIdentity(sp9C);
|
||||
}
|
||||
PSMTXReorder(sp9C, spC);
|
||||
MTXReorder(sp9C, spC);
|
||||
if (var_r31->unk_4C) {
|
||||
var_r23 = var_r31->unk_4C;
|
||||
var_r23(arg0, var_r31, arg1);
|
||||
|
|
@ -3177,7 +3177,7 @@ void fn_1_C86C(ModelData *arg0, Mtx arg1)
|
|||
var_r29 = var_r31->unk_3C;
|
||||
var_r30 = var_r31->unk_40;
|
||||
sp8 = var_r31->unk_44;
|
||||
PSMTXROMultVecArray(spC, lbl_1_data_930, (Vec *)sp3C, 4);
|
||||
MTXROMultVecArray(spC, lbl_1_data_930, (Vec *)sp3C, 4);
|
||||
for (var_r25 = 0; var_r25 < var_r31->unk_26; var_r25++, var_r29++) {
|
||||
if (!var_r29->unk_28) {
|
||||
var_r30->x = var_r30->y = var_r30->z = 0.0f;
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
#include "game/objsub.h"
|
||||
#include "game/pad.h"
|
||||
#include "game/process.h"
|
||||
#include "math.h"
|
||||
#include "ext_math.h"
|
||||
|
||||
#include "REL/m407dll.h"
|
||||
|
||||
|
|
|
|||
|
|
@ -1138,6 +1138,10 @@ void fn_1_10830(ModelData *arg0, HsfBitmap *arg1, HsfAttribute *arg2, s16 arg3)
|
|||
GXInitTexObjLOD(&sp1C, GX_LINEAR, GX_LINEAR, 0, 0, 0, GX_FALSE, GX_FALSE, GX_ANISO_1);
|
||||
}
|
||||
GXLoadTexObj(&sp1C, arg3);
|
||||
#ifdef TARGET_PC
|
||||
GXDestroyTexObj(&sp1C);
|
||||
GXDestroyTlutObj(&sp10);
|
||||
#endif
|
||||
}
|
||||
|
||||
#define SET_TEVCOLOR_ALPHA(reg, color_var, value) \
|
||||
|
|
|
|||
|
|
@ -1385,7 +1385,7 @@ void fn_1_602C(ModelData *arg0, f32 (*arg1)[4])
|
|||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0);
|
||||
GXSetArray(GX_VA_TEX0, temp_r30->unk20, 8);
|
||||
fn_1_40A4(arg1, sp128);
|
||||
PSMTXReorder(sp128, spF8);
|
||||
MTXReorder(sp128, spF8);
|
||||
if (((u8)omPauseChk() == 0) && (temp_r30->unkC)) {
|
||||
var_r23 = temp_r30->unkC;
|
||||
var_r23(arg0, temp_r30, arg1);
|
||||
|
|
@ -1393,7 +1393,7 @@ void fn_1_602C(ModelData *arg0, f32 (*arg1)[4])
|
|||
var_r29 = temp_r30->unk18;
|
||||
var_r31 = temp_r30->unk1C;
|
||||
var_r26 = temp_r30->unk20;
|
||||
PSMTXROMultVecArray(spF8, &temp_r30->unk2C, &sp68[0], 4);
|
||||
MTXROMultVecArray(spF8, &temp_r30->unk2C, &sp68[0], 4);
|
||||
|
||||
for (var_r25 = 0; var_r25 < temp_r30->unk0; var_r25++, var_r29++, var_r26 += 4) {
|
||||
if (var_r29->unk4E == 0) {
|
||||
|
|
|
|||
|
|
@ -1144,4 +1144,7 @@ void fn_1_B140(ModelData *arg0, Mtx arg1)
|
|||
GXSetNumIndStages(0);
|
||||
GXSetTevDirect(GX_TEVSTAGE0);
|
||||
}
|
||||
#ifdef TARGET_PC
|
||||
GXDestroyTexObj(&sp14);
|
||||
#endif
|
||||
}
|
||||
|
|
|
|||
|
|
@ -278,6 +278,9 @@ void fn_1_89BC(ModelData *model, Mtx mtx)
|
|||
GXTexCoord2f32(0, 1);
|
||||
GXEnd();
|
||||
fn_1_8904(lbl_1_bss_1180, GX_FALSE);
|
||||
#ifdef TARGET_PC
|
||||
GXDestroyTexObj(&sp14);
|
||||
#endif
|
||||
}
|
||||
|
||||
void fn_1_8EA0(void)
|
||||
|
|
|
|||
|
|
@ -574,8 +574,8 @@ void fn_1_4E64(omObjData *object)
|
|||
MTXScale(spC8, var_f31, var_f31, var_f31 * var_r31->unk_28);
|
||||
MTXConcat(sp68, spC8, sp98);
|
||||
MTXInverse(sp98, spC8);
|
||||
PSMTXReorder(spC8, sp38);
|
||||
PSMTXROMultVecArray(sp38, lbl_1_bss_178.unk_2C, lbl_1_bss_178.unk_34, lbl_1_bss_178.unk_18);
|
||||
MTXReorder(spC8, sp38);
|
||||
MTXROMultVecArray(sp38, lbl_1_bss_178.unk_2C, lbl_1_bss_178.unk_34, lbl_1_bss_178.unk_18);
|
||||
sp2C.x = (0.15f * var_r31->unk_18) * (var_r31->unk_24 * sind(var_r31->unk_10));
|
||||
sp2C.y = 0.0f;
|
||||
sp2C.z = (0.15f * var_r31->unk_18) * (var_r31->unk_24 * cosd(var_r31->unk_10));
|
||||
|
|
@ -866,6 +866,9 @@ void fn_1_604C(ModelData *arg0, Mtx arg1)
|
|||
GXSetTevDirect(GX_TEVSTAGE1);
|
||||
GXSetTevDirect(GX_TEVSTAGE2);
|
||||
GXSetTevDirect(GX_TEVSTAGE3);
|
||||
#ifdef TARGET_PC
|
||||
GXDestroyTexObj(&sp18);
|
||||
#endif
|
||||
}
|
||||
|
||||
void fn_1_6B04(ModelData *model, Mtx arg1)
|
||||
|
|
|
|||
|
|
@ -323,6 +323,10 @@ void fn_1_AD0(s16 arg0)
|
|||
GXPosition3f32(lbl_1_bss_0[arg0].x, lbl_1_bss_0[arg0].y + 192.0f, 0.0f);
|
||||
GXTexCoord2f32(0.0f, 1.0f);
|
||||
GXEnd();
|
||||
#ifdef TARGET_PC
|
||||
GXDestroyTexObj(&sp58);
|
||||
GXDestroyTexObj(&sp38);
|
||||
#endif
|
||||
}
|
||||
|
||||
void fn_1_F58(void)
|
||||
|
|
|
|||
|
|
@ -1825,4 +1825,7 @@ void fn_1_ABDC(ModelData *model, Mtx matrix)
|
|||
GXColor1x8(1);
|
||||
}
|
||||
}
|
||||
#ifdef TARGET_PC
|
||||
GXDestroyTexObj(&sp8);
|
||||
#endif
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4497,6 +4497,9 @@ void fn_1_EF44(ModelData *arg0, Mtx arg1)
|
|||
}
|
||||
GXSetNumIndStages(0);
|
||||
GXSetTevDirect(GX_TEVSTAGE0);
|
||||
#ifdef TARGET_PC
|
||||
GXDestroyTexObj(&sp14);
|
||||
#endif
|
||||
}
|
||||
|
||||
s32 fn_1_F574(Vec arg0, float arg1, s32 arg2)
|
||||
|
|
@ -4911,6 +4914,9 @@ void fn_1_11008(StructBssD0Data *arg0, void *arg1, s16 arg2, GXTexWrapMode arg3,
|
|||
GXInitTexObjLOD(&sp18, GX_NEAR, GX_NEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1);
|
||||
}
|
||||
GXLoadTexObj(&sp18, arg2);
|
||||
#ifdef TARGET_PC
|
||||
GXDestroyTexObj(&sp18);
|
||||
#endif
|
||||
}
|
||||
|
||||
s16 fn_1_11114(AnimData *arg0, s16 arg1)
|
||||
|
|
@ -5148,7 +5154,7 @@ void fn_1_11900(ModelData *arg0, Mtx arg1)
|
|||
if (HmfInverseMtxF3X3(arg1, sp128) == 0) {
|
||||
MTXIdentity(sp128);
|
||||
}
|
||||
PSMTXReorder(sp128, sp8);
|
||||
MTXReorder(sp128, sp8);
|
||||
if (temp_r31->unk4C) {
|
||||
var_r18 = temp_r31->unk4C;
|
||||
var_r18(arg0, temp_r31, arg1);
|
||||
|
|
@ -5156,7 +5162,7 @@ void fn_1_11900(ModelData *arg0, Mtx arg1)
|
|||
var_r29 = temp_r31->unk3C;
|
||||
var_r30 = temp_r31->unk40;
|
||||
var_r28 = temp_r31->unk44;
|
||||
PSMTXROMultVecArray(sp8, lbl_1_data_8C4, sp38, 4);
|
||||
MTXROMultVecArray(sp8, lbl_1_data_8C4, sp38, 4);
|
||||
for (i = 0; i < temp_r31->unk26; i++, var_r29++) {
|
||||
if (!var_r29->unk30) {
|
||||
var_r30->x = var_r30->y = var_r30->z = 0.0f;
|
||||
|
|
|
|||
|
|
@ -2131,7 +2131,7 @@ void fn_1_101C4(ModelData *var_r29, Mtx var_r28)
|
|||
if (HmfInverseMtxF3X3(var_r28, sp50) == 0) {
|
||||
MTXIdentity(sp50);
|
||||
}
|
||||
PSMTXReorder(sp50, sp20);
|
||||
MTXReorder(sp50, sp20);
|
||||
GXClearVtxDesc();
|
||||
GXSetVtxDesc(GX_VA_POS, GX_INDEX16);
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
|
||||
|
|
@ -2694,7 +2694,7 @@ void fn_1_11EE0(ModelData *var_r24, Mtx var_r21)
|
|||
if (HmfInverseMtxF3X3(var_r21, sp128) == 0) {
|
||||
MTXIdentity(sp128);
|
||||
}
|
||||
PSMTXReorder(sp128, &sp8[0]);
|
||||
MTXReorder(sp128, &sp8[0]);
|
||||
if (var_r31->unk_4C) {
|
||||
var_r18 = var_r31->unk_4C;
|
||||
var_r18(var_r24, var_r31, var_r21);
|
||||
|
|
@ -2702,7 +2702,7 @@ void fn_1_11EE0(ModelData *var_r24, Mtx var_r21)
|
|||
var_r29 = var_r31->unk_3C;
|
||||
var_r30 = var_r31->unk_40;
|
||||
var_r26 = var_r31->unk_44;
|
||||
PSMTXROMultVecArray(sp8, lbl_1_data_19C, &sp38[0], 4);
|
||||
MTXROMultVecArray(sp8, lbl_1_data_19C, &sp38[0], 4);
|
||||
for (var_r23 = 0; var_r23 < var_r31->unk_24; var_r23++, var_r29++) {
|
||||
if (!var_r29->unk_28) {
|
||||
var_r30->x = var_r30->y = var_r30->z = 0.0f;
|
||||
|
|
|
|||
|
|
@ -3045,7 +3045,7 @@ void fn_1_80DC(ModelData *arg0, Mtx arg1)
|
|||
if (!HmfInverseMtxF3X3(arg1, sp128)) {
|
||||
MTXIdentity(sp128);
|
||||
}
|
||||
PSMTXReorder(sp128, sp8);
|
||||
MTXReorder(sp128, sp8);
|
||||
if (var_r31->unk_4C) {
|
||||
var_r18 = var_r31->unk_4C;
|
||||
var_r18(arg0, var_r31, arg1);
|
||||
|
|
@ -3053,7 +3053,7 @@ void fn_1_80DC(ModelData *arg0, Mtx arg1)
|
|||
var_r29 = var_r31->unk_3C;
|
||||
var_r30 = var_r31->unk_40;
|
||||
var_r26 = var_r31->unk_44;
|
||||
PSMTXROMultVecArray(sp8, lbl_1_data_22C, &sp38[0], 4);
|
||||
MTXROMultVecArray(sp8, lbl_1_data_22C, &sp38[0], 4);
|
||||
for (var_r23 = 0; var_r23 < var_r31->unk_24; var_r23++, var_r29++) {
|
||||
if (!var_r29->unk_28) {
|
||||
var_r30->x = var_r30->y = var_r30->z = 0.0f;
|
||||
|
|
@ -3135,7 +3135,7 @@ void fn_1_88B4(ModelData *arg0, Mtx arg1)
|
|||
var_f27 = var_r30->pos.y - arg0->pos.y;
|
||||
var_f30 = var_r30->pos.z - arg0->pos.z;
|
||||
var_f26 = sqrtf((var_f31 * var_f31) + (var_f30 * var_f30));
|
||||
arg0->rot.x = (atan2d(var_f26, var_f27)) - 90.0;
|
||||
arg0->rot.x = (atan2d(var_f26, var_f27))-90.0;
|
||||
arg0->rot.y = atan2d(var_f31, var_f30);
|
||||
var_r29 = arg0->unk_120;
|
||||
GXLoadPosMtxImm(arg1, 0);
|
||||
|
|
|
|||
|
|
@ -1076,6 +1076,9 @@ void fn_1_618C(ModelData *arg0, Mtx arg1)
|
|||
GXSetNumIndStages(0);
|
||||
GXSetTevDirect(GX_TEVSTAGE0);
|
||||
GXSetTevDirect(GX_TEVSTAGE1);
|
||||
#ifdef TARGET_PC
|
||||
GXDestroyTexObj(&sp14);
|
||||
#endif
|
||||
}
|
||||
|
||||
s32 lbl_1_data_FC[0xC] = {
|
||||
|
|
@ -2443,6 +2446,9 @@ void fn_1_B3CC(ModelData *model, Mtx matrix)
|
|||
GXSetNumIndStages(0);
|
||||
GXSetTevDirect(GX_TEVSTAGE0);
|
||||
GXSetTevDirect(GX_TEVSTAGE1);
|
||||
#ifdef TARGET_PC
|
||||
GXDestroyTexObj(&sp44);
|
||||
#endif
|
||||
}
|
||||
|
||||
void fn_1_BD2C(ModelData *model, Mtx matrix)
|
||||
|
|
@ -3028,7 +3034,7 @@ void fn_1_DCD4(ModelData *model, Mtx matrix)
|
|||
sp128[0][3] = 0.0f;
|
||||
sp128[1][3] = 0.0f;
|
||||
sp128[2][3] = 0.0f;
|
||||
PSMTXReorder(sp128, spF8);
|
||||
MTXReorder(sp128, spF8);
|
||||
if ((omPauseChk() == 0) && (var_r30->unk_0C)) {
|
||||
var_r23 = var_r30->unk_0C;
|
||||
var_r23(model, var_r30, matrix);
|
||||
|
|
@ -3036,7 +3042,7 @@ void fn_1_DCD4(ModelData *model, Mtx matrix)
|
|||
var_r29 = var_r30->unk_18;
|
||||
var_r31 = var_r30->unk_1C;
|
||||
var_r26 = var_r30->unk_20;
|
||||
PSMTXROMultVecArray(spF8, &var_r30->unk_2C, sp68, 4);
|
||||
MTXROMultVecArray(spF8, &var_r30->unk_2C, sp68, 4);
|
||||
for (var_r25 = 0; var_r25 < var_r30->unk_00; var_r25++, var_r29++, var_r26 += 4) {
|
||||
if (var_r29->unk_62 == 0) {
|
||||
var_r31->x = var_r31->y = var_r31->z = 0.0f;
|
||||
|
|
@ -3058,9 +3064,9 @@ void fn_1_DCD4(ModelData *model, Mtx matrix)
|
|||
}
|
||||
else {
|
||||
fn_1_E420(&var_r30->unk_2C, &sp38, &var_r29->unk_48, 4);
|
||||
PSMTXRotRad(spC8, 0x5A, MTXDegToRad(var_r29->unk_44));
|
||||
PSMTXConcat(sp128, spC8, sp98);
|
||||
PSMTXMultVecArray(sp98, &sp38, &sp8, 4);
|
||||
MTXRotRad(spC8, 0x5A, MTXDegToRad(var_r29->unk_44));
|
||||
MTXConcat(sp128, spC8, sp98);
|
||||
MTXMultVecArray(sp98, &sp38, &sp8, 4);
|
||||
PSVECAdd(&sp8, &var_r29->unk_54, var_r31++);
|
||||
PSVECAdd(&sp14, &var_r29->unk_54, var_r31++);
|
||||
PSVECAdd(&sp20, &var_r29->unk_54, var_r31++);
|
||||
|
|
|
|||
|
|
@ -1645,7 +1645,7 @@ void fn_1_13FBC(ModelData *model, Mtx matrix)
|
|||
var_r27 = &lbl_1_bss_578[*var_r25];
|
||||
var_r24 = lbl_1_bss_56C[*var_r25];
|
||||
GXLoadPosMtxImm(matrix, 0);
|
||||
PSMTXInvXpose(matrix, sp70);
|
||||
MTXInvXpose(matrix, sp70);
|
||||
GXLoadNrmMtxImm(sp70, 0);
|
||||
GXSetNumTevStages(1);
|
||||
GXSetNumTexGens(1);
|
||||
|
|
|
|||
|
|
@ -980,6 +980,9 @@ void fn_1_3B64(void)
|
|||
GXTexCoord2f32(0.0f, 1.0f);
|
||||
}
|
||||
}
|
||||
#ifdef TARGET_PC
|
||||
GXDestroyTexObj(&sp14);
|
||||
#endif
|
||||
}
|
||||
|
||||
s32 lbl_1_data_EC[] = {
|
||||
|
|
|
|||
|
|
@ -3109,7 +3109,7 @@ void fn_1_134C0(ModelData *var_r23, Mtx var_r22)
|
|||
if (HmfInverseMtxF3X3(var_r22, &sp128[0]) == 0) {
|
||||
MTXIdentity(sp128);
|
||||
}
|
||||
PSMTXReorder(sp128, sp8);
|
||||
MTXReorder(sp128, sp8);
|
||||
if (var_r31->unk_4C) {
|
||||
var_r18 = var_r31->unk_4C;
|
||||
var_r18(var_r23, var_r31, var_r22);
|
||||
|
|
@ -3117,7 +3117,7 @@ void fn_1_134C0(ModelData *var_r23, Mtx var_r22)
|
|||
var_r29 = var_r31->unk_3C;
|
||||
var_r30 = var_r31->unk_40;
|
||||
var_r28 = var_r31->unk_44;
|
||||
PSMTXROMultVecArray(sp8, lbl_1_data_6A4, &sp38[0], 4);
|
||||
MTXROMultVecArray(sp8, lbl_1_data_6A4, &sp38[0], 4);
|
||||
for (var_r26 = 0; var_r26 < var_r31->unk_26; var_r26++, var_r29++) {
|
||||
if (!var_r29->unk_30) {
|
||||
var_r30->x = var_r30->y = var_r30->z = 0.0f;
|
||||
|
|
|
|||
|
|
@ -1284,6 +1284,9 @@ void fn_1_8CE0(ModelData *model, Mtx matrix)
|
|||
GXSetNumIndStages(0);
|
||||
GXSetTevDirect(GX_TEVSTAGE0);
|
||||
GXSetTevDirect(GX_TEVSTAGE1);
|
||||
#ifdef TARGET_PC
|
||||
GXDestroyTexObj(&sp24);
|
||||
#endif
|
||||
}
|
||||
|
||||
Vec lbl_1_data_60[6] = {
|
||||
|
|
|
|||
|
|
@ -2095,7 +2095,7 @@ void fn_1_72B4(ModelData *model, Mtx mtx)
|
|||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0);
|
||||
GXSetArray(GX_VA_TEX0, temp_r30->unk20, sizeof(HsfVector2f));
|
||||
fn_1_79FC(mtx, sp128);
|
||||
PSMTXReorder(sp128, spF8);
|
||||
MTXReorder(sp128, spF8);
|
||||
if (!omPauseChk() && temp_r30->unkC) {
|
||||
temp_r23 = temp_r30->unkC;
|
||||
temp_r23(model, temp_r30, mtx);
|
||||
|
|
@ -2103,7 +2103,7 @@ void fn_1_72B4(ModelData *model, Mtx mtx)
|
|||
temp_r29 = temp_r30->unk18;
|
||||
temp_r31 = temp_r30->unk1C;
|
||||
temp_r27 = temp_r30->unk20;
|
||||
PSMTXROMultVecArray(spF8, temp_r30->unk2C, sp68, 4);
|
||||
MTXROMultVecArray(spF8, temp_r30->unk2C, sp68, 4);
|
||||
for (temp_r26 = 0; temp_r26 < temp_r30->unk0; temp_r26++, temp_r29++, temp_r27 += 4) {
|
||||
if (temp_r29->unk56 == 0) {
|
||||
temp_r31->x = temp_r31->y = temp_r31->z = 0;
|
||||
|
|
|
|||
|
|
@ -348,6 +348,9 @@ void fn_1_2978(ModelData *model, Mtx mtx)
|
|||
GXSetNumIndStages(0);
|
||||
GXSetTevDirect(GX_TEVSTAGE0);
|
||||
GXSetTevDirect(GX_TEVSTAGE1);
|
||||
#ifdef TARGET_PC
|
||||
GXDestroyTexObj(&spC);
|
||||
#endif
|
||||
}
|
||||
|
||||
void fn_1_3004(void)
|
||||
|
|
@ -468,6 +471,9 @@ void fn_1_3594(ModelData *model, Mtx mtx)
|
|||
GXPosition3f32(1000.0f, -5.000001f, 1000.0f);
|
||||
GXPosition3f32(-1000.0f, -5.000001f, 1000.0f);
|
||||
GXEnd();
|
||||
#ifdef TARGET_PC
|
||||
GXDestroyTexObj(&sp10);
|
||||
#endif
|
||||
}
|
||||
|
||||
GXColor lbl_1_data_170 = { 255, 0, 0, 255 };
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -1843,7 +1843,10 @@ void fn_1_7D60(unkStruct15 *arg0, unkStruct13 *arg1, s16 arg2)
|
|||
}
|
||||
GXInitTexObjLOD(&sp1C, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, 0, 0, GX_ANISO_1);
|
||||
GXLoadTexObj(&sp1C, arg2);
|
||||
return;
|
||||
#ifdef TARGET_PC
|
||||
GXDestroyTexObj(&sp1C);
|
||||
GXDestroyTlutObj(&sp10);
|
||||
#endif
|
||||
}
|
||||
|
||||
void fn_1_806C(ModelData *arg0, Mtx arg1)
|
||||
|
|
@ -2132,6 +2135,9 @@ void fn_1_8D1C(void)
|
|||
GXSetTexCopyDst(0x280, 0x1E0, GX_TF_RGBA8, GX_FALSE);
|
||||
GXCopyTex(lbl_1_bss_28, 0);
|
||||
DCFlushRange(lbl_1_bss_28, lbl_1_bss_24);
|
||||
#ifdef TARGET_PC
|
||||
GXDestroyTexObj(&sp10);
|
||||
#endif
|
||||
}
|
||||
|
||||
void fn_1_91A4(Vec *arg0, Vec *arg1, Vec *arg2, f32 arg3[5])
|
||||
|
|
@ -2460,7 +2466,7 @@ void fn_1_9C04(ModelData *arg0, Mtx arg1)
|
|||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0);
|
||||
GXSetArray(GX_VA_TEX0, temp_r30->unk20, 8);
|
||||
fn_1_9344(arg1, sp128);
|
||||
PSMTXReorder(sp128, spF8);
|
||||
MTXReorder(sp128, spF8);
|
||||
if (((u8)omPauseChk() == 0) && (temp_r30->unkC)) {
|
||||
var_r23 = temp_r30->unkC;
|
||||
var_r23(arg0, temp_r30, arg1);
|
||||
|
|
@ -2468,7 +2474,7 @@ void fn_1_9C04(ModelData *arg0, Mtx arg1)
|
|||
var_r29 = temp_r30->unk18;
|
||||
var_r31 = temp_r30->unk1C;
|
||||
var_r27 = temp_r30->unk20;
|
||||
PSMTXROMultVecArray(spF8, &temp_r30->unk2C, (Vec *)&sp68[0], 4);
|
||||
MTXROMultVecArray(spF8, &temp_r30->unk2C, (Vec *)&sp68[0], 4);
|
||||
|
||||
for (var_r26 = 0; var_r26 < temp_r30->unk0; var_r26++, var_r29++, var_r27 += 4) {
|
||||
if (var_r29->unk62 == 0) {
|
||||
|
|
|
|||
|
|
@ -1531,8 +1531,8 @@ void fn_1_485C(ModelData *model, Mtx mtx)
|
|||
GXSetProjection(sp40, GX_PERSPECTIVE);
|
||||
MTXInverse(mtx, spA0);
|
||||
spA0[0][3] = spA0[1][3] = spA0[2][3] = 0.0f;
|
||||
PSMTXReorder(spA0, sp70);
|
||||
PSMTXROMultVecArray(sp70, &lbl_1_data_1C0[0], &sp10, 4);
|
||||
MTXReorder(spA0, sp70);
|
||||
MTXROMultVecArray(sp70, &lbl_1_data_1C0[0], &sp10, 4);
|
||||
GXLoadPosMtxImm(mtx, 0);
|
||||
var_r31 = lbl_1_bss_5C;
|
||||
for (var_r30 = 0; var_r30 < 1024; var_r30++, var_r31++) {
|
||||
|
|
@ -1630,6 +1630,9 @@ void fn_1_54C8(ModelData *model, Mtx mtx)
|
|||
GXSetNumIndStages(0);
|
||||
GXSetTevDirect(GX_TEVSTAGE0);
|
||||
GXSetTevDirect(GX_TEVSTAGE1);
|
||||
#ifdef TARGET_PC
|
||||
GXDestroyTexObj(&spC);
|
||||
#endif
|
||||
}
|
||||
|
||||
s16 fn_1_5918(Vec *arg0)
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@
|
|||
#include "game/frand.h"
|
||||
#include "game/gamework_data.h"
|
||||
#include "game/hsfman.h"
|
||||
#include "game/jmp.h"
|
||||
#include "game/minigame_seq.h"
|
||||
#include "game/window.h"
|
||||
#include "game/wipe.h"
|
||||
|
|
|
|||
|
|
@ -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 };
|
||||
|
|
|
|||
|
|
@ -1608,7 +1608,7 @@ void fn_1_56C4(ModelData *arg0, Mtx arg1)
|
|||
sp130[0][3] = 0.0f;
|
||||
sp130[1][3] = 0.0f;
|
||||
sp130[2][3] = 0.0f;
|
||||
PSMTXReorder(sp130, sp100);
|
||||
MTXReorder(sp130, sp100);
|
||||
if ((omPauseChk() == 0) && (var_r31->unk_00)) {
|
||||
spC = var_r31->unk_00;
|
||||
spC(arg0, var_r31, arg1);
|
||||
|
|
@ -1616,7 +1616,7 @@ void fn_1_56C4(ModelData *arg0, Mtx arg1)
|
|||
var_r29 = var_r31->unk_10;
|
||||
var_r30 = var_r31->unk_14;
|
||||
var_r27 = var_r31->unk_18;
|
||||
PSMTXROMultVecArray(sp100, &var_r31->unk_28, sp70, 4);
|
||||
MTXROMultVecArray(sp100, &var_r31->unk_28, sp70, 4);
|
||||
for (var_r19 = 0; var_r19 < var_r31->unk_64; var_r19++, var_r29++, var_r27 += 4) {
|
||||
if (var_r29->unk_3E < 0) {
|
||||
var_r30->x = var_r30->y = var_r30->z = 0.0f;
|
||||
|
|
@ -5048,7 +5048,7 @@ void fn_1_15BAC(Vec *arg0, Vec *arg1, float arg8, s32 arg2, float *arg3, float *
|
|||
else if (0.0f > arg8) {
|
||||
arg8 += 360.0f;
|
||||
}
|
||||
*arg3 = (atan2d(sp14.z, sp14.x)) - 90.0;
|
||||
*arg3 = (atan2d(sp14.z, sp14.x))-90.0;
|
||||
*arg4 = atan2d(sp14.y, sqrtf((sp14.x * sp14.x) + (sp14.z * sp14.z)));
|
||||
if (arg2 == 0) {
|
||||
*arg3 *= -1.0f;
|
||||
|
|
|
|||
|
|
@ -968,6 +968,9 @@ void fn_1_6144(Work347CUnk4 *fbWork, float x1, float y1, float scale)
|
|||
GXPosition3f32(x1, y2, 0);
|
||||
GXTexCoord2f32(0, 1);
|
||||
GXEnd();
|
||||
#ifdef TARGET_PC
|
||||
GXDestroyTexObj(&texObj);
|
||||
#endif
|
||||
}
|
||||
|
||||
void fn_1_6594(s16 arg0, Work347CUnk4 *arg1, GXTexWrapMode arg2, s32 arg3, BOOL arg4)
|
||||
|
|
@ -980,6 +983,9 @@ void fn_1_6594(s16 arg0, Work347CUnk4 *arg1, GXTexWrapMode arg2, s32 arg3, BOOL
|
|||
GXInitTexObjLOD(&texObj, GX_NEAR, GX_NEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1);
|
||||
}
|
||||
GXLoadTexObj(&texObj, arg0);
|
||||
#ifdef TARGET_PC
|
||||
GXDestroyTexObj(&texObj);
|
||||
#endif
|
||||
}
|
||||
|
||||
s32 fn_1_6698(Vec *arg0, float arg1, float arg2, s32 arg3)
|
||||
|
|
|
|||
|
|
@ -857,6 +857,9 @@ void fn_1_5C74(Work2FACUnk4 *fbWork, float x1, float y1, float scale)
|
|||
GXPosition3f32(x1, y2, 0);
|
||||
GXTexCoord2f32(0, 1);
|
||||
GXEnd();
|
||||
#ifdef TARGET_PC
|
||||
GXDestroyTexObj(&texObj);
|
||||
#endif
|
||||
}
|
||||
|
||||
void fn_1_60C4(s16 arg0, Work2FACUnk4 *arg1, GXTexWrapMode arg2, s32 arg3, BOOL arg4)
|
||||
|
|
@ -870,6 +873,9 @@ void fn_1_60C4(s16 arg0, Work2FACUnk4 *arg1, GXTexWrapMode arg2, s32 arg3, BOOL
|
|||
GXInitTexObjLOD(&texObj, GX_NEAR, GX_NEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1);
|
||||
}
|
||||
GXLoadTexObj(&texObj, arg0);
|
||||
#ifdef TARGET_PC
|
||||
GXDestroyTexObj(&texObj);
|
||||
#endif
|
||||
}
|
||||
|
||||
s32 fn_1_61C8(Vec *arg0, float arg1, float arg2, s32 arg3)
|
||||
|
|
|
|||
|
|
@ -398,6 +398,9 @@ void fn_1_7790(ModelData *model, Mtx mtx)
|
|||
GXPosition3f32(var_f31, var_f30, -var_f29);
|
||||
GXPosition3f32(var_f31, -var_f30, -var_f29);
|
||||
GXPosition3f32(-var_f31, -var_f30, -var_f29);
|
||||
#ifdef TARGET_PC
|
||||
GXDestroyTexObj(&spC);
|
||||
#endif
|
||||
}
|
||||
|
||||
void fn_1_7B94(s32 arg0)
|
||||
|
|
|
|||
|
|
@ -859,6 +859,9 @@ void fn_1_2B68(ModelData *mdl, Mtx arg1)
|
|||
GXSetNumIndStages(0U);
|
||||
GXSetTevDirect(GX_TEVSTAGE0);
|
||||
GXSetTevDirect(GX_TEVSTAGE1);
|
||||
#ifdef TARGET_PC
|
||||
GXDestroyTexObj(&sp30);
|
||||
#endif
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------------- //
|
||||
|
|
|
|||
|
|
@ -676,4 +676,7 @@ static void ResultShadowDraw(struct model_data *model, Mtx matrix)
|
|||
GXPosition3f32(500.0f, 0, 500.0f);
|
||||
GXPosition3f32(-500.0f, 0, 500.0f);
|
||||
GXEnd();
|
||||
#ifdef TARGET_PC
|
||||
GXDestroyTexObj(&tex);
|
||||
#endif
|
||||
}
|
||||
|
|
|
|||
|
|
@ -761,7 +761,7 @@ void fn_1_97F8(s32 arg0)
|
|||
temp_r30 = OM_GET_WORK_PTR(temp_r3, unkTemp2);
|
||||
temp_r30->unk00_bit0 = 0;
|
||||
temp_r30->unk4 = arg0;
|
||||
temp_r30->unk_0C = HuMemDirectMallocNum(0, 0x190, MEMORY_DEFAULT_NUM);
|
||||
temp_r30->unk_0C = HuMemDirectMallocNum(0, 20 * sizeof(unkTemp), MEMORY_DEFAULT_NUM);
|
||||
BoardPlayerPosGet(arg0, &sp8);
|
||||
temp_r30->unk8 = (80.0f + sp8.y);
|
||||
memset(temp_r30->unk_0C, 0, 0x190);
|
||||
|
|
|
|||
|
|
@ -157,7 +157,7 @@ void fn_1_9D0C(omObjData *arg0)
|
|||
s32 var_r30;
|
||||
dataCopy2 *temp_r31;
|
||||
|
||||
arg0->data = HuMemDirectMallocNum(HEAP_SYSTEM, 0x34, MEMORY_DEFAULT_NUM);
|
||||
arg0->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(dataCopy2), MEMORY_DEFAULT_NUM);
|
||||
temp_r31 = arg0->data;
|
||||
temp_r31->unk_02 = 5;
|
||||
temp_r31->unk_04 = 0x3C;
|
||||
|
|
@ -318,7 +318,7 @@ void fn_1_A5B0(omObjData *arg0)
|
|||
BoardModelVisibilitySet(lbl_1_bss_D4, 1);
|
||||
BoardModelMotionTimeSet(lbl_1_bss_D4, 110.0f);
|
||||
lbl_1_bss_C8 = temp_r29 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_B3C4);
|
||||
temp_r29->data = HuMemDirectMallocNum(HEAP_SYSTEM, 0xC, MEMORY_DEFAULT_NUM);
|
||||
temp_r29->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(Vec), MEMORY_DEFAULT_NUM);
|
||||
temp_r31 = temp_r29->data;
|
||||
lbl_1_bss_C8->work[1] = 1;
|
||||
Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[1]), "fish", &sp14);
|
||||
|
|
|
|||
|
|
@ -114,7 +114,7 @@ void fn_1_6B7C(void)
|
|||
lbl_1_bss_94 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_7284);
|
||||
lbl_1_bss_8C = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_78A0);
|
||||
lbl_1_bss_90 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, NULL);
|
||||
lbl_1_bss_90->data = HuMemDirectMallocNum(HEAP_SYSTEM, 0x14, MEMORY_DEFAULT_NUM);
|
||||
lbl_1_bss_90->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(dataCopy), MEMORY_DEFAULT_NUM);
|
||||
if (lbl_1_bss_78 == NULL) {
|
||||
lbl_1_bss_78 = HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_EFFECT, 0x00));
|
||||
HuSprAnimLock(lbl_1_bss_78);
|
||||
|
|
|
|||
|
|
@ -1538,4 +1538,7 @@ void fn_1_7414(ModelData *model, Mtx matrix)
|
|||
GXPosition3f32(500.0f, 0.0f, -500.0f);
|
||||
GXPosition3f32(500.0f, 0.0f, 500.0f);
|
||||
GXPosition3f32(-500.0f, 0.0f, 500.0f);
|
||||
#ifdef TARGET_PC
|
||||
GXDestroyTexObj(&spC);
|
||||
#endif
|
||||
}
|
||||
|
|
|
|||
|
|
@ -53,6 +53,9 @@ void DEMOLoadFont(enum _GXTexMapID texMap, enum _GXTexMtx texMtx, DMTexFlt texFl
|
|||
GXLoadTexMtxImm(fontTMtx, texMtx, 1);
|
||||
GXSetNumTexGens(1);
|
||||
GXSetTexCoordGen(0, 1, 4, texMtx);
|
||||
#ifdef TARGET_PC
|
||||
GXDestroyTexObj(&fontTexObj);
|
||||
#endif
|
||||
}
|
||||
|
||||
void DEMOSetupScrnSpc(long width, long height, float depth)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
#include "dolphin/mtx.h"
|
||||
#include "dolphin/gx/GXPriv.h"
|
||||
|
||||
static f32 Unit01[] = { 0.0f, 1.0f };
|
||||
|
||||
|
|
@ -6,17 +7,21 @@ extern f32 sinf(f32);
|
|||
extern f32 cosf(f32);
|
||||
extern f32 tanf(f32);
|
||||
|
||||
void C_MTXIdentity(Mtx mtx)
|
||||
void C_MTXIdentity(Mtx m)
|
||||
{
|
||||
mtx[0][0] = 1.0f;
|
||||
mtx[0][1] = 0.0f;
|
||||
mtx[0][2] = 0.0f;
|
||||
mtx[1][0] = 0.0f;
|
||||
mtx[1][1] = 1.0f;
|
||||
mtx[1][2] = 0.0f;
|
||||
mtx[2][0] = 0.0f;
|
||||
mtx[2][1] = 0.0f;
|
||||
mtx[2][2] = 1.0f;
|
||||
ASSERTMSGLINE(189, m, "MtxIdentity(): NULL Mtx 'm' ");
|
||||
m[0][0] = 1;
|
||||
m[0][1] = 0;
|
||||
m[0][2] = 0;
|
||||
m[0][3] = 0;
|
||||
m[1][0] = 0;
|
||||
m[1][1] = 1;
|
||||
m[1][2] = 0;
|
||||
m[1][3] = 0;
|
||||
m[2][0] = 0;
|
||||
m[2][1] = 0;
|
||||
m[2][2] = 1;
|
||||
m[2][3] = 0;
|
||||
}
|
||||
|
||||
#ifdef GEKKO
|
||||
|
|
@ -41,27 +46,23 @@ void PSMTXIdentity(register Mtx m)
|
|||
}
|
||||
#endif
|
||||
|
||||
void C_MTXCopy(const Mtx src, Mtx dst)
|
||||
{
|
||||
|
||||
if (src == dst) {
|
||||
return;
|
||||
void C_MTXCopy(const Mtx src, Mtx dst) {
|
||||
ASSERTMSGLINE(250, src, "MTXCopy(): NULL MtxPtr 'src' ");
|
||||
ASSERTMSGLINE(251, dst, "MTXCopy(): NULL MtxPtr 'dst' ");
|
||||
if (src != dst) {
|
||||
dst[0][0] = src[0][0];
|
||||
dst[0][1] = src[0][1];
|
||||
dst[0][2] = src[0][2];
|
||||
dst[0][3] = src[0][3];
|
||||
dst[1][0] = src[1][0];
|
||||
dst[1][1] = src[1][1];
|
||||
dst[1][2] = src[1][2];
|
||||
dst[1][3] = src[1][3];
|
||||
dst[2][0] = src[2][0];
|
||||
dst[2][1] = src[2][1];
|
||||
dst[2][2] = src[2][2];
|
||||
dst[2][3] = src[2][3];
|
||||
}
|
||||
|
||||
dst[0][0] = src[0][0];
|
||||
dst[0][1] = src[0][1];
|
||||
dst[0][2] = src[0][2];
|
||||
dst[0][3] = src[0][3];
|
||||
|
||||
dst[1][0] = src[1][0];
|
||||
dst[1][1] = src[1][1];
|
||||
dst[1][2] = src[1][2];
|
||||
dst[1][3] = src[1][3];
|
||||
|
||||
dst[2][0] = src[2][0];
|
||||
dst[2][1] = src[2][1];
|
||||
dst[2][2] = src[2][2];
|
||||
dst[2][3] = src[2][3];
|
||||
}
|
||||
|
||||
#ifdef GEKKO
|
||||
|
|
@ -88,33 +89,34 @@ asm void PSMTXCopy(const register Mtx src, register Mtx dst)
|
|||
}
|
||||
#endif
|
||||
|
||||
void C_MTXConcat(const Mtx a, const Mtx b, Mtx ab)
|
||||
{
|
||||
void C_MTXConcat(const Mtx a, const Mtx b, Mtx ab) {
|
||||
Mtx mTmp;
|
||||
MtxPtr m;
|
||||
|
||||
if ((ab == a) || (ab == b)) {
|
||||
m = mTmp;
|
||||
}
|
||||
ASSERTMSGLINE(324, a, "MTXConcat(): NULL MtxPtr 'a' ");
|
||||
ASSERTMSGLINE(325, b, "MTXConcat(): NULL MtxPtr 'b' ");
|
||||
ASSERTMSGLINE(326, ab, "MTXConcat(): NULL MtxPtr 'ab' ");
|
||||
|
||||
else {
|
||||
if (ab == a || ab == b) {
|
||||
m = mTmp;
|
||||
} else {
|
||||
m = ab;
|
||||
}
|
||||
|
||||
m[0][0] = a[0][0] * b[0][0] + a[0][1] * b[1][0] + a[0][2] * b[2][0];
|
||||
m[0][1] = a[0][0] * b[0][1] + a[0][1] * b[1][1] + a[0][2] * b[2][1];
|
||||
m[0][2] = a[0][0] * b[0][2] + a[0][1] * b[1][2] + a[0][2] * b[2][2];
|
||||
m[0][3] = a[0][0] * b[0][3] + a[0][1] * b[1][3] + a[0][2] * b[2][3] + a[0][3];
|
||||
m[0][0] = 0 + a[0][2] * b[2][0] + ((a[0][0] * b[0][0]) + (a[0][1] * b[1][0]));
|
||||
m[0][1] = 0 + a[0][2] * b[2][1] + ((a[0][0] * b[0][1]) + (a[0][1] * b[1][1]));
|
||||
m[0][2] = 0 + a[0][2] * b[2][2] + ((a[0][0] * b[0][2]) + (a[0][1] * b[1][2]));
|
||||
m[0][3] = a[0][3] + (a[0][2] * b[2][3] + (a[0][0] * b[0][3] + (a[0][1] * b[1][3])));
|
||||
|
||||
m[1][0] = a[1][0] * b[0][0] + a[1][1] * b[1][0] + a[1][2] * b[2][0];
|
||||
m[1][1] = a[1][0] * b[0][1] + a[1][1] * b[1][1] + a[1][2] * b[2][1];
|
||||
m[1][2] = a[1][0] * b[0][2] + a[1][1] * b[1][2] + a[1][2] * b[2][2];
|
||||
m[1][3] = a[1][0] * b[0][3] + a[1][1] * b[1][3] + a[1][2] * b[2][3] + a[1][3];
|
||||
m[1][0] = 0 + a[1][2] * b[2][0] + ((a[1][0] * b[0][0]) + (a[1][1] * b[1][0]));
|
||||
m[1][1] = 0 + a[1][2] * b[2][1] + ((a[1][0] * b[0][1]) + (a[1][1] * b[1][1]));
|
||||
m[1][2] = 0 + a[1][2] * b[2][2] + ((a[1][0] * b[0][2]) + (a[1][1] * b[1][2]));
|
||||
m[1][3] = a[1][3] + (a[1][2] * b[2][3] + (a[1][0] * b[0][3] + (a[1][1] * b[1][3])));
|
||||
|
||||
m[2][0] = a[2][0] * b[0][0] + a[2][1] * b[1][0] + a[2][2] * b[2][0];
|
||||
m[2][1] = a[2][0] * b[0][1] + a[2][1] * b[1][1] + a[2][2] * b[2][1];
|
||||
m[2][2] = a[2][0] * b[0][2] + a[2][1] * b[1][2] + a[2][2] * b[2][2];
|
||||
m[2][3] = a[2][0] * b[0][3] + a[2][1] * b[1][3] + a[2][2] * b[2][3] + a[2][3];
|
||||
m[2][0] = 0 + a[2][2] * b[2][0] + ((a[2][0] * b[0][0]) + (a[2][1] * b[1][0]));
|
||||
m[2][1] = 0 + a[2][2] * b[2][1] + ((a[2][0] * b[0][1]) + (a[2][1] * b[1][1]));
|
||||
m[2][2] = 0 + a[2][2] * b[2][2] + ((a[2][0] * b[0][2]) + (a[2][1] * b[1][2]));
|
||||
m[2][3] = a[2][3] + (a[2][2] * b[2][3] + (a[2][0] * b[0][3] + (a[2][1] * b[1][3])));
|
||||
|
||||
if (m == mTmp) {
|
||||
C_MTXCopy(mTmp, ab);
|
||||
|
|
@ -222,12 +224,16 @@ asm void PSMTXConcat(const register Mtx mA, const register Mtx mB, register Mtx
|
|||
}
|
||||
#endif
|
||||
|
||||
void C_MTXConcatArray(const Mtx a, const Mtx *srcBase, Mtx *dstBase, u32 count)
|
||||
{
|
||||
void C_MTXConcatArray(const Mtx a, const Mtx* srcBase, Mtx* dstBase, u32 count) {
|
||||
u32 i;
|
||||
|
||||
ASSERTMSGLINE(580, a != 0, "MTXConcatArray(): NULL MtxPtr 'a' ");
|
||||
ASSERTMSGLINE(581, srcBase != 0, "MTXConcatArray(): NULL MtxPtr 'srcBase' ");
|
||||
ASSERTMSGLINE(582, dstBase != 0, "MTXConcatArray(): NULL MtxPtr 'dstBase' ");
|
||||
ASSERTMSGLINE(583, count > 1, "MTXConcatArray(): count must be greater than 1.");
|
||||
|
||||
for (i = 0; i < count; i++) {
|
||||
C_MTXConcat(a, *srcBase, *dstBase);
|
||||
|
||||
srcBase++;
|
||||
dstBase++;
|
||||
}
|
||||
|
|
@ -351,31 +357,31 @@ _loop:
|
|||
|
||||
#endif
|
||||
|
||||
void C_MTXTranspose(const Mtx src, Mtx xPose)
|
||||
{
|
||||
void C_MTXTranspose(const Mtx src, Mtx xPose) {
|
||||
Mtx mTmp;
|
||||
MtxPtr m;
|
||||
|
||||
ASSERTMSGLINE(851, src, "MTXTranspose(): NULL MtxPtr 'src' ");
|
||||
ASSERTMSGLINE(852, xPose, "MTXTranspose(): NULL MtxPtr 'xPose' ");
|
||||
|
||||
if (src == xPose) {
|
||||
m = mTmp;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
m = xPose;
|
||||
}
|
||||
|
||||
m[0][0] = src[0][0];
|
||||
m[0][1] = src[1][0];
|
||||
m[0][2] = src[2][0];
|
||||
m[0][3] = 0.0f;
|
||||
m[0][3] = 0;
|
||||
m[1][0] = src[0][1];
|
||||
m[1][1] = src[1][1];
|
||||
m[1][2] = src[2][1];
|
||||
m[1][3] = 0.0f;
|
||||
m[1][3] = 0;
|
||||
m[2][0] = src[0][2];
|
||||
m[2][1] = src[1][2];
|
||||
m[2][2] = src[2][2];
|
||||
m[2][3] = 0.0f;
|
||||
|
||||
m[2][3] = 0;
|
||||
if (m == mTmp) {
|
||||
C_MTXCopy(mTmp, xPose);
|
||||
}
|
||||
|
|
@ -413,48 +419,48 @@ void PSMTXTranspose(const register Mtx src, register Mtx xPose)
|
|||
}
|
||||
#endif
|
||||
|
||||
u32 C_MTXInverse(const Mtx src, Mtx inv)
|
||||
{
|
||||
u32 C_MTXInverse(const Mtx src, Mtx inv) {
|
||||
Mtx mTmp;
|
||||
MtxPtr m;
|
||||
f32 det;
|
||||
|
||||
ASSERTMSGLINE(950, src, "MTXInverse(): NULL MtxPtr 'src' ");
|
||||
ASSERTMSGLINE(951, inv, "MTXInverse(): NULL MtxPtr 'inv' ");
|
||||
|
||||
if (src == inv) {
|
||||
m = mTmp;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
m = inv;
|
||||
}
|
||||
|
||||
det = src[0][0] * src[1][1] * src[2][2] + src[0][1] * src[1][2] * src[2][0] + src[0][2] * src[1][0] * src[2][1]
|
||||
- src[2][0] * src[1][1] * src[0][2] - src[1][0] * src[0][1] * src[2][2] - src[0][0] * src[2][1] * src[1][2];
|
||||
|
||||
if (det == 0.0f) {
|
||||
det = ((((src[2][1] * (src[0][2] * src[1][0]))
|
||||
+ ((src[2][2] * (src[0][0] * src[1][1]))
|
||||
+ (src[2][0] * (src[0][1] * src[1][2]))))
|
||||
- (src[0][2] * (src[2][0] * src[1][1])))
|
||||
- (src[2][2] * (src[1][0] * src[0][1])))
|
||||
- (src[1][2] * (src[0][0] * src[2][1]));
|
||||
if (0 == det) {
|
||||
return 0;
|
||||
}
|
||||
det = 1 / det;
|
||||
m[0][0] = (det * +((src[1][1] * src[2][2]) - (src[2][1] * src[1][2])));
|
||||
m[0][1] = (det * -((src[0][1] * src[2][2]) - (src[2][1] * src[0][2])));
|
||||
m[0][2] = (det * +((src[0][1] * src[1][2]) - (src[1][1] * src[0][2])));
|
||||
|
||||
det = 1.0f / det;
|
||||
m[1][0] = (det * -((src[1][0] * src[2][2]) - (src[2][0] * src[1][2])));
|
||||
m[1][1] = (det * +((src[0][0] * src[2][2]) - (src[2][0] * src[0][2])));
|
||||
m[1][2] = (det * -((src[0][0] * src[1][2]) - (src[1][0] * src[0][2])));
|
||||
|
||||
m[0][0] = (src[1][1] * src[2][2] - src[2][1] * src[1][2]) * det;
|
||||
m[0][1] = -(src[0][1] * src[2][2] - src[2][1] * src[0][2]) * det;
|
||||
m[0][2] = (src[0][1] * src[1][2] - src[1][1] * src[0][2]) * det;
|
||||
m[2][0] = (det * +((src[1][0] * src[2][1]) - (src[2][0] * src[1][1])));
|
||||
m[2][1] = (det * -((src[0][0] * src[2][1]) - (src[2][0] * src[0][1])));
|
||||
m[2][2] = (det * +((src[0][0] * src[1][1]) - (src[1][0] * src[0][1])));
|
||||
|
||||
m[1][0] = -(src[1][0] * src[2][2] - src[2][0] * src[1][2]) * det;
|
||||
m[1][1] = (src[0][0] * src[2][2] - src[2][0] * src[0][2]) * det;
|
||||
m[1][2] = -(src[0][0] * src[1][2] - src[1][0] * src[0][2]) * det;
|
||||
|
||||
m[2][0] = (src[1][0] * src[2][1] - src[2][0] * src[1][1]) * det;
|
||||
m[2][1] = -(src[0][0] * src[2][1] - src[2][0] * src[0][1]) * det;
|
||||
m[2][2] = (src[0][0] * src[1][1] - src[1][0] * src[0][1]) * det;
|
||||
|
||||
m[0][3] = -m[0][0] * src[0][3] - m[0][1] * src[1][3] - m[0][2] * src[2][3];
|
||||
m[1][3] = -m[1][0] * src[0][3] - m[1][1] * src[1][3] - m[1][2] * src[2][3];
|
||||
m[2][3] = -m[2][0] * src[0][3] - m[2][1] * src[1][3] - m[2][2] * src[2][3];
|
||||
m[0][3] = ((-m[0][0] * src[0][3]) - (m[0][1] * src[1][3])) - (m[0][2] * src[2][3]);
|
||||
m[1][3] = ((-m[1][0] * src[0][3]) - (m[1][1] * src[1][3])) - (m[1][2] * src[2][3]);
|
||||
m[2][3] = ((-m[2][0] * src[0][3]) - (m[2][1] * src[1][3])) - (m[2][2] * src[2][3]);
|
||||
|
||||
if (m == mTmp) {
|
||||
C_MTXCopy(mTmp, inv);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
@ -531,48 +537,48 @@ _regular:
|
|||
}
|
||||
#endif
|
||||
|
||||
u32 C_MTXInvXpose(const Mtx src, Mtx invX)
|
||||
{
|
||||
u32 C_MTXInvXpose(const Mtx src, Mtx invX) {
|
||||
Mtx mTmp;
|
||||
MtxPtr m;
|
||||
f32 det;
|
||||
|
||||
ASSERTMSGLINE(1185, src, "MTXInvXpose(): NULL MtxPtr 'src' ");
|
||||
ASSERTMSGLINE(1186, invX, "MTXInvXpose(): NULL MtxPtr 'invX' ");
|
||||
|
||||
if (src == invX) {
|
||||
m = mTmp;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
m = invX;
|
||||
}
|
||||
|
||||
det = src[0][0] * src[1][1] * src[2][2] + src[0][1] * src[1][2] * src[2][0] + src[0][2] * src[1][0] * src[2][1]
|
||||
- src[2][0] * src[1][1] * src[0][2] - src[1][0] * src[0][1] * src[2][2] - src[0][0] * src[2][1] * src[1][2];
|
||||
|
||||
if (det == 0.0f) {
|
||||
det = ((((src[2][1] * (src[0][2] * src[1][0]))
|
||||
+ ((src[2][2] * (src[0][0] * src[1][1]))
|
||||
+ (src[2][0] * (src[0][1] * src[1][2]))))
|
||||
- (src[0][2] * (src[2][0] * src[1][1])))
|
||||
- (src[2][2] * (src[1][0] * src[0][1])))
|
||||
- (src[1][2] * (src[0][0] * src[2][1]));
|
||||
if (0 == det) {
|
||||
return 0;
|
||||
}
|
||||
det = 1 / det;
|
||||
m[0][0] = (det * +((src[1][1] * src[2][2]) - (src[2][1] * src[1][2])));
|
||||
m[0][1] = (det * -((src[1][0] * src[2][2]) - (src[2][0] * src[1][2])));
|
||||
m[0][2] = (det * +((src[1][0] * src[2][1]) - (src[2][0] * src[1][1])));
|
||||
|
||||
det = 1.0f / det;
|
||||
m[1][0] = (det * -((src[0][1] * src[2][2]) - (src[2][1] * src[0][2])));
|
||||
m[1][1] = (det * +((src[0][0] * src[2][2]) - (src[2][0] * src[0][2])));
|
||||
m[1][2] = (det * -((src[0][0] * src[2][1]) - (src[2][0] * src[0][1])));
|
||||
|
||||
m[0][0] = (src[1][1] * src[2][2] - src[2][1] * src[1][2]) * det;
|
||||
m[0][1] = -(src[1][0] * src[2][2] - src[2][0] * src[1][2]) * det;
|
||||
m[0][2] = (src[1][0] * src[2][1] - src[2][0] * src[1][1]) * det;
|
||||
m[2][0] = (det * +((src[0][1] * src[1][2]) - (src[1][1] * src[0][2])));
|
||||
m[2][1] = (det * -((src[0][0] * src[1][2]) - (src[1][0] * src[0][2])));
|
||||
m[2][2] = (det * +((src[0][0] * src[1][1]) - (src[1][0] * src[0][1])));
|
||||
|
||||
m[1][0] = -(src[0][1] * src[2][2] - src[2][1] * src[0][2]) * det;
|
||||
m[1][1] = (src[0][0] * src[2][2] - src[2][0] * src[0][2]) * det;
|
||||
m[1][2] = -(src[0][0] * src[2][1] - src[2][0] * src[0][1]) * det;
|
||||
|
||||
m[2][0] = (src[0][1] * src[1][2] - src[1][1] * src[0][2]) * det;
|
||||
m[2][1] = -(src[0][0] * src[1][2] - src[1][0] * src[0][2]) * det;
|
||||
m[2][2] = (src[0][0] * src[1][1] - src[1][0] * src[0][1]) * det;
|
||||
|
||||
m[0][3] = 0.0F;
|
||||
m[1][3] = 0.0F;
|
||||
m[2][3] = 0.0F;
|
||||
m[0][3] = 0;
|
||||
m[1][3] = 0;
|
||||
m[2][3] = 0;
|
||||
|
||||
if (m == mTmp) {
|
||||
C_MTXCopy(mTmp, invX);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
@ -638,10 +644,11 @@ _regular:
|
|||
}
|
||||
#endif
|
||||
|
||||
void C_MTXRotRad(Mtx m, char axis, f32 rad)
|
||||
{
|
||||
void C_MTXRotRad(Mtx m, char axis, f32 rad) {
|
||||
f32 sinA;
|
||||
f32 cosA;
|
||||
|
||||
f32 sinA, cosA;
|
||||
ASSERTMSGLINE(1447, m, "MTXRotRad(): NULL MtxPtr 'm' ");
|
||||
sinA = sinf(rad);
|
||||
cosA = cosf(rad);
|
||||
C_MTXRotTrig(m, axis, sinA, cosA);
|
||||
|
|
@ -659,60 +666,57 @@ void PSMTXRotRad(Mtx m, char axis, f32 rad)
|
|||
}
|
||||
#endif
|
||||
|
||||
void C_MTXRotTrig(Mtx m, char axis, f32 sinA, f32 cosA)
|
||||
{
|
||||
switch (axis) {
|
||||
|
||||
case 'x':
|
||||
case 'X':
|
||||
m[0][0] = 1.0f;
|
||||
m[0][1] = 0.0f;
|
||||
m[0][2] = 0.0f;
|
||||
m[0][3] = 0.0f;
|
||||
m[1][0] = 0.0f;
|
||||
m[1][1] = cosA;
|
||||
m[1][2] = -sinA;
|
||||
m[1][3] = 0.0f;
|
||||
m[2][0] = 0.0f;
|
||||
m[2][1] = sinA;
|
||||
m[2][2] = cosA;
|
||||
m[2][3] = 0.0f;
|
||||
break;
|
||||
|
||||
case 'y':
|
||||
case 'Y':
|
||||
m[0][0] = cosA;
|
||||
m[0][1] = 0.0f;
|
||||
m[0][2] = sinA;
|
||||
m[0][3] = 0.0f;
|
||||
m[1][0] = 0.0f;
|
||||
m[1][1] = 1.0f;
|
||||
m[1][2] = 0.0f;
|
||||
m[1][3] = 0.0f;
|
||||
m[2][0] = -sinA;
|
||||
m[2][1] = 0.0f;
|
||||
m[2][2] = cosA;
|
||||
m[2][3] = 0.0f;
|
||||
break;
|
||||
|
||||
case 'z':
|
||||
case 'Z':
|
||||
m[0][0] = cosA;
|
||||
m[0][1] = -sinA;
|
||||
m[0][2] = 0.0f;
|
||||
m[0][3] = 0.0f;
|
||||
m[1][0] = sinA;
|
||||
m[1][1] = cosA;
|
||||
m[1][2] = 0.0f;
|
||||
m[1][3] = 0.0f;
|
||||
m[2][0] = 0.0f;
|
||||
m[2][1] = 0.0f;
|
||||
m[2][2] = 1.0f;
|
||||
m[2][3] = 0.0f;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
void C_MTXRotTrig(Mtx m, char axis, f32 sinA, f32 cosA) {
|
||||
ASSERTMSGLINE(1502, m, "MTXRotTrig(): NULL MtxPtr 'm' ");
|
||||
switch(axis) {
|
||||
case 'x':
|
||||
case 'X':
|
||||
m[0][0] = 1;
|
||||
m[0][1] = 0;
|
||||
m[0][2] = 0;
|
||||
m[0][3] = 0;
|
||||
m[1][0] = 0;
|
||||
m[1][1] = cosA;
|
||||
m[1][2] = -sinA;
|
||||
m[1][3] = 0;
|
||||
m[2][0] = 0;
|
||||
m[2][1] = sinA;
|
||||
m[2][2] = cosA;
|
||||
m[2][3] = 0;
|
||||
break;
|
||||
case 'y':
|
||||
case 'Y':
|
||||
m[0][0] = cosA;
|
||||
m[0][1] = 0;
|
||||
m[0][2] = sinA;
|
||||
m[0][3] = 0;
|
||||
m[1][0] = 0;
|
||||
m[1][1] = 1;
|
||||
m[1][2] = 0;
|
||||
m[1][3] = 0;
|
||||
m[2][0] = -sinA;
|
||||
m[2][1] = 0;
|
||||
m[2][2] = cosA;
|
||||
m[2][3] = 0;
|
||||
break;
|
||||
case 'z':
|
||||
case 'Z':
|
||||
m[0][0] = cosA;
|
||||
m[0][1] = -sinA;
|
||||
m[0][2] = 0;
|
||||
m[0][3] = 0;
|
||||
m[1][0] = sinA;
|
||||
m[1][1] = cosA;
|
||||
m[1][2] = 0;
|
||||
m[1][3] = 0;
|
||||
m[2][0] = 0;
|
||||
m[2][1] = 0;
|
||||
m[2][2] = 1;
|
||||
m[2][3] = 0;
|
||||
break;
|
||||
default:
|
||||
ASSERTMSGLINE(1529, FALSE, "MTXRotTrig(): invalid 'axis' value ");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -780,42 +784,43 @@ _end:
|
|||
|
||||
#endif
|
||||
|
||||
void C_MTXRotAxisRad(Mtx m, const Vec *axis, f32 rad)
|
||||
{
|
||||
void C_MTXRotAxisRad(Mtx m, const Vec* axis, f32 rad) {
|
||||
Vec vN;
|
||||
f32 s, c;
|
||||
f32 s;
|
||||
f32 c;
|
||||
f32 t;
|
||||
f32 x, y, z;
|
||||
f32 xSq, ySq, zSq;
|
||||
f32 x;
|
||||
f32 y;
|
||||
f32 z;
|
||||
f32 xSq;
|
||||
f32 ySq;
|
||||
f32 zSq;
|
||||
|
||||
ASSERTMSGLINE(1677, m, "MTXRotAxisRad(): NULL MtxPtr 'm' ");
|
||||
ASSERTMSGLINE(1678, axis, "MTXRotAxisRad(): NULL VecPtr 'axis' ");
|
||||
|
||||
s = sinf(rad);
|
||||
c = cosf(rad);
|
||||
t = 1.0f - c;
|
||||
|
||||
t = 1 - c;
|
||||
C_VECNormalize(axis, &vN);
|
||||
|
||||
x = vN.x;
|
||||
y = vN.y;
|
||||
z = vN.z;
|
||||
|
||||
xSq = x * x;
|
||||
ySq = y * y;
|
||||
zSq = z * z;
|
||||
|
||||
m[0][0] = (t * xSq) + (c);
|
||||
m[0][1] = (t * x * y) - (s * z);
|
||||
m[0][2] = (t * x * z) + (s * y);
|
||||
m[0][3] = 0.0f;
|
||||
|
||||
m[1][0] = (t * x * y) + (s * z);
|
||||
m[1][1] = (t * ySq) + (c);
|
||||
m[1][2] = (t * y * z) - (s * x);
|
||||
m[1][3] = 0.0f;
|
||||
|
||||
m[2][0] = (t * x * z) - (s * y);
|
||||
m[2][1] = (t * y * z) + (s * x);
|
||||
m[2][2] = (t * zSq) + (c);
|
||||
m[2][3] = 0.0f;
|
||||
xSq = (x * x);
|
||||
ySq = (y * y);
|
||||
zSq = (z * z);
|
||||
m[0][0] = (c + (t * xSq));
|
||||
m[0][1] = (y * (t * x)) - (s * z);
|
||||
m[0][2] = (z * (t * x)) + (s * y);
|
||||
m[0][3] = 0;
|
||||
m[1][0] = ((y * (t * x)) + (s * z));
|
||||
m[1][1] = (c + (t * ySq));
|
||||
m[1][2] = ((z * (t * y)) - (s * x));
|
||||
m[1][3] = 0;
|
||||
m[2][0] = ((z * (t * x)) - (s * y));
|
||||
m[2][1] = ((z * (t * y)) + (s * x));
|
||||
m[2][2] = (c + (t * zSq));
|
||||
m[2][3] = 0;
|
||||
}
|
||||
|
||||
#ifdef GEKKO
|
||||
|
|
@ -875,19 +880,19 @@ void PSMTXRotAxisRad(register Mtx m, const Vec *axis, register f32 rad)
|
|||
|
||||
#endif
|
||||
|
||||
void C_MTXTrans(Mtx m, f32 xT, f32 yT, f32 zT)
|
||||
{
|
||||
m[0][0] = 1.0f;
|
||||
m[0][1] = 0.0f;
|
||||
m[0][2] = 0.0f;
|
||||
void C_MTXTrans(Mtx m, f32 xT, f32 yT, f32 zT) {
|
||||
ASSERTMSGLINE(1866, m, "MTXTrans(): NULL MtxPtr 'm' ");
|
||||
m[0][0] = 1;
|
||||
m[0][1] = 0;
|
||||
m[0][2] = 0;
|
||||
m[0][3] = xT;
|
||||
m[1][0] = 0.0f;
|
||||
m[1][1] = 1.0f;
|
||||
m[1][2] = 0.0f;
|
||||
m[1][0] = 0;
|
||||
m[1][1] = 1;
|
||||
m[1][2] = 0;
|
||||
m[1][3] = yT;
|
||||
m[2][0] = 0.0f;
|
||||
m[2][1] = 0.0f;
|
||||
m[2][2] = 1.0f;
|
||||
m[2][0] = 0;
|
||||
m[2][1] = 0;
|
||||
m[2][2] = 1;
|
||||
m[2][3] = zT;
|
||||
}
|
||||
|
||||
|
|
@ -914,8 +919,10 @@ void PSMTXTrans(register Mtx m, register f32 xT, register f32 yT, register f32 z
|
|||
}
|
||||
#endif
|
||||
|
||||
void C_MTXTransApply(const Mtx src, Mtx dst, f32 xT, f32 yT, f32 zT)
|
||||
{
|
||||
void C_MTXTransApply(const Mtx src, Mtx dst, f32 xT, f32 yT, f32 zT) {
|
||||
ASSERTMSGLINE(1933, src, "MTXTransApply(): NULL MtxPtr 'src' ");
|
||||
ASSERTMSGLINE(1934, dst, "MTXTransApply(): NULL MtxPtr 'src' "); //! wrong assert string
|
||||
|
||||
if (src != dst) {
|
||||
dst[0][0] = src[0][0];
|
||||
dst[0][1] = src[0][1];
|
||||
|
|
@ -928,9 +935,9 @@ void C_MTXTransApply(const Mtx src, Mtx dst, f32 xT, f32 yT, f32 zT)
|
|||
dst[2][2] = src[2][2];
|
||||
}
|
||||
|
||||
dst[0][3] = src[0][3] + xT;
|
||||
dst[1][3] = src[1][3] + yT;
|
||||
dst[2][3] = src[2][3] + zT;
|
||||
dst[0][3] = (src[0][3] + xT);
|
||||
dst[1][3] = (src[1][3] + yT);
|
||||
dst[2][3] = (src[2][3] + zT);
|
||||
}
|
||||
|
||||
#ifdef GEKKO
|
||||
|
|
@ -961,20 +968,20 @@ asm void PSMTXTransApply(const register Mtx src, register Mtx dst, register f32
|
|||
}
|
||||
#endif
|
||||
|
||||
void C_MTXScale(Mtx m, f32 xS, f32 yS, f32 zS)
|
||||
{
|
||||
void C_MTXScale(Mtx m, f32 xS, f32 yS, f32 zS) {
|
||||
ASSERTMSGLINE(2008, m, "MTXScale(): NULL MtxPtr 'm' ");
|
||||
m[0][0] = xS;
|
||||
m[0][1] = 0.0f;
|
||||
m[0][2] = 0.0f;
|
||||
m[0][3] = 0.0f;
|
||||
m[1][0] = 0.0f;
|
||||
m[0][1] = 0;
|
||||
m[0][2] = 0;
|
||||
m[0][3] = 0;
|
||||
m[1][0] = 0;
|
||||
m[1][1] = yS;
|
||||
m[1][2] = 0.0f;
|
||||
m[1][3] = 0.0f;
|
||||
m[2][0] = 0.0f;
|
||||
m[2][1] = 0.0f;
|
||||
m[1][2] = 0;
|
||||
m[1][3] = 0;
|
||||
m[2][0] = 0;
|
||||
m[2][1] = 0;
|
||||
m[2][2] = zS;
|
||||
m[2][3] = 0.0f;
|
||||
m[2][3] = 0;
|
||||
}
|
||||
|
||||
#ifdef GEKKO
|
||||
|
|
@ -997,22 +1004,21 @@ void PSMTXScale(register Mtx m, register f32 xS, register f32 yS, register f32 z
|
|||
}
|
||||
#endif
|
||||
|
||||
void C_MTXScaleApply(const Mtx src, Mtx dst, f32 xS, f32 yS, f32 zS)
|
||||
{
|
||||
dst[0][0] = src[0][0] * xS;
|
||||
dst[0][1] = src[0][1] * xS;
|
||||
dst[0][2] = src[0][2] * xS;
|
||||
dst[0][3] = src[0][3] * xS;
|
||||
|
||||
dst[1][0] = src[1][0] * yS;
|
||||
dst[1][1] = src[1][1] * yS;
|
||||
dst[1][2] = src[1][2] * yS;
|
||||
dst[1][3] = src[1][3] * yS;
|
||||
|
||||
dst[2][0] = src[2][0] * zS;
|
||||
dst[2][1] = src[2][1] * zS;
|
||||
dst[2][2] = src[2][2] * zS;
|
||||
dst[2][3] = src[2][3] * zS;
|
||||
void C_MTXScaleApply(const Mtx src, Mtx dst, f32 xS, f32 yS, f32 zS) {
|
||||
ASSERTMSGLINE(2070, src, "MTXScaleApply(): NULL MtxPtr 'src' ");
|
||||
ASSERTMSGLINE(2071, dst, "MTXScaleApply(): NULL MtxPtr 'dst' ");
|
||||
dst[0][0] = (src[0][0] * xS);
|
||||
dst[0][1] = (src[0][1] * xS);
|
||||
dst[0][2] = (src[0][2] * xS);
|
||||
dst[0][3] = (src[0][3] * xS);
|
||||
dst[1][0] = (src[1][0] * yS);
|
||||
dst[1][1] = (src[1][1] * yS);
|
||||
dst[1][2] = (src[1][2] * yS);
|
||||
dst[1][3] = (src[1][3] * yS);
|
||||
dst[2][0] = (src[2][0] * zS);
|
||||
dst[2][1] = (src[2][1] * zS);
|
||||
dst[2][2] = (src[2][2] * zS);
|
||||
dst[2][3] = (src[2][3] * zS);
|
||||
}
|
||||
|
||||
#ifdef GEKKO
|
||||
|
|
@ -1046,12 +1052,25 @@ asm void PSMTXScaleApply(const register Mtx src, register Mtx dst, register f32
|
|||
}
|
||||
#endif
|
||||
|
||||
void C_MTXQuat(Mtx m, const Quaternion *q)
|
||||
{
|
||||
|
||||
f32 s, xs, ys, zs, wx, wy, wz, xx, xy, xz, yy, yz, zz;
|
||||
s = 2.0f / ((q->x * q->x) + (q->y * q->y) + (q->z * q->z) + (q->w * q->w));
|
||||
void C_MTXQuat(Mtx m, const Quaternion* q) {
|
||||
f32 s;
|
||||
f32 xs;
|
||||
f32 ys;
|
||||
f32 zs;
|
||||
f32 wx;
|
||||
f32 wy;
|
||||
f32 wz;
|
||||
f32 xx;
|
||||
f32 xy;
|
||||
f32 xz;
|
||||
f32 yy;
|
||||
f32 yz;
|
||||
f32 zz;
|
||||
|
||||
ASSERTMSGLINE(2145, m, "MTXQuat(): NULL MtxPtr 'm' ");
|
||||
ASSERTMSGLINE(2146, q, "MTXQuat(): NULL QuaternionPtr 'q' ");
|
||||
ASSERTMSGLINE(2147, q->x || q->y || q->z || q->w, "MTXQuat(): zero-value quaternion ");
|
||||
s = 2 / ((q->w * q->w) + ((q->z * q->z) + ((q->x * q->x) + (q->y * q->y))));
|
||||
xs = q->x * s;
|
||||
ys = q->y * s;
|
||||
zs = q->z * s;
|
||||
|
|
@ -1064,21 +1083,18 @@ void C_MTXQuat(Mtx m, const Quaternion *q)
|
|||
yy = q->y * ys;
|
||||
yz = q->y * zs;
|
||||
zz = q->z * zs;
|
||||
|
||||
m[0][0] = 1.0f - (yy + zz);
|
||||
m[0][1] = xy - wz;
|
||||
m[0][2] = xz + wy;
|
||||
m[0][3] = 0.0f;
|
||||
|
||||
m[1][0] = xy + wz;
|
||||
m[1][1] = 1.0f - (xx + zz);
|
||||
m[1][2] = yz - wx;
|
||||
m[1][3] = 0.0f;
|
||||
|
||||
m[2][0] = xz - wy;
|
||||
m[2][1] = yz + wx;
|
||||
m[2][2] = 1.0f - (xx + yy);
|
||||
m[2][3] = 0.0f;
|
||||
m[0][0] = (1 - (yy + zz));
|
||||
m[0][1] = (xy - wz);
|
||||
m[0][2] = (xz + wy);
|
||||
m[0][3] = 0;
|
||||
m[1][0] = (xy + wz);
|
||||
m[1][1] = (1 - (xx + zz));
|
||||
m[1][2] = (yz - wx);
|
||||
m[1][3] = 0;
|
||||
m[2][0] = (xz - wy);
|
||||
m[2][1] = (yz + wx);
|
||||
m[2][2] = (1 - (xx + yy));
|
||||
m[2][3] = 0;
|
||||
}
|
||||
|
||||
#ifdef GEKKO
|
||||
|
|
@ -1136,29 +1152,28 @@ void PSMTXQuat(register Mtx m, const register Quaternion *q)
|
|||
}
|
||||
#endif
|
||||
|
||||
void C_MTXReflect(Mtx m, const Vec *p, const Vec *n)
|
||||
{
|
||||
f32 vxy, vxz, vyz, pdotn;
|
||||
void C_MTXReflect(Mtx m, const Vec* p, const Vec* n) {
|
||||
f32 vxy;
|
||||
f32 vxz;
|
||||
f32 vyz;
|
||||
f32 pdotn;
|
||||
|
||||
vxy = -2.0f * n->x * n->y;
|
||||
vxz = -2.0f * n->x * n->z;
|
||||
vyz = -2.0f * n->y * n->z;
|
||||
pdotn = 2.0f * C_VECDotProduct(p, n);
|
||||
|
||||
m[0][0] = 1.0f - 2.0f * n->x * n->x;
|
||||
vxy = -2 * n->x * n->y;
|
||||
vxz = -2 * n->x * n->z;
|
||||
vyz = -2 * n->y * n->z;
|
||||
pdotn = 2 * C_VECDotProduct(p, n);
|
||||
m[0][0] = (1 - (2 * n->x * n->x));
|
||||
m[0][1] = vxy;
|
||||
m[0][2] = vxz;
|
||||
m[0][3] = pdotn * n->x;
|
||||
|
||||
m[0][3] = (pdotn * n->x);
|
||||
m[1][0] = vxy;
|
||||
m[1][1] = 1.0f - 2.0f * n->y * n->y;
|
||||
m[1][1] = (1 - (2 * n->y * n->y));
|
||||
m[1][2] = vyz;
|
||||
m[1][3] = pdotn * n->y;
|
||||
|
||||
m[1][3] = (pdotn * n->y);
|
||||
m[2][0] = vxz;
|
||||
m[2][1] = vyz;
|
||||
m[2][2] = 1.0f - 2.0f * n->z * n->z;
|
||||
m[2][3] = pdotn * n->z;
|
||||
m[2][2] = (1 - (2 * n->z * n->z));
|
||||
m[2][3] = (pdotn * n->z);
|
||||
}
|
||||
|
||||
#ifdef GEKKO
|
||||
|
|
@ -1202,9 +1217,15 @@ void PSMTXReflect(register Mtx m, const register Vec *p, const register Vec *n)
|
|||
}
|
||||
#endif
|
||||
|
||||
void C_MTXLookAt(Mtx m, const Vec *camPos, const Vec *camUp, const Vec *target)
|
||||
{
|
||||
Vec vLook, vRight, vUp;
|
||||
void C_MTXLookAt(Mtx m, const Point3d* camPos, const Vec* camUp, const Point3d* target) {
|
||||
Vec vLook;
|
||||
Vec vRight;
|
||||
Vec vUp;
|
||||
|
||||
ASSERTMSGLINE(2438, m, "MTXLookAt(): NULL MtxPtr 'm' ");
|
||||
ASSERTMSGLINE(2439, camPos, "MTXLookAt(): NULL VecPtr 'camPos' ");
|
||||
ASSERTMSGLINE(2440, camUp, "MTXLookAt(): NULL VecPtr 'camUp' ");
|
||||
ASSERTMSGLINE(2441, target, "MTXLookAt(): NULL Point3dPtr 'target' ");
|
||||
|
||||
vLook.x = camPos->x - target->x;
|
||||
vLook.y = camPos->y - target->y;
|
||||
|
|
@ -1213,88 +1234,164 @@ void C_MTXLookAt(Mtx m, const Vec *camPos, const Vec *camUp, const Vec *target)
|
|||
VECCrossProduct(camUp, &vLook, &vRight);
|
||||
VECNormalize(&vRight, &vRight);
|
||||
VECCrossProduct(&vLook, &vRight, &vUp);
|
||||
|
||||
m[0][0] = vRight.x;
|
||||
m[0][1] = vRight.y;
|
||||
m[0][2] = vRight.z;
|
||||
m[0][3] = -(camPos->x * vRight.x + camPos->y * vRight.y + camPos->z * vRight.z);
|
||||
|
||||
m[0][3] = -((camPos->z * vRight.z) + ((camPos->x * vRight.x) + (camPos->y * vRight.y)));
|
||||
m[1][0] = vUp.x;
|
||||
m[1][1] = vUp.y;
|
||||
m[1][2] = vUp.z;
|
||||
m[1][3] = -(camPos->x * vUp.x + camPos->y * vUp.y + camPos->z * vUp.z);
|
||||
|
||||
m[1][3] = -((camPos->z * vUp.z) + ((camPos->x * vUp.x) + (camPos->y * vUp.y)));
|
||||
m[2][0] = vLook.x;
|
||||
m[2][1] = vLook.y;
|
||||
m[2][2] = vLook.z;
|
||||
m[2][3] = -(camPos->x * vLook.x + camPos->y * vLook.y + camPos->z * vLook.z);
|
||||
m[2][3] = -((camPos->z * vLook.z) + ((camPos->x * vLook.x) + (camPos->y * vLook.y)));
|
||||
}
|
||||
|
||||
void C_MTXLightFrustum(Mtx m, float t, float b, float l, float r, float n, float scaleS, float scaleT, float transS, float transT)
|
||||
{
|
||||
void C_MTXLightFrustum(Mtx m, f32 t, f32 b, f32 l, f32 r, f32 n, f32 scaleS, f32 scaleT, f32 transS, f32 transT) {
|
||||
f32 tmp;
|
||||
|
||||
tmp = 1.0f / (r - l);
|
||||
m[0][0] = ((2 * n) * tmp) * scaleS;
|
||||
m[0][1] = 0.0f;
|
||||
m[0][2] = (((r + l) * tmp) * scaleS) - transS;
|
||||
m[0][3] = 0.0f;
|
||||
ASSERTMSGLINE(2541, m, "MTXLightFrustum(): NULL MtxPtr 'm' ");
|
||||
ASSERTMSGLINE(2542, (t != b), "MTXLightFrustum(): 't' and 'b' clipping planes are equal ");
|
||||
ASSERTMSGLINE(2543, (l != r), "MTXLightFrustum(): 'l' and 'r' clipping planes are equal ");
|
||||
|
||||
tmp = 1.0f / (t - b);
|
||||
m[1][0] = 0.0f;
|
||||
m[1][1] = ((2 * n) * tmp) * scaleT;
|
||||
m[1][2] = (((t + b) * tmp) * scaleT) - transT;
|
||||
m[1][3] = 0.0f;
|
||||
|
||||
m[2][0] = 0.0f;
|
||||
m[2][1] = 0.0f;
|
||||
m[2][2] = -1.0f;
|
||||
m[2][3] = 0.0f;
|
||||
tmp = 1 / (r - l);
|
||||
m[0][0] = (scaleS * (2 * n * tmp));
|
||||
m[0][1] = 0;
|
||||
m[0][2] = (scaleS * (tmp * (r + l))) - transS;
|
||||
m[0][3] = 0;
|
||||
tmp = 1 / (t - b);
|
||||
m[1][0] = 0;
|
||||
m[1][1] = (scaleT * (2 * n * tmp));
|
||||
m[1][2] = (scaleT * (tmp * (t + b))) - transT;
|
||||
m[1][3] = 0;
|
||||
m[2][0] = 0;
|
||||
m[2][1] = 0;
|
||||
m[2][2] = -1;
|
||||
m[2][3] = 0;
|
||||
}
|
||||
|
||||
void C_MTXLightPerspective(Mtx m, f32 fovY, f32 aspect, float scaleS, float scaleT, float transS, float transT)
|
||||
{
|
||||
void C_MTXLightPerspective(Mtx m, f32 fovY, f32 aspect, f32 scaleS, f32 scaleT, f32 transS, f32 transT) {
|
||||
f32 angle;
|
||||
f32 cot;
|
||||
|
||||
angle = fovY * 0.5f;
|
||||
ASSERTMSGLINE(2605, m, "MTXLightPerspective(): NULL MtxPtr 'm' ");
|
||||
ASSERTMSGLINE(2606, (fovY > 0.0) && (fovY < 180.0), "MTXLightPerspective(): 'fovY' out of range ");
|
||||
ASSERTMSGLINE(2607, 0 != aspect, "MTXLightPerspective(): 'aspect' is 0 ");
|
||||
|
||||
angle = (0.5f * fovY);
|
||||
angle = MTXDegToRad(angle);
|
||||
|
||||
cot = 1.0f / tanf(angle);
|
||||
|
||||
m[0][0] = (cot / aspect) * scaleS;
|
||||
m[0][1] = 0.0f;
|
||||
cot = 1 / tanf(angle);
|
||||
m[0][0] = (scaleS * (cot / aspect));
|
||||
m[0][1] = 0;
|
||||
m[0][2] = -transS;
|
||||
m[0][3] = 0.0f;
|
||||
|
||||
m[1][0] = 0.0f;
|
||||
m[1][1] = cot * scaleT;
|
||||
m[0][3] = 0;
|
||||
m[1][0] = 0;
|
||||
m[1][1] = (cot * scaleT);
|
||||
m[1][2] = -transT;
|
||||
m[1][3] = 0.0f;
|
||||
|
||||
m[2][0] = 0.0f;
|
||||
m[2][1] = 0.0f;
|
||||
m[2][2] = -1.0f;
|
||||
m[2][3] = 0.0f;
|
||||
m[1][3] = 0;
|
||||
m[2][0] = 0;
|
||||
m[2][1] = 0;
|
||||
m[2][2] = -1;
|
||||
m[2][3] = 0;
|
||||
}
|
||||
|
||||
void C_MTXLightOrtho(Mtx m, f32 t, f32 b, f32 l, f32 r, float scaleS, float scaleT, float transS, float transT)
|
||||
{
|
||||
void C_MTXLightOrtho(Mtx m, f32 t, f32 b, f32 l, f32 r, f32 scaleS, f32 scaleT, f32 transS, f32 transT) {
|
||||
f32 tmp;
|
||||
tmp = 1.0f / (r - l);
|
||||
m[0][0] = (2.0f * tmp * scaleS);
|
||||
m[0][1] = 0.0f;
|
||||
m[0][2] = 0.0f;
|
||||
m[0][3] = ((-(r + l) * tmp) * scaleS) + transS;
|
||||
|
||||
tmp = 1.0f / (t - b);
|
||||
m[1][0] = 0.0f;
|
||||
m[1][1] = (2.0f * tmp) * scaleT;
|
||||
m[1][2] = 0.0f;
|
||||
m[1][3] = ((-(t + b) * tmp) * scaleT) + transT;
|
||||
|
||||
m[2][0] = 0.0f;
|
||||
m[2][1] = 0.0f;
|
||||
m[2][2] = 0.0f;
|
||||
m[2][3] = 1.0f;
|
||||
ASSERTMSGLINE(2673, m, "MTXLightOrtho(): NULL MtxPtr 'm' ");
|
||||
ASSERTMSGLINE(2674, (t != b), "MTXLightOrtho(): 't' and 'b' clipping planes are equal ");
|
||||
ASSERTMSGLINE(2675, (l != r), "MTXLightOrtho(): 'l' and 'r' clipping planes are equal ");
|
||||
tmp = 1 / (r - l);
|
||||
m[0][0] = (2 * tmp * scaleS);
|
||||
m[0][1] = 0;
|
||||
m[0][2] = 0;
|
||||
m[0][3] = (transS + (scaleS * (tmp * -(r + l))));
|
||||
tmp = 1/ (t - b);
|
||||
m[1][0] = 0;
|
||||
m[1][1] = (2 * tmp * scaleT);
|
||||
m[1][2] = 0;
|
||||
m[1][3] = (transT + (scaleT * (tmp * -(t + b))));
|
||||
m[2][0] = 0;
|
||||
m[2][1] = 0;
|
||||
m[2][2] = 0;
|
||||
m[2][3] = 1;
|
||||
}
|
||||
|
||||
#ifdef TARGET_PC
|
||||
void C_MTXReorder(const Mtx src, ROMtx dest)
|
||||
{
|
||||
u32 i, j;
|
||||
for (i = 0; i < 3; j++) {
|
||||
for (int j = 0; j < 4; j++) {
|
||||
dest[j][i] = src[i][j];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void C_MTXMultVec(const Mtx m, const Vec* src, Vec* dst) {
|
||||
Vec vTmp;
|
||||
|
||||
ASSERTMSGLINE(66, m, "MTXMultVec(): NULL MtxPtr 'm' ");
|
||||
ASSERTMSGLINE(67, src, "MTXMultVec(): NULL VecPtr 'src' ");
|
||||
ASSERTMSGLINE(68, dst, "MTXMultVec(): NULL VecPtr 'dst' ");
|
||||
|
||||
vTmp.x = m[0][3] + ((m[0][2] * src->z) + ((m[0][0] * src->x) + (m[0][1] * src->y)));
|
||||
vTmp.y = m[1][3] + ((m[1][2] * src->z) + ((m[1][0] * src->x) + (m[1][1] * src->y)));
|
||||
vTmp.z = m[2][3] + ((m[2][2] * src->z) + ((m[2][0] * src->x) + (m[2][1] * src->y)));
|
||||
dst->x = vTmp.x;
|
||||
dst->y = vTmp.y;
|
||||
dst->z = vTmp.z;
|
||||
}
|
||||
|
||||
void C_MTXMultVecArray(const Mtx m, const Vec* srcBase, Vec* dstBase, u32 count) {
|
||||
u32 i;
|
||||
Vec vTmp;
|
||||
|
||||
ASSERTMSGLINE(168, m, "MTXMultVecArray(): NULL MtxPtr 'm' ");
|
||||
ASSERTMSGLINE(169, srcBase, "MTXMultVecArray(): NULL VecPtr 'srcBase' ");
|
||||
ASSERTMSGLINE(170, dstBase, "MTXMultVecArray(): NULL VecPtr 'dstBase' ");
|
||||
ASSERTMSGLINE(171, count > 1, "MTXMultVecArray(): count must be greater than 1.");
|
||||
|
||||
for(i = 0; i < count; i++) {
|
||||
vTmp.x = m[0][3] + ((m[0][2] * srcBase->z) + ((m[0][0] * srcBase->x) + (m[0][1] * srcBase->y)));
|
||||
vTmp.y = m[1][3] + ((m[1][2] * srcBase->z) + ((m[1][0] * srcBase->x) + (m[1][1] * srcBase->y)));
|
||||
vTmp.z = m[2][3] + ((m[2][2] * srcBase->z) + ((m[2][0] * srcBase->x) + (m[2][1] * srcBase->y)));
|
||||
dstBase->x = vTmp.x;
|
||||
dstBase->y = vTmp.y;
|
||||
dstBase->z = vTmp.z;
|
||||
srcBase++;
|
||||
dstBase++;
|
||||
}
|
||||
}
|
||||
|
||||
void C_MTXROMultVecArray(const ROMtx m, const Vec *srcBase, Vec *dstBase, u32 count)
|
||||
{
|
||||
u32 i;
|
||||
for (u32 i = 0; i < count; ++i) {
|
||||
Vec* src = &srcBase[i];
|
||||
Vec* dst = &dstBase[i];
|
||||
|
||||
// Perform matrix-vector multiplication: ROMtx * Vec -> Vec
|
||||
dst->x = m[0][0] * src->x + m[0][1] * src->y + m[0][2] * src->z;
|
||||
dst->y = m[1][0] * src->x + m[1][1] * src->y + m[1][2] * src->z;
|
||||
dst->z = m[2][0] * src->x + m[2][1] * src->y + m[2][2] * src->z;
|
||||
}
|
||||
}
|
||||
|
||||
void C_MTXMultVecSR(const Mtx m, const Vec* src, Vec* dst) {
|
||||
Vec vTmp;
|
||||
|
||||
ASSERTMSGLINE(313, m, "MTXMultVecSR(): NULL MtxPtr 'm' ");
|
||||
ASSERTMSGLINE(314, src, "MTXMultVecSR(): NULL VecPtr 'src' ");
|
||||
ASSERTMSGLINE(315, dst, "MTXMultVecSR(): NULL VecPtr 'dst' ");
|
||||
|
||||
vTmp.x = (m[0][2] * src->z) + ((m[0][0] * src->x) + (m[0][1] * src->y));
|
||||
vTmp.y = (m[1][2] * src->z) + ((m[1][0] * src->x) + (m[1][1] * src->y));
|
||||
vTmp.z = (m[2][2] * src->z) + ((m[2][0] * src->x) + (m[2][1] * src->y));
|
||||
dst->x = vTmp.x;
|
||||
dst->y = vTmp.y;
|
||||
dst->z = vTmp.z;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1,82 +1,98 @@
|
|||
#include "dolphin/mtx.h"
|
||||
#include "dolphin/gx/GXPriv.h"
|
||||
#include "math.h"
|
||||
|
||||
void C_MTXFrustum(Mtx44 m, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, f32 arg6)
|
||||
{
|
||||
f32 tmp = 1.0f / (arg4 - arg3);
|
||||
m[0][0] = (2 * arg5) * tmp;
|
||||
m[0][1] = 0.0f;
|
||||
m[0][2] = (arg4 + arg3) * tmp;
|
||||
m[0][3] = 0.0f;
|
||||
tmp = 1.0f / (arg1 - arg2);
|
||||
m[1][0] = 0.0f;
|
||||
m[1][1] = (2 * arg5) * tmp;
|
||||
m[1][2] = (arg1 + arg2) * tmp;
|
||||
m[1][3] = 0.0f;
|
||||
m[2][0] = 0.0f;
|
||||
m[2][1] = 0.0f;
|
||||
tmp = 1.0f / (arg6 - arg5);
|
||||
m[2][2] = -(arg5)*tmp;
|
||||
m[2][3] = -(arg6 * arg5) * tmp;
|
||||
m[3][0] = 0.0f;
|
||||
m[3][1] = 0.0f;
|
||||
m[3][2] = -1.0f;
|
||||
m[3][3] = 0.0f;
|
||||
void C_MTXFrustum(Mtx44 m, f32 t, f32 b, f32 l, f32 r, f32 n, f32 f) {
|
||||
f32 tmp;
|
||||
|
||||
ASSERTMSGLINE(105, m, "MTXFrustum(): NULL Mtx44Ptr 'm' ");
|
||||
ASSERTMSGLINE(106, t != b, "MTXFrustum(): 't' and 'b' clipping planes are equal ");
|
||||
ASSERTMSGLINE(107, l != r, "MTXFrustum(): 'l' and 'r' clipping planes are equal ");
|
||||
ASSERTMSGLINE(108, n != f, "MTXFrustum(): 'n' and 'f' clipping planes are equal ");
|
||||
tmp = 1 / (r - l);
|
||||
m[0][0] = (2 * n * tmp);
|
||||
m[0][1] = 0;
|
||||
m[0][2] = (tmp * (r + l));
|
||||
m[0][3] = 0;
|
||||
tmp = 1 / (t - b);
|
||||
m[1][0] = 0;
|
||||
m[1][1] = (2 * n * tmp);
|
||||
m[1][2] = (tmp * (t + b));
|
||||
m[1][3] = 0;
|
||||
m[2][0] = 0;
|
||||
m[2][1] = 0;
|
||||
tmp = 1 / (f - n);
|
||||
m[2][2] = (-n * tmp);
|
||||
m[2][3] = (tmp * -(f * n));
|
||||
m[3][0] = 0;
|
||||
m[3][1] = 0;
|
||||
m[3][2] = -1;
|
||||
m[3][3] = 0;
|
||||
}
|
||||
|
||||
// Functions match but has issues with float constants
|
||||
void C_MTXPerspective(Mtx44 m, f32 fovY, f32 aspect, f32 n, f32 f)
|
||||
{
|
||||
f32 angle = fovY * 0.5f;
|
||||
void C_MTXPerspective(Mtx44 m, f32 fovY, f32 aspect, f32 n, f32 f) {
|
||||
f32 angle;
|
||||
f32 cot;
|
||||
f32 tmp;
|
||||
|
||||
ASSERTMSGLINE(179, m, "MTXPerspective(): NULL Mtx44Ptr 'm' ");
|
||||
ASSERTMSGLINE(180, (fovY > 0.0) && (fovY < 180.0), "MTXPerspective(): 'fovY' out of range ");
|
||||
ASSERTMSGLINE(181, 0.0f != aspect, "MTXPerspective(): 'aspect' is 0 ");
|
||||
|
||||
angle = (0.5f * fovY);
|
||||
angle = MTXDegToRad(angle);
|
||||
cot = 1.0f / tanf(angle);
|
||||
m[0][0] = cot / aspect;
|
||||
m[0][1] = 0.0f;
|
||||
m[0][2] = 0.0f;
|
||||
m[0][3] = 0.0f;
|
||||
m[1][0] = 0.0f;
|
||||
m[1][1] = cot;
|
||||
m[1][2] = 0.0f;
|
||||
m[1][3] = 0.0f;
|
||||
m[2][0] = 0.0f;
|
||||
m[2][1] = 0.0f;
|
||||
tmp = 1.0f / (f - n);
|
||||
m[2][2] = -(n)*tmp;
|
||||
m[2][3] = -(f * n) * tmp;
|
||||
m[3][0] = 0.0f;
|
||||
m[3][1] = 0.0f;
|
||||
m[3][2] = -1.0f;
|
||||
m[3][3] = 0.0f;
|
||||
cot = 1 / tanf(angle);
|
||||
m[0][0] = (cot / aspect);
|
||||
m[0][1] = 0;
|
||||
m[0][2] = 0;
|
||||
m[0][3] = 0;
|
||||
m[1][0] = 0;
|
||||
m[1][1] = (cot);
|
||||
m[1][2] = 0;
|
||||
m[1][3] = 0;
|
||||
m[2][0] = 0;
|
||||
m[2][1] = 0;
|
||||
tmp = 1 / (f - n);
|
||||
m[2][2] = (-n * tmp);
|
||||
m[2][3] = (tmp * -(f * n));
|
||||
m[3][0] = 0;
|
||||
m[3][1] = 0;
|
||||
m[3][2] = -1;
|
||||
m[3][3] = 0;
|
||||
}
|
||||
|
||||
void C_MTXOrtho(Mtx44 m, f32 t, f32 b, f32 l, f32 r, f32 n, f32 f)
|
||||
{
|
||||
f32 tmp = 1.0f / (r - l);
|
||||
m[0][0] = 2.0f * tmp;
|
||||
m[0][1] = 0.0f;
|
||||
m[0][2] = 0.0f;
|
||||
m[0][3] = -(r + l) * tmp;
|
||||
tmp = 1.0f / (t - b);
|
||||
m[1][0] = 0.0f;
|
||||
m[1][1] = 2.0f * tmp;
|
||||
m[1][2] = 0.0f;
|
||||
m[1][3] = -(t + b) * tmp;
|
||||
m[2][0] = 0.0f;
|
||||
m[2][1] = 0.0f;
|
||||
tmp = 1.0f / (f - n);
|
||||
m[2][2] = -(1.0f) * tmp;
|
||||
m[2][3] = -(f)*tmp;
|
||||
m[3][0] = 0.0f;
|
||||
m[3][1] = 0.0f;
|
||||
m[3][2] = 0.0f;
|
||||
m[3][3] = 1.0f;
|
||||
void C_MTXOrtho(Mtx44 m, f32 t, f32 b, f32 l, f32 r, f32 n, f32 f) {
|
||||
f32 tmp;
|
||||
|
||||
ASSERTMSGLINE(254, m, "MTXOrtho(): NULL Mtx44Ptr 'm' ");
|
||||
ASSERTMSGLINE(255, t != b, "MTXOrtho(): 't' and 'b' clipping planes are equal ");
|
||||
ASSERTMSGLINE(256, l != r, "MTXOrtho(): 'l' and 'r' clipping planes are equal ");
|
||||
ASSERTMSGLINE(257, n != f, "MTXOrtho(): 'n' and 'f' clipping planes are equal ");
|
||||
tmp = 1 / (r - l);
|
||||
m[0][0] = 2 * tmp;
|
||||
m[0][1] = 0;
|
||||
m[0][2] = 0;
|
||||
m[0][3] = (tmp * -(r + l));
|
||||
tmp = 1 / (t - b);
|
||||
m[1][0] = 0;
|
||||
m[1][1] = 2 * tmp;
|
||||
m[1][2] = 0;
|
||||
m[1][3] = (tmp * -(t + b));
|
||||
m[2][0] = 0;
|
||||
m[2][1] = 0;
|
||||
tmp = 1 / (f - n);
|
||||
m[2][2] = (-1 * tmp);
|
||||
m[2][3] = (-f * tmp);
|
||||
m[3][0] = 0;
|
||||
m[3][1] = 0;
|
||||
m[3][2] = 0;
|
||||
m[3][3] = 1;
|
||||
}
|
||||
|
||||
#ifdef GEKKO
|
||||
asm void PSMTX44Copy(register Mtx44 src, register Mtx44 dest)
|
||||
{
|
||||
#ifdef __MWERKS__ // clang-format off
|
||||
// clang-format off
|
||||
nofralloc;
|
||||
psq_l fp1, 0(src), 0, 0;
|
||||
psq_st fp1, 0(dest), 0, 0;
|
||||
|
|
@ -95,5 +111,6 @@ asm void PSMTX44Copy(register Mtx44 src, register Mtx44 dest)
|
|||
psq_l fp1, 0x38(src), 0, 0;
|
||||
psq_st fp1, 0x38(dest), 0, 0;
|
||||
blr;
|
||||
#endif // clang-format on
|
||||
// clang-format on
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
#include "dolphin/mtx.h"
|
||||
#include "dolphin/gx/GXPriv.h"
|
||||
#include "math.h"
|
||||
|
||||
#define R_RET fp1
|
||||
|
|
@ -15,9 +16,19 @@
|
|||
#define FP12 fp12
|
||||
#define FP13 fp13
|
||||
|
||||
void C_VECAdd(const Vec *a, const Vec *b, Vec *c) {
|
||||
ASSERTMSGLINE(0x57, a, "VECAdd(): NULL VecPtr 'a' ");
|
||||
ASSERTMSGLINE(0x58, b, "VECAdd(): NULL VecPtr 'b' ");
|
||||
ASSERTMSGLINE(0x59, c, "VECAdd(): NULL VecPtr 'ab' ");
|
||||
c->x = a->x + b->x;
|
||||
c->y = a->y + b->y;
|
||||
c->z = a->z + b->z;
|
||||
}
|
||||
|
||||
#ifdef GEKKO
|
||||
asm void PSVECAdd(const register Vec *vec1, const register Vec *vec2, register Vec *ret)
|
||||
{
|
||||
#ifdef __MWERKS__ // clang-format off
|
||||
// clang-format off
|
||||
nofralloc;
|
||||
psq_l FP2, 0(vec1), 0, 0;
|
||||
psq_l FP4, 0(vec2), 0, 0;
|
||||
|
|
@ -28,12 +39,23 @@ asm void PSVECAdd(const register Vec *vec1, const register Vec *vec2, register V
|
|||
ps_add FP7, FP3, FP5;
|
||||
psq_st FP7, 8(ret), 1, 0;
|
||||
blr
|
||||
#endif // clang-format on
|
||||
// clang-format on
|
||||
}
|
||||
#endif
|
||||
|
||||
void C_VECSubtract(const Vec *a, const Vec *b, Vec *c) {
|
||||
ASSERTMSGLINE(0x9C, a, "VECSubtract(): NULL VecPtr 'a' ");
|
||||
ASSERTMSGLINE(0x9D, b, "VECSubtract(): NULL VecPtr 'b' ");
|
||||
ASSERTMSGLINE(0x9E, c, "VECSubtract(): NULL VecPtr 'a_b' ");
|
||||
c->x = a->x - b->x;
|
||||
c->y = a->y - b->y;
|
||||
c->z = a->z - b->z;
|
||||
}
|
||||
|
||||
#ifdef GEKKO
|
||||
asm void PSVECSubtract(const register Vec *vec1, const register Vec *vec2, register Vec *ret)
|
||||
{
|
||||
#ifdef __MWERKS__ // clang-format off
|
||||
// clang-format off
|
||||
nofralloc;
|
||||
psq_l FP2, 0(vec1), 0, 0;
|
||||
psq_l FP4, 0(vec2), 0, 0;
|
||||
|
|
@ -44,22 +66,9 @@ asm void PSVECSubtract(const register Vec *vec1, const register Vec *vec2, regis
|
|||
ps_sub FP7, FP3, FP5;
|
||||
psq_st FP7, 8(ret), 1, 0;
|
||||
blr
|
||||
#endif // clang-format on
|
||||
}
|
||||
|
||||
asm void PSVECScale(register const Vec *src, register Vec *dst, register f32 scale)
|
||||
{
|
||||
#ifdef __MWERKS__ // clang-format off
|
||||
nofralloc
|
||||
psq_l f0, 0(src), 0, 0
|
||||
psq_l f2, 8(src), 1, 0
|
||||
ps_muls0 f0, f0, f1
|
||||
psq_st f0, 0(dst), 0, 0
|
||||
ps_muls0 f0, f2, f1
|
||||
psq_st f0, 8(dst), 1, 0
|
||||
blr
|
||||
#endif // clang-format on
|
||||
// clang-format on
|
||||
}
|
||||
#endif
|
||||
|
||||
void C_VECScale(const Vec *src, Vec *dst, f32 scale)
|
||||
{
|
||||
|
|
@ -71,9 +80,39 @@ void C_VECScale(const Vec *src, Vec *dst, f32 scale)
|
|||
dst->z = src->z * s;
|
||||
}
|
||||
|
||||
#ifdef GEKKO
|
||||
asm void PSVECScale(register const Vec *src, register Vec *dst, register f32 scale)
|
||||
{
|
||||
#// clang-format off
|
||||
nofralloc
|
||||
psq_l f0, 0(src), 0, 0
|
||||
psq_l f2, 8(src), 1, 0
|
||||
ps_muls0 f0, f0, f1
|
||||
psq_st f0, 0(dst), 0, 0
|
||||
ps_muls0 f0, f2, f1
|
||||
psq_st f0, 8(dst), 1, 0
|
||||
blr
|
||||
// clang-format on
|
||||
}
|
||||
#endif
|
||||
|
||||
void C_VECNormalize(const Vec *src, Vec *unit) {
|
||||
f32 mag;
|
||||
|
||||
ASSERTMSGLINE(0x127, src, "VECNormalize(): NULL VecPtr 'src' ");
|
||||
ASSERTMSGLINE(0x128, unit, "VECNormalize(): NULL VecPtr 'unit' ");
|
||||
mag = (src->z * src->z) + ((src->x * src->x) + (src->y * src->y));
|
||||
ASSERTMSGLINE(0x12D, 0.0f != mag, "VECNormalize(): zero magnitude vector ");
|
||||
mag = 1.0f/ sqrtf(mag);
|
||||
unit->x = src->x * mag;
|
||||
unit->y = src->y * mag;
|
||||
unit->z = src->z * mag;
|
||||
}
|
||||
|
||||
#ifdef GEKKO
|
||||
void PSVECNormalize(const register Vec *vec1, register Vec *ret)
|
||||
{
|
||||
#ifdef __MWERKS__ // clang-format off
|
||||
// clang-format off
|
||||
register f32 half = 0.5f;
|
||||
register f32 three = 3.0f;
|
||||
register f32 xx_zz, xx_yy;
|
||||
|
|
@ -96,43 +135,60 @@ void PSVECNormalize(const register Vec *vec1, register Vec *ret)
|
|||
ps_muls0 FP3, FP3, ret_sqrt;
|
||||
psq_st FP3, 8(ret), 1, 0;
|
||||
}
|
||||
#endif // clang-format on
|
||||
// clang-format on
|
||||
}
|
||||
#endif
|
||||
|
||||
f32 C_VECSquareMag(const Vec *v) {
|
||||
f32 sqmag;
|
||||
|
||||
ASSERTMSGLINE(0x182, v, "VECMag(): NULL VecPtr 'v' ");
|
||||
|
||||
sqmag = v->z * v->z + ((v->x * v->x) + (v->y * v->y));
|
||||
return sqmag;
|
||||
}
|
||||
|
||||
#ifdef GEKKO
|
||||
asm f32 PSVECSquareMag(register const Vec *v) {
|
||||
#ifdef __MWERKS__ // clang-format off
|
||||
// clang-format off
|
||||
nofralloc
|
||||
psq_l f0, 0(v), 0, 0
|
||||
ps_mul f0, f0, f0
|
||||
lfs f1, 8(v)
|
||||
ps_madd f1, f1, f1, f0
|
||||
ps_sum0 f1, f1, f0, f0
|
||||
blr
|
||||
#endif // clang-format on
|
||||
blr
|
||||
// clang-format on
|
||||
}
|
||||
#endif
|
||||
|
||||
f32 C_VECMag(const Vec *v) {
|
||||
return sqrtf(C_VECSquareMag(v));
|
||||
}
|
||||
|
||||
#ifdef GEKKO
|
||||
f32 PSVECMag(const register Vec *v)
|
||||
{
|
||||
register f32 v_xy, v_zz, square_mag;
|
||||
register f32 ret_mag, n_0, n_1;
|
||||
register f32 three, half, zero;
|
||||
#ifdef __MWERKS__ // clang-format off
|
||||
// clang-format off
|
||||
asm {
|
||||
psq_l v_xy, 0(v), 0, 0
|
||||
ps_mul v_xy, v_xy, v_xy
|
||||
lfs v_zz, 8(v)
|
||||
ps_madd square_mag, v_zz, v_zz, v_xy
|
||||
}
|
||||
#endif // clang-format on
|
||||
// clang-format on
|
||||
half = 0.5f;
|
||||
#ifdef __MWERKS__ // clang-format off
|
||||
// clang-format off
|
||||
asm {
|
||||
ps_sum0 square_mag, square_mag, v_xy, v_xy
|
||||
frsqrte ret_mag, square_mag
|
||||
}
|
||||
#endif // clang-format on
|
||||
// clang-format on
|
||||
three = 3.0f;
|
||||
#ifdef __MWERKS__ // clang-format off
|
||||
// clang-format off
|
||||
asm {
|
||||
fmuls n_0, ret_mag, ret_mag
|
||||
fmuls n_1, ret_mag, half
|
||||
|
|
@ -141,13 +197,24 @@ asm {
|
|||
fsel ret_mag, ret_mag, ret_mag, square_mag
|
||||
fmuls square_mag, square_mag, ret_mag
|
||||
}
|
||||
#endif // clang-format on
|
||||
// clang-format on
|
||||
return square_mag;
|
||||
}
|
||||
#endif
|
||||
|
||||
f32 C_VECDotProduct(const Vec *a, const Vec *b) {
|
||||
f32 dot;
|
||||
|
||||
ASSERTMSGLINE(0x1D1, a, "VECDotProduct(): NULL VecPtr 'a' ");
|
||||
ASSERTMSGLINE(0x1D2, b, "VECDotProduct(): NULL VecPtr 'b' ");
|
||||
dot = (a->z * b->z) + ((a->x * b->x) + (a->y * b->y));
|
||||
return dot;
|
||||
}
|
||||
|
||||
#ifdef GEKKO
|
||||
asm f32 PSVECDotProduct(const register Vec *vec1, const register Vec *vec2)
|
||||
{
|
||||
#ifdef __MWERKS__ // clang-format off
|
||||
// clang-format off
|
||||
nofralloc;
|
||||
psq_l f2, 4(r3), 0, 0 /* qr0 */
|
||||
psq_l f3, 4(r4), 0, 0 /* qr0 */
|
||||
|
|
@ -156,13 +223,30 @@ asm f32 PSVECDotProduct(const register Vec *vec1, const register Vec *vec2)
|
|||
psq_l f4, 0(r4), 0, 0 /* qr0 */
|
||||
ps_madd f3, f5, f4, f2
|
||||
ps_sum0 f1, f3, f2, f2
|
||||
blr
|
||||
#endif // clang-format on
|
||||
blr
|
||||
// clang-format on
|
||||
}
|
||||
#endif
|
||||
|
||||
void C_VECCrossProduct(const Vec *a, const Vec *b, Vec *axb) {
|
||||
Vec vTmp;
|
||||
|
||||
ASSERTMSGLINE(0x20F, a, "VECCrossProduct(): NULL VecPtr 'a' ");
|
||||
ASSERTMSGLINE(0x210, b, "VECCrossProduct(): NULL VecPtr 'b' ");
|
||||
ASSERTMSGLINE(0x211, axb, "VECCrossProduct(): NULL VecPtr 'axb' ");
|
||||
|
||||
vTmp.x = (a->y * b->z) - (a->z * b->y);
|
||||
vTmp.y = (a->z * b->x) - (a->x * b->z);
|
||||
vTmp.z = (a->x * b->y) - (a->y * b->x);
|
||||
axb->x = vTmp.x;
|
||||
axb->y = vTmp.y;
|
||||
axb->z = vTmp.z;
|
||||
}
|
||||
|
||||
#ifdef GEKKO
|
||||
asm void PSVECCrossProduct(register const Vec *a, register const Vec *b, register Vec *axb)
|
||||
{
|
||||
#ifdef __MWERKS__ // clang-format off
|
||||
// clang-format off
|
||||
nofralloc
|
||||
psq_l f1, 0(b), 0, 0
|
||||
lfs f2, 8(a)
|
||||
|
|
@ -178,9 +262,10 @@ asm void PSVECCrossProduct(register const Vec *a, register const Vec *b, registe
|
|||
psq_st f9, 0(axb), 1, 0
|
||||
ps_neg f10, f10
|
||||
psq_st f10, 4(axb), 0, 0
|
||||
blr
|
||||
#endif // clang-format on
|
||||
blr
|
||||
// clang-format on
|
||||
}
|
||||
#endif
|
||||
|
||||
void C_VECHalfAngle(const Vec *a, const Vec *b, Vec *half)
|
||||
{
|
||||
|
|
@ -229,8 +314,18 @@ void C_VECReflect(const Vec *src, const Vec *normal, Vec *dst)
|
|||
VECNormalize(dst, dst);
|
||||
}
|
||||
|
||||
f32 C_VECSquareDistance(const Vec *a, const Vec *b) {
|
||||
Vec diff;
|
||||
|
||||
diff.x = a->x - b->x;
|
||||
diff.y = a->y - b->y;
|
||||
diff.z = a->z - b->z;
|
||||
return (diff.z * diff.z) + ((diff.x * diff.x) + (diff.y * diff.y));
|
||||
}
|
||||
|
||||
#ifdef GEKKO
|
||||
asm f32 PSVECSquareDistance(register const Vec *a, register const Vec *b) {
|
||||
#ifdef __MWERKS__ // clang-format off
|
||||
// clang-format off
|
||||
nofralloc
|
||||
psq_l f0, 4(a), 0, 0
|
||||
psq_l f1, 4(b), 0, 0
|
||||
|
|
@ -241,10 +336,16 @@ asm f32 PSVECSquareDistance(register const Vec *a, register const Vec *b) {
|
|||
ps_sub f0, f0, f1
|
||||
ps_madd f1, f0, f0, f2
|
||||
ps_sum0 f1, f1, f2, f2
|
||||
blr
|
||||
#endif // clang-format on
|
||||
blr
|
||||
// clang-format on
|
||||
}
|
||||
#endif
|
||||
|
||||
f32 C_VECDistance(const Vec *a, const Vec *b) {
|
||||
return sqrtf(C_VECSquareDistance(a, b));
|
||||
}
|
||||
|
||||
#ifdef GEKKO
|
||||
f32 PSVECDistance(register const Vec *a, register const Vec *b)
|
||||
{
|
||||
|
||||
|
|
@ -252,7 +353,7 @@ f32 PSVECDistance(register const Vec *a, register const Vec *b)
|
|||
register f32 three_c;
|
||||
register f32 dist;
|
||||
|
||||
#ifdef __MWERKS__ // clang-format off
|
||||
// clang-format off
|
||||
asm {
|
||||
psq_l f0, 4(a), 0, 0 /* qr0 */
|
||||
psq_l f1, 4(b), 0, 0 /* qr0 */
|
||||
|
|
@ -283,5 +384,6 @@ f32 PSVECDistance(register const Vec *a, register const Vec *b)
|
|||
}
|
||||
|
||||
return dist;
|
||||
#endif // clang-format on
|
||||
// clang-format on
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -19,14 +19,22 @@ extern char _db_stack_end[];
|
|||
|
||||
extern char *__OSResetSWInterruptHandler[];
|
||||
|
||||
#ifdef TARGET_PC
|
||||
vu16 __OSDeviceCode;
|
||||
#else
|
||||
vu16 __OSDeviceCode : (OS_BASE_CACHED | 0x30E6);
|
||||
#endif
|
||||
static DVDDriveInfo DriveInfo ATTRIBUTE_ALIGN(32);
|
||||
static DVDCommandBlock DriveBlock;
|
||||
|
||||
static OSBootInfo *BootInfo;
|
||||
static u32 *BI2DebugFlag;
|
||||
static u32 *BI2DebugFlagHolder;
|
||||
#ifdef _MSC_VER
|
||||
BOOL __OSIsGcam = FALSE;
|
||||
#else
|
||||
__declspec(weak) BOOL __OSIsGcam = FALSE;
|
||||
#endif
|
||||
static f64 ZeroF;
|
||||
static f32 ZeroPS[2];
|
||||
static BOOL AreWeInitialized = FALSE;
|
||||
|
|
@ -56,6 +64,7 @@ void OSDefaultExceptionHandler(__OSException exception, OSContext *context);
|
|||
extern BOOL __DBIsExceptionMarked(__OSException);
|
||||
static void OSExceptionInit(void);
|
||||
|
||||
#ifdef __MWERKS__
|
||||
/* clang-format off */
|
||||
asm void __OSFPRInit(void)
|
||||
{
|
||||
|
|
@ -143,6 +152,7 @@ SkipPairedSingles:
|
|||
blr
|
||||
}
|
||||
/* clang-format on */
|
||||
#endif
|
||||
|
||||
u32 OSGetConsoleType()
|
||||
{
|
||||
|
|
@ -155,8 +165,8 @@ u32 OSGetConsoleType()
|
|||
void *__OSSavedRegionStart;
|
||||
void *__OSSavedRegionEnd;
|
||||
|
||||
extern u32 BOOT_REGION_START : 0x812FDFF0; //(*(u32 *)0x812fdff0)
|
||||
extern u32 BOOT_REGION_END : 0x812FDFEC; //(*(u32 *)0x812fdfec)
|
||||
extern u32 BOOT_REGION_START AT_ADDRESS(0x812FDFF0); //(*(u32 *)0x812fdff0)
|
||||
extern u32 BOOT_REGION_END AT_ADDRESS(0x812FDFEC); //(*(u32 *)0x812fdfec)
|
||||
|
||||
void ClearArena(void)
|
||||
{
|
||||
|
|
@ -477,6 +487,7 @@ static void OSExceptionInit(void)
|
|||
DBPrintf("Exceptions initialized...\n");
|
||||
}
|
||||
|
||||
#ifdef __MWERKS__
|
||||
static asm void __OSDBIntegrator(void)
|
||||
{
|
||||
/* clang-format off */
|
||||
|
|
@ -505,6 +516,7 @@ entry __OSDBJUMPEND
|
|||
/* clang-format on */
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
__OSExceptionHandler __OSSetExceptionHandler(__OSException exception, __OSExceptionHandler handler)
|
||||
{
|
||||
|
|
@ -519,6 +531,7 @@ __OSExceptionHandler __OSGetExceptionHandler(__OSException exception)
|
|||
return OSExceptionTable[exception];
|
||||
}
|
||||
|
||||
#ifdef __MWERKS__
|
||||
static asm void OSExceptionVector(void)
|
||||
{
|
||||
/* clang-format off */
|
||||
|
|
@ -603,8 +616,10 @@ entry __OSEVEnd
|
|||
nop
|
||||
/* clang-format on */
|
||||
}
|
||||
#endif
|
||||
|
||||
void __OSUnhandledException(__OSException exception, OSContext *context, u32 dsisr, u32 dar);
|
||||
#ifdef __MWERKS__
|
||||
asm void OSDefaultExceptionHandler(register __OSException exception, register OSContext *context)
|
||||
{
|
||||
/* clang-format off */
|
||||
|
|
@ -631,6 +646,7 @@ void __OSPSInit(void)
|
|||
}
|
||||
// clang-format on
|
||||
}
|
||||
#endif
|
||||
|
||||
#define DI_CONFIG_IDX 0x9
|
||||
#define DI_CONFIG_CONFIG_MASK 0xFF
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
#include <dolphin.h>
|
||||
#include <dolphin/os.h>
|
||||
#include <dolphin/os/OSPriv.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define ALIGNMENT 32
|
||||
|
||||
|
|
@ -137,6 +138,9 @@ static long DLSize(struct Cell *list)
|
|||
|
||||
void *OSAllocFromHeap(int heap, unsigned long size)
|
||||
{
|
||||
#ifdef TARGET_PC
|
||||
return malloc(size);
|
||||
#endif
|
||||
struct HeapDesc *hd;
|
||||
struct Cell *cell;
|
||||
struct Cell *newCell;
|
||||
|
|
@ -163,7 +167,6 @@ void *OSAllocFromHeap(int heap, unsigned long size)
|
|||
return NULL;
|
||||
}
|
||||
ASSERTMSG1(0x168, !((s32)cell & 0x1F), "OSAllocFromHeap(): heap is broken.");
|
||||
ASSERTMSG1(0x169, cell->hd == NULL, "OSAllocFromHeap(): heap is broken.");
|
||||
|
||||
leftoverSize = cell->size - size;
|
||||
if (leftoverSize < 0x40U) {
|
||||
|
|
@ -201,12 +204,12 @@ void *OSAllocFixed(void **rstart, void **rend)
|
|||
void *end;
|
||||
void *cellEnd;
|
||||
|
||||
start = (void *)((*(u32 *)rstart) & ~((32) - 1));
|
||||
end = (void *)((*(u32 *)rend + 0x1FU) & ~((32) - 1));
|
||||
start = (void *)((*(uintptr_t *)rstart) & ~((32) - 1));
|
||||
end = (void *)((*(uintptr_t *)rend + 0x1FU) & ~((32) - 1));
|
||||
|
||||
ASSERTMSG1(0x1B0, HeapArray, "OSAllocFixed(): heap is not initialized.");
|
||||
ASSERTMSG1(0x1B1, (u32)start < (u32)end, "OSAllocFixed(): invalid range.");
|
||||
ASSERTMSG1(0x1B3, ((u32)ArenaStart <= (u32)start) && ((u32)end <= (u32)ArenaEnd), "OSAllocFixed(): invalid range.");
|
||||
ASSERTMSG1(0x1B1, (uintptr_t)start < (uintptr_t)end, "OSAllocFixed(): invalid range.");
|
||||
ASSERTMSG1(0x1B3, ((uintptr_t)ArenaStart <= (uintptr_t)start) && ((uintptr_t)start <= (uintptr_t)ArenaEnd), "OSAllocFixed(): invalid range.");
|
||||
|
||||
for (i = 0; i < NumHeaps; i++) {
|
||||
hd = &HeapArray[i];
|
||||
|
|
@ -243,7 +246,7 @@ void *OSAllocFixed(void **rstart, void **rend)
|
|||
ASSERTMSG(0x1F3, MINOBJSIZE <= (char *)cellEnd - (char *)end);
|
||||
newCell = (struct Cell *)end;
|
||||
|
||||
newCell->size = (s32)((char *)cellEnd - (char *)end);
|
||||
newCell->size = (uintptr_t)((char *)cellEnd - (char *)end);
|
||||
newCell->next = cell->next;
|
||||
if (newCell->next) {
|
||||
newCell->next->prev = newCell;
|
||||
|
|
@ -290,13 +293,16 @@ void *OSAllocFixed(void **rstart, void **rend)
|
|||
ASSERTMSG(0x225, OFFSET(start, ALIGNMENT) == 0);
|
||||
ASSERTMSG(0x226, OFFSET(end, ALIGNMENT) == 0);
|
||||
ASSERTMSG(0x227, start < end);
|
||||
*(u32 *)rstart = (u32)start;
|
||||
*(u32 *)rend = (u32)end;
|
||||
return (void *)*(u32 *)rstart;
|
||||
*(uintptr_t *)rstart = (uintptr_t)start;
|
||||
*(uintptr_t *)rend = (uintptr_t)end;
|
||||
return (void *)*(uintptr_t *)rstart;
|
||||
}
|
||||
|
||||
void OSFreeToHeap(int heap, void *ptr)
|
||||
{
|
||||
#ifdef TARGET_PC
|
||||
free(ptr);
|
||||
#else
|
||||
struct HeapDesc *hd;
|
||||
struct Cell *cell;
|
||||
|
||||
|
|
@ -306,10 +312,10 @@ void OSFreeToHeap(int heap, void *ptr)
|
|||
ASSERTMSG1(0x241, HeapArray[heap].size >= 0, "OSFreeToHeap(): invalid heap handle.");
|
||||
cell = (void *)((u32)ptr - 0x20);
|
||||
hd = &HeapArray[heap];
|
||||
ASSERTMSG1(0x246, cell->hd == hd, "OSFreeToHeap(): invalid pointer.");
|
||||
ASSERTMSG1(0x247, DLLookup(hd->allocated, cell), "OSFreeToHeap(): invalid pointer.");
|
||||
hd->allocated = DLExtract(hd->allocated, cell);
|
||||
hd->free = DLInsert(hd->free, cell);
|
||||
#endif
|
||||
}
|
||||
|
||||
int OSSetCurrentHeap(int heap)
|
||||
|
|
@ -331,8 +337,8 @@ void *OSInitAlloc(void *arenaStart, void *arenaEnd, int maxHeaps)
|
|||
struct HeapDesc *hd;
|
||||
|
||||
ASSERTMSG1(0x283, maxHeaps > 0, "OSInitAlloc(): invalid number of heaps.");
|
||||
ASSERTMSG1(0x285, (u32)arenaStart < (u32)arenaEnd, "OSInitAlloc(): invalid range.");
|
||||
ASSERTMSG1(0x288, maxHeaps <= (((u32)arenaEnd - (u32)arenaStart) / 24U), "OSInitAlloc(): too small range.");
|
||||
ASSERTMSG1(0x285, (uintptr_t)arenaStart < (uintptr_t)arenaEnd, "OSInitAlloc(): invalid range.");
|
||||
ASSERTMSG1(0x288, maxHeaps <= (((uintptr_t)arenaEnd - (uintptr_t)arenaStart) / 24U), "OSInitAlloc(): too small range.");
|
||||
arraySize = maxHeaps * sizeof(struct HeapDesc);
|
||||
HeapArray = arenaStart;
|
||||
NumHeaps = maxHeaps;
|
||||
|
|
@ -343,34 +349,34 @@ void *OSInitAlloc(void *arenaStart, void *arenaEnd, int maxHeaps)
|
|||
hd->free = hd->allocated = 0;
|
||||
}
|
||||
__OSCurrHeap = -1;
|
||||
arenaStart = (void *)((u32)((char *)HeapArray + arraySize));
|
||||
arenaStart = (void *)(((u32)arenaStart + 0x1F) & 0xFFFFFFE0);
|
||||
arenaStart = (void *)((uintptr_t)((char *)HeapArray + arraySize));
|
||||
arenaStart = (void *)(((uintptr_t)arenaStart + 0x1F) & ~0x1F);
|
||||
ArenaStart = arenaStart;
|
||||
ArenaEnd = (void *)((u32)arenaEnd & 0xFFFFFFE0);
|
||||
ASSERTMSG1(0x2A4, ((u32)ArenaEnd - (u32)ArenaStart) >= 0x40U, "OSInitAlloc(): too small range.");
|
||||
ArenaEnd = (void *)((uintptr_t)arenaEnd & ~0x1F);
|
||||
ASSERTMSG1(0x2A4, ((uintptr_t)ArenaEnd - (uintptr_t)ArenaStart) >= 0x40U, "OSInitAlloc(): too small range.");
|
||||
return arenaStart;
|
||||
}
|
||||
|
||||
int OSCreateHeap(void *start, void *end)
|
||||
uintptr_t OSCreateHeap(void *start, void *end)
|
||||
{
|
||||
int heap;
|
||||
s32 heap;
|
||||
struct HeapDesc *hd;
|
||||
struct Cell *cell;
|
||||
|
||||
ASSERTMSG1(0x2BD, HeapArray, "OSCreateHeap(): heap is not initialized.");
|
||||
ASSERTMSG1(0x2BE, (u32)start < (u32)end, "OSCreateHeap(): invalid range.");
|
||||
ASSERTMSG1(0x2BE, start < end, "OSCreateHeap(): invalid range.");
|
||||
|
||||
start = (void *)(((u32)start + 0x1FU) & ~((32) - 1));
|
||||
end = (void *)(((u32)end) & ~((32) - 1));
|
||||
start = (void *)(((uintptr_t)start + 0x1FU) & ~((32) - 1));
|
||||
end = (void *)(((uintptr_t)end) & ~((32) - 1));
|
||||
|
||||
ASSERTMSG1(0x2C1, (u32)start < (u32)end, "OSCreateHeap(): invalid range.");
|
||||
ASSERTMSG1(0x2C3, (u32)ArenaStart <= (u32)start && (u32)end <= (u32)ArenaEnd, "OSCreateHeap(): invalid range.");
|
||||
ASSERTMSG1(0x2C5, ((u32)end - (u32)start) >= 0x40U, "OSCreateHeap(): too small range.");
|
||||
ASSERTMSG1(0x2C1, (uintptr_t)start < (uintptr_t)end, "OSCreateHeap(): invalid range.");
|
||||
ASSERTMSG1(0x2C3, (uintptr_t)ArenaStart <= (uintptr_t)start && (uintptr_t)end <= (uintptr_t)ArenaEnd, "OSCreateHeap(): invalid range.");
|
||||
ASSERTMSG1(0x2C5, ((uintptr_t)end - (uintptr_t)start) >= 0x40U, "OSCreateHeap(): too small range.");
|
||||
|
||||
for (heap = 0; heap < NumHeaps; heap++) {
|
||||
hd = &HeapArray[heap];
|
||||
if (hd->size < 0) {
|
||||
hd->size = (u32)end - (u32)start;
|
||||
hd->size = (uintptr_t)end - (uintptr_t)start;
|
||||
cell = start;
|
||||
cell->prev = 0;
|
||||
cell->next = 0;
|
||||
|
|
@ -481,12 +487,6 @@ unsigned long OSReferentSize(void *ptr)
|
|||
ASSERTMSG1(0x3BD, InRange(ptr, ArenaStart + HEADERSIZE, ArenaEnd), "OSReferentSize(): invalid pointer.");
|
||||
ASSERTMSG1(0x3BE, !OFFSET(ptr, 32), "OSReferentSize(): invalid pointer.");
|
||||
cell = (void *)((u32)ptr - HEADERSIZE);
|
||||
ASSERTMSG1(0x3C2, cell->hd, "OSReferentSize(): invalid pointer.");
|
||||
ASSERTMSG1(0x3C4, !(((u32)cell->hd - (u32)HeapArray) % 24), "OSReferentSize(): invalid pointer.");
|
||||
ASSERTMSG1(0x3C6, ((u32)HeapArray <= (u32)cell->hd) && ((u32)cell->hd < (u32)((u32)HeapArray + (NumHeaps * 0x18))),
|
||||
"OSReferentSize(): invalid pointer.");
|
||||
ASSERTMSG1(0x3C7, cell->hd->size >= 0, "OSReferentSize(): invalid pointer.");
|
||||
ASSERTMSG1(0x3C9, DLLookup(cell->hd->allocated, cell), "OSReferentSize(): invalid pointer.");
|
||||
return (long)((u32)cell->size - HEADERSIZE);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,8 +3,8 @@
|
|||
#include <dolphin/os.h>
|
||||
#include <dolphin/sipriv.h>
|
||||
|
||||
|
||||
extern OSTime __OSGetSystemTime();
|
||||
extern u32 VIGetCurrentLine(void);
|
||||
|
||||
typedef struct SIControl {
|
||||
s32 chan;
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@ void InitEnvelope(HsfData *arg0) {
|
|||
nObj = temp_r28->count;
|
||||
nMesh = temp_r28->base_idx;
|
||||
}
|
||||
PSMTXIdentity(sp10);
|
||||
MTXIdentity(sp10);
|
||||
SetMtx(arg0->root, sp10);
|
||||
SetRevMtx();
|
||||
}
|
||||
|
|
@ -89,19 +89,19 @@ static void SetEnvelopMtx(HsfObject *arg0, HsfObject *arg1, Mtx arg2) {
|
|||
s32 var_r29;
|
||||
s32 i;
|
||||
|
||||
PSMTXTrans(spC, arg1->data.curr.pos.x, arg1->data.curr.pos.y, arg1->data.curr.pos.z);
|
||||
PSMTXConcat(arg2, spC, sp3C);
|
||||
MTXTrans(spC, arg1->data.curr.pos.x, arg1->data.curr.pos.y, arg1->data.curr.pos.z);
|
||||
MTXConcat(arg2, spC, sp3C);
|
||||
if (arg1->data.curr.rot.z) {
|
||||
PSMTXRotRad(sp6C, 'z', MTXDegToRad(arg1->data.curr.rot.z));
|
||||
PSMTXConcat(sp3C, sp6C, sp3C);
|
||||
MTXRotRad(sp6C, 'z', MTXDegToRad(arg1->data.curr.rot.z));
|
||||
MTXConcat(sp3C, sp6C, sp3C);
|
||||
}
|
||||
if (arg1->data.curr.rot.y) {
|
||||
PSMTXRotRad(sp6C, 'y', MTXDegToRad(arg1->data.curr.rot.y));
|
||||
PSMTXConcat(sp3C, sp6C, sp3C);
|
||||
MTXRotRad(sp6C, 'y', MTXDegToRad(arg1->data.curr.rot.y));
|
||||
MTXConcat(sp3C, sp6C, sp3C);
|
||||
}
|
||||
if (arg1->data.curr.rot.x) {
|
||||
PSMTXRotRad(sp6C, 'x', MTXDegToRad(arg1->data.curr.rot.x));
|
||||
PSMTXConcat(sp3C, sp6C, sp3C);
|
||||
MTXRotRad(sp6C, 'x', MTXDegToRad(arg1->data.curr.rot.x));
|
||||
MTXConcat(sp3C, sp6C, sp3C);
|
||||
}
|
||||
if (arg1->data.curr.scale.x != 1.0f) {
|
||||
sp3C[0][0] *= arg1->data.curr.scale.x;
|
||||
|
|
@ -119,7 +119,7 @@ static void SetEnvelopMtx(HsfObject *arg0, HsfObject *arg1, Mtx arg2) {
|
|||
sp3C[2][2] *= arg1->data.curr.scale.z;
|
||||
}
|
||||
var_r29 = arg1 - arg0;
|
||||
PSMTXCopy(sp3C, MtxTop[nMesh + var_r29]);
|
||||
MTXCopy(sp3C, MtxTop[nMesh + var_r29]);
|
||||
for (i = 0; i < arg1->data.childrenCount; i++) {
|
||||
SetEnvelopMtx(arg0, arg1->data.children[i], sp3C);
|
||||
}
|
||||
|
|
@ -136,7 +136,7 @@ void EnvelopeProc(HsfData *arg0) {
|
|||
nObj = temp_r31->count;
|
||||
nMesh = temp_r31->base_idx;
|
||||
temp_r29 = arg0->root;
|
||||
PSMTXIdentity(sp8);
|
||||
MTXIdentity(sp8);
|
||||
SetEnvelopMtx(arg0->object, temp_r29, sp8);
|
||||
SetEnvelopMain(arg0);
|
||||
}
|
||||
|
|
@ -167,7 +167,7 @@ static void SetEnvelopMain(HsfData *arg0) {
|
|||
var_r31 = arg0->object;
|
||||
for (Meshno = i = 0; i < arg0->objectCnt; i++, var_r31++) {
|
||||
if (var_r31->type == 2) {
|
||||
PSMTXInverse(MtxTop[&var_r31[nMesh] - arg0->object], MtxTop[Meshno]);
|
||||
MTXInverse(MtxTop[&var_r31[nMesh] - arg0->object], MtxTop[Meshno]);
|
||||
temp_r30 = var_r31->data.vertex;
|
||||
temp_r28 = var_r31->data.normal;
|
||||
if (var_r31->data.unk120[0] != 0) {
|
||||
|
|
@ -233,37 +233,37 @@ static void SetEnvelop(HsfCenv *arg0) {
|
|||
temp_r31 = &Vertextop[temp_r21];
|
||||
temp_r22 = &normenv[temp_r18];
|
||||
temp_r26 = &normtop[temp_r18];
|
||||
PSMTXConcat(MtxTop[nMesh + var_r27->target], MtxTop[nMesh + nObj + nObj * Meshno + var_r27->target], sp140);
|
||||
PSMTXConcat(MtxTop[Meshno], sp140, sp1A0);
|
||||
MTXConcat(MtxTop[nMesh + var_r27->target], MtxTop[nMesh + nObj + nObj * Meshno + var_r27->target], sp140);
|
||||
MTXConcat(MtxTop[Meshno], sp140, sp1A0);
|
||||
Hu3DMtxScaleGet(&sp1A0[0], &sp14);
|
||||
if (sp14.x != 1.0f || sp14.y != 1.0f || sp14.z != 1.0f) {
|
||||
PSMTXScale(spE0, 1.0 / sp14.x, 1.0 / sp14.y, 1.0 / sp14.z);
|
||||
PSMTXConcat(spE0, sp1A0, sp170);
|
||||
PSMTXInvXpose(sp170, sp170);
|
||||
MTXScale(spE0, 1.0 / sp14.x, 1.0 / sp14.y, 1.0 / sp14.z);
|
||||
MTXConcat(spE0, sp1A0, sp170);
|
||||
MTXInvXpose(sp170, sp170);
|
||||
} else {
|
||||
PSMTXInvXpose(sp1A0, sp170);
|
||||
MTXInvXpose(sp1A0, sp170);
|
||||
}
|
||||
if (var_r27->posCnt == 1) {
|
||||
PSMTXMultVec(sp1A0, temp_r31, temp_r28);
|
||||
PSMTXMultVec(sp170, temp_r26, temp_r22);
|
||||
MTXMultVec(sp1A0, temp_r31, temp_r28);
|
||||
MTXMultVec(sp170, temp_r26, temp_r22);
|
||||
} else if (var_r27->posCnt <= 6) {
|
||||
PSMTXMultVecArray(sp1A0, temp_r31, temp_r28, var_r27->posCnt);
|
||||
PSMTXMultVecArray(sp170, temp_r26, temp_r22, var_r27->normalCnt);
|
||||
MTXMultVecArray(sp1A0, temp_r31, temp_r28, var_r27->posCnt);
|
||||
MTXMultVecArray(sp170, temp_r26, temp_r22, var_r27->normalCnt);
|
||||
} else {
|
||||
PSMTXReorder(sp1A0, (ROMtxPtr) sp140);
|
||||
PSMTXReorder(sp170, (ROMtxPtr) sp110);
|
||||
PSMTXROMultVecArray((ROMtxPtr) sp140, temp_r31, temp_r28, var_r27->posCnt);
|
||||
PSMTXROMultVecArray((ROMtxPtr) sp110, temp_r26, temp_r22, var_r27->normalCnt);
|
||||
MTXReorder(sp1A0, (ROMtxPtr) sp140);
|
||||
MTXReorder(sp170, (ROMtxPtr) sp110);
|
||||
MTXROMultVecArray((ROMtxPtr) sp140, temp_r31, temp_r28, var_r27->posCnt);
|
||||
MTXROMultVecArray((ROMtxPtr) sp110, temp_r26, temp_r22, var_r27->normalCnt);
|
||||
}
|
||||
}
|
||||
var_r20 = arg0->dualData;
|
||||
for (i = 0; i < arg0->dualCount; i++, var_r20++) {
|
||||
spC = var_r20->target1;
|
||||
sp8 = var_r20->target2;
|
||||
PSMTXConcat(MtxTop[nMesh + spC], MtxTop[nMesh + nObj + nObj * Meshno + spC], sp140);
|
||||
PSMTXConcat(MtxTop[Meshno], sp140, sp1A0);
|
||||
PSMTXConcat(MtxTop[nMesh + sp8], MtxTop[nMesh + nObj + nObj * Meshno + sp8], sp140);
|
||||
PSMTXConcat(MtxTop[Meshno], sp140, (float (*)[4]) &spB0[0]);
|
||||
MTXConcat(MtxTop[nMesh + spC], MtxTop[nMesh + nObj + nObj * Meshno + spC], sp140);
|
||||
MTXConcat(MtxTop[Meshno], sp140, sp1A0);
|
||||
MTXConcat(MtxTop[nMesh + sp8], MtxTop[nMesh + nObj + nObj * Meshno + sp8], sp140);
|
||||
MTXConcat(MtxTop[Meshno], sp140, (float (*)[4]) &spB0[0]);
|
||||
var_r30 = var_r20->weight;
|
||||
for (j = 0; j < var_r20->weightCnt; j++, var_r30++) {
|
||||
temp_r18 = var_r30->normal;
|
||||
|
|
@ -316,32 +316,32 @@ static void SetEnvelop(HsfCenv *arg0) {
|
|||
var_r29[2][2] = sp110[2][2] + sp140[2][2];
|
||||
var_r29[2][3] = sp110[2][3] + sp140[2][3];
|
||||
if (var_r29 == sp50) {
|
||||
PSMTXCopy(sp50, sp80);
|
||||
MTXCopy(sp50, sp80);
|
||||
}
|
||||
Hu3DMtxScaleGet(&sp80[0], &sp14);
|
||||
if (sp14.x != 1.0f || sp14.y != 1.0f || sp14.z != 1.0f) {
|
||||
PSMTXScale(spE0, 1.0 / sp14.x, 1.0 / sp14.y, 1.0 / sp14.z);
|
||||
PSMTXConcat(spE0, sp80, sp110);
|
||||
PSMTXInvXpose(sp110, sp110);
|
||||
MTXScale(spE0, 1.0 / sp14.x, 1.0 / sp14.y, 1.0 / sp14.z);
|
||||
MTXConcat(spE0, sp80, sp110);
|
||||
MTXInvXpose(sp110, sp110);
|
||||
} else {
|
||||
PSMTXInvXpose(sp80, sp110);
|
||||
MTXInvXpose(sp80, sp110);
|
||||
}
|
||||
if (var_r30->posCnt == 1) {
|
||||
PSMTXMultVec(sp80, temp_r31, temp_r28);
|
||||
MTXMultVec(sp80, temp_r31, temp_r28);
|
||||
} else if (var_r30->posCnt <= 6) {
|
||||
PSMTXMultVecArray(sp80, temp_r31, temp_r28, var_r30->posCnt);
|
||||
MTXMultVecArray(sp80, temp_r31, temp_r28, var_r30->posCnt);
|
||||
} else {
|
||||
PSMTXReorder(sp80, (ROMtxPtr) sp140);
|
||||
PSMTXROMultVecArray((ROMtxPtr) sp140, temp_r31, temp_r28, var_r30->posCnt);
|
||||
MTXReorder(sp80, (ROMtxPtr) sp140);
|
||||
MTXROMultVecArray((ROMtxPtr) sp140, temp_r31, temp_r28, var_r30->posCnt);
|
||||
}
|
||||
if (var_r30->normalCnt != 0) {
|
||||
if (var_r30->normalCnt == 1) {
|
||||
PSMTXMultVec(sp110, temp_r26, temp_r22);
|
||||
MTXMultVec(sp110, temp_r26, temp_r22);
|
||||
} else if (var_r30->normalCnt <= 6) {
|
||||
PSMTXMultVecArray(sp110, temp_r26, temp_r22, var_r30->normalCnt);
|
||||
MTXMultVecArray(sp110, temp_r26, temp_r22, var_r30->normalCnt);
|
||||
} else {
|
||||
PSMTXReorder(sp110, (ROMtxPtr) sp140);
|
||||
PSMTXROMultVecArray((ROMtxPtr) sp140, temp_r26, temp_r22, var_r30->normalCnt);
|
||||
MTXReorder(sp110, (ROMtxPtr) sp140);
|
||||
MTXROMultVecArray((ROMtxPtr) sp140, temp_r26, temp_r22, var_r30->normalCnt);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -359,11 +359,11 @@ static void SetEnvelop(HsfCenv *arg0) {
|
|||
sp20.x = sp20.y = sp20.z = 0.0f;
|
||||
sp10 = 0;
|
||||
for (j = 0; j < var_r19->weightCnt; j++, var_r25++) {
|
||||
PSMTXConcat(MtxTop[nMesh + var_r25->target], MtxTop[nMesh + nObj + nObj * Meshno + var_r25->target], sp1A0);
|
||||
PSMTXConcat(MtxTop[Meshno], sp1A0, sp1A0);
|
||||
PSMTXInvXpose(sp1A0, sp170);
|
||||
PSMTXMultVec(sp1A0, temp_r31, &sp44);
|
||||
PSMTXMultVec(sp170, temp_r26, &sp2C);
|
||||
MTXConcat(MtxTop[nMesh + var_r25->target], MtxTop[nMesh + nObj + nObj * Meshno + var_r25->target], sp1A0);
|
||||
MTXConcat(MtxTop[Meshno], sp1A0, sp1A0);
|
||||
MTXInvXpose(sp1A0, sp170);
|
||||
MTXMultVec(sp1A0, temp_r31, &sp44);
|
||||
MTXMultVec(sp170, temp_r26, &sp2C);
|
||||
sp44.x = var_r25->value * (sp44.x - temp_r31->x);
|
||||
sp44.y = var_r25->value * (sp44.y - temp_r31->y);
|
||||
sp44.z = var_r25->value * (sp44.z - temp_r31->z);
|
||||
|
|
@ -410,18 +410,18 @@ static void SetMtx(HsfObject *arg0, Mtx arg1) {
|
|||
arg0->data.base.scale.y = temp_r3->transform.scale.y;
|
||||
arg0->data.base.scale.z = temp_r3->transform.scale.z;
|
||||
}
|
||||
PSMTXTrans(spFC, arg0->data.base.pos.x, arg0->data.base.pos.y, arg0->data.base.pos.z);
|
||||
PSMTXScale(spCC, arg0->data.base.scale.x, arg0->data.base.scale.y, arg0->data.base.scale.z);
|
||||
PSMTXConcat(arg1, spFC, spFC);
|
||||
PSMTXRotRad(sp9C, 'z', MTXDegToRad(arg0->data.base.rot.z));
|
||||
PSMTXConcat(spFC, sp9C, spFC);
|
||||
PSMTXRotRad(sp9C, 'y', MTXDegToRad(arg0->data.base.rot.y));
|
||||
PSMTXConcat(spFC, sp9C, spFC);
|
||||
PSMTXRotRad(sp9C, 'x', MTXDegToRad(arg0->data.base.rot.x));
|
||||
PSMTXConcat(spFC, sp9C, spFC);
|
||||
PSMTXConcat(spFC, spCC, spFC);
|
||||
MTXTrans(spFC, arg0->data.base.pos.x, arg0->data.base.pos.y, arg0->data.base.pos.z);
|
||||
MTXScale(spCC, arg0->data.base.scale.x, arg0->data.base.scale.y, arg0->data.base.scale.z);
|
||||
MTXConcat(arg1, spFC, spFC);
|
||||
MTXRotRad(sp9C, 'z', MTXDegToRad(arg0->data.base.rot.z));
|
||||
MTXConcat(spFC, sp9C, spFC);
|
||||
MTXRotRad(sp9C, 'y', MTXDegToRad(arg0->data.base.rot.y));
|
||||
MTXConcat(spFC, sp9C, spFC);
|
||||
MTXRotRad(sp9C, 'x', MTXDegToRad(arg0->data.base.rot.x));
|
||||
MTXConcat(spFC, sp9C, spFC);
|
||||
MTXConcat(spFC, spCC, spFC);
|
||||
temp_r25 = arg0 - objtop;
|
||||
PSMTXCopy(spFC, MtxTop[nMesh + temp_r25]);
|
||||
MTXCopy(spFC, MtxTop[nMesh + temp_r25]);
|
||||
for (i = 0; i < arg0->data.childrenCount; i++) {
|
||||
SetMtx(arg0->data.children[i], spFC);
|
||||
}
|
||||
|
|
@ -438,12 +438,12 @@ static void SetRevMtx(void) {
|
|||
var_r29 = CurHsf->object;
|
||||
for (var_r28 = i = 0; i < CurHsf->objectCnt; i++, var_r29++) {
|
||||
if (var_r29->type == 2) {
|
||||
PSMTXCopy(MtxTop[nMesh + i], sp8);
|
||||
MTXCopy(MtxTop[nMesh + i], sp8);
|
||||
for (var_r30 = 0; var_r30 < CurHsf->objectCnt; var_r30++) {
|
||||
PSMTXInverse(MtxTop[nMesh + var_r30], sp38);
|
||||
PSMTXConcat(sp38, sp8, MtxTop[nMesh + nObj + nObj * var_r28 + var_r30]);
|
||||
MTXInverse(MtxTop[nMesh + var_r30], sp38);
|
||||
MTXConcat(sp38, sp8, MtxTop[nMesh + nObj + nObj * var_r28 + var_r30]);
|
||||
}
|
||||
PSMTXInverse(MtxTop[nMesh + i], sp8);
|
||||
MTXInverse(MtxTop[nMesh + i], sp8);
|
||||
var_r28++;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -106,4 +106,9 @@ void THPGXYuv2RgbDraw(u32 *yImage, u32 *uImage, u32 *vImage, s16 x, s16 y, s16 t
|
|||
GXPosition3s16(x, y + polyHeight, 0);
|
||||
GXTexCoord2s16(0, 1);
|
||||
GXEnd();
|
||||
#ifdef TARGET_PC
|
||||
GXDestroyTexObj(&sp54);
|
||||
GXDestroyTexObj(&sp34);
|
||||
GXDestroyTexObj(&sp14);
|
||||
#endif
|
||||
}
|
||||
|
|
|
|||
|
|
@ -478,7 +478,7 @@ static void UpdateExplode(omObjData *arg0) {
|
|||
break;
|
||||
case 2:
|
||||
BoardCameraRotGet(&sp8);
|
||||
PSMTXRotRad(sp20, 'x', MTXDegToRad(sp8.x + 10.0f));
|
||||
MTXRotRad(sp20, 'x', MTXDegToRad(sp8.x + 10.0f));
|
||||
BoardModelMtxSet(temp_r30->unk02, &sp20);
|
||||
BoardModelRotSet(temp_r30->unk02, 0.0f, 0.0f, 0.0f);
|
||||
sp14.x = arg0->scale.x;
|
||||
|
|
|
|||
|
|
@ -1035,7 +1035,7 @@ static void ExecItemSwap(void)
|
|||
}
|
||||
BoardModelRotGet(suitMdl, &sp3C);
|
||||
Hu3DCameraSet(0, sp108);
|
||||
PSMTXInverse(sp108, spD8);
|
||||
MTXInverse(sp108, spD8);
|
||||
Hu3DMtxRotGet(spD8, &sp48);
|
||||
sp3C.x = sp48.x;
|
||||
for (var_r31 = 0; var_r31 < var_r28 / 2; var_r31++) {
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -1,5 +1,11 @@
|
|||
#include "game/board/pause.h"
|
||||
#include "game/audio.h"
|
||||
#include "game/board/main.h"
|
||||
#include "game/board/model.h"
|
||||
#include "game/board/player.h"
|
||||
#include "game/board/roll.h"
|
||||
#include "game/board/star.h"
|
||||
#include "game/board/ui.h"
|
||||
#include "game/data.h"
|
||||
#include "game/flag.h"
|
||||
#include "game/gamework_data.h"
|
||||
|
|
@ -11,12 +17,6 @@
|
|||
#include "game/sprite.h"
|
||||
#include "game/window.h"
|
||||
#include "game/wipe.h"
|
||||
#include "game/board/main.h"
|
||||
#include "game/board/model.h"
|
||||
#include "game/board/player.h"
|
||||
#include "game/board/roll.h"
|
||||
#include "game/board/star.h"
|
||||
#include "game/board/ui.h"
|
||||
|
||||
typedef struct {
|
||||
struct {
|
||||
|
|
@ -39,7 +39,6 @@ typedef struct {
|
|||
u32 unk0C;
|
||||
} ConfigWork;
|
||||
|
||||
|
||||
static void PauseExit(void);
|
||||
static void PauseProcess(void);
|
||||
static void CreatePauseScreen(void);
|
||||
|
|
@ -91,56 +90,25 @@ static s16 controlWin = -1;
|
|||
static s16 quitWin = -1;
|
||||
static s16 settingsWin = -1;
|
||||
|
||||
static s16 boxModelID[8] = {
|
||||
-1, -1, -1, -1, -1, -1, -1, -1
|
||||
};
|
||||
static s16 boxModelID[8] = { -1, -1, -1, -1, -1, -1, -1, -1 };
|
||||
|
||||
static float boxPosTbl[8][2] = {
|
||||
{ 120.0f, 120.0f },
|
||||
{ 232.0f, 120.0f },
|
||||
{ 344.0f, 120.0f },
|
||||
{ 456.0f, 120.0f },
|
||||
{ 120.0f, 232.0f },
|
||||
{ 232.0f, 232.0f },
|
||||
{ 344.0f, 232.0f },
|
||||
{ 456.0f, 232.0f }
|
||||
};
|
||||
static float boxPosTbl[8][2] = { { 120.0f, 120.0f }, { 232.0f, 120.0f }, { 344.0f, 120.0f }, { 456.0f, 120.0f }, { 120.0f, 232.0f },
|
||||
{ 232.0f, 232.0f }, { 344.0f, 232.0f }, { 456.0f, 232.0f } };
|
||||
|
||||
static float padConfigPosTbl[4][2] = {
|
||||
{ 170.0f, 160.0f },
|
||||
{ 266.0f, 160.0f },
|
||||
{ 362.0f, 160.0f },
|
||||
{ 458.0f, 160.0f }
|
||||
};
|
||||
static float padConfigPosTbl[4][2] = { { 170.0f, 160.0f }, { 266.0f, 160.0f }, { 362.0f, 160.0f }, { 458.0f, 160.0f } };
|
||||
|
||||
static s32 boardLogoTbl[] = {
|
||||
DATA_MAKE_NUM(DATADIR_BOARD, 87),
|
||||
DATA_MAKE_NUM(DATADIR_BOARD, 88),
|
||||
DATA_MAKE_NUM(DATADIR_BOARD, 89),
|
||||
DATA_MAKE_NUM(DATADIR_BOARD, 90),
|
||||
DATA_MAKE_NUM(DATADIR_BOARD, 91),
|
||||
DATA_MAKE_NUM(DATADIR_BOARD, 92),
|
||||
DATA_MAKE_NUM(DATADIR_BOARD, 87),
|
||||
DATA_MAKE_NUM(DATADIR_BOARD, 93),
|
||||
DATA_MAKE_NUM(DATADIR_BOARD, 94)
|
||||
};
|
||||
static s32 boardLogoTbl[] = { DATA_MAKE_NUM(DATADIR_BOARD, 87), DATA_MAKE_NUM(DATADIR_BOARD, 88), DATA_MAKE_NUM(DATADIR_BOARD, 89),
|
||||
DATA_MAKE_NUM(DATADIR_BOARD, 90), DATA_MAKE_NUM(DATADIR_BOARD, 91), DATA_MAKE_NUM(DATADIR_BOARD, 92), DATA_MAKE_NUM(DATADIR_BOARD, 87),
|
||||
DATA_MAKE_NUM(DATADIR_BOARD, 93), DATA_MAKE_NUM(DATADIR_BOARD, 94) };
|
||||
|
||||
static float turnDigitPosTbl[] = {
|
||||
145.0f, 188.0f, 285.0f, 328.0f
|
||||
};
|
||||
static float turnDigitPosTbl[] = { 145.0f, 188.0f, 285.0f, 328.0f };
|
||||
|
||||
static s32 boxMdlTbl[] = {
|
||||
DATA_MAKE_NUM(DATADIR_BPAUSE, 8),
|
||||
DATA_MAKE_NUM(DATADIR_BPAUSE, 9),
|
||||
DATA_MAKE_NUM(DATADIR_BPAUSE, 10),
|
||||
DATA_MAKE_NUM(DATADIR_BPAUSE, 11),
|
||||
DATA_MAKE_NUM(DATADIR_BPAUSE, 12),
|
||||
DATA_MAKE_NUM(DATADIR_BPAUSE, 13),
|
||||
DATA_MAKE_NUM(DATADIR_BPAUSE, 14),
|
||||
DATA_MAKE_NUM(DATADIR_BPAUSE, 15)
|
||||
};
|
||||
static s32 boxMdlTbl[] = { DATA_MAKE_NUM(DATADIR_BPAUSE, 8), DATA_MAKE_NUM(DATADIR_BPAUSE, 9), DATA_MAKE_NUM(DATADIR_BPAUSE, 10),
|
||||
DATA_MAKE_NUM(DATADIR_BPAUSE, 11), DATA_MAKE_NUM(DATADIR_BPAUSE, 12), DATA_MAKE_NUM(DATADIR_BPAUSE, 13), DATA_MAKE_NUM(DATADIR_BPAUSE, 14),
|
||||
DATA_MAKE_NUM(DATADIR_BPAUSE, 15) };
|
||||
|
||||
void BoardPauseStart(void) {
|
||||
void BoardPauseStart(void)
|
||||
{
|
||||
mainProcess = HuPrcChildCreate(PauseProcess, 0x2001, 0x3800, 0, boardMainProc);
|
||||
hostMdl = BoardStarHostMdlGet();
|
||||
BoardModelMotionStart(hostMdl, 1, 0x40000001);
|
||||
|
|
@ -151,7 +119,8 @@ void BoardPauseStart(void) {
|
|||
HuPrcDestructorSet2(mainProcess, PauseExit);
|
||||
}
|
||||
|
||||
static void PauseExit(void) {
|
||||
static void PauseExit(void)
|
||||
{
|
||||
if (pauseQuitF == 0) {
|
||||
BoardRollWinDispSet(1);
|
||||
BoardRollDispSet(1);
|
||||
|
|
@ -160,7 +129,8 @@ static void PauseExit(void) {
|
|||
BoardLast5GfxShowSet(1);
|
||||
HuAudFXPauseAll(0);
|
||||
HuAudSeqPauseAll(0);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
BoardConfettiKill();
|
||||
BoardAudSeqFadeOutAll();
|
||||
HuAudAllStop();
|
||||
|
|
@ -173,7 +143,8 @@ static void PauseExit(void) {
|
|||
omSysPauseCtrl(0);
|
||||
if (GWMGExplainGet()) {
|
||||
_SetFlag(FLAG_ID_MAKE(0, 11));
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
_ClearFlag(FLAG_ID_MAKE(0, 11));
|
||||
}
|
||||
if (GWPartyGet() == 0) {
|
||||
|
|
@ -182,7 +153,8 @@ static void PauseExit(void) {
|
|||
GWGameStat.story_pause.mg_list = GWMGListGet();
|
||||
GWGameStat.story_pause.mess_speed = GWMessSpeedGet();
|
||||
GWGameStat.story_pause.save_mode = GWSaveModeGet();
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
GWGameStat.party_pause.explain_mg = GWMGExplainGet();
|
||||
GWGameStat.party_pause.show_com_mg = GWMGShowComGet();
|
||||
GWGameStat.party_pause.mg_list = GWMGListGet();
|
||||
|
|
@ -192,7 +164,8 @@ static void PauseExit(void) {
|
|||
mainProcess = NULL;
|
||||
}
|
||||
|
||||
static void PauseProcess(void) {
|
||||
static void PauseProcess(void)
|
||||
{
|
||||
s32 temp_r31;
|
||||
|
||||
pauseQuitF = 0;
|
||||
|
|
@ -222,14 +195,16 @@ static void PauseProcess(void) {
|
|||
HuPrcSleep(20);
|
||||
WipeColorSet(0, 0, 0);
|
||||
BoardKill();
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
BoardFilterFadeOut(30);
|
||||
HuPrcSleep(30);
|
||||
}
|
||||
HuPrcEnd();
|
||||
}
|
||||
|
||||
void CreatePauseScreen(void) {
|
||||
void CreatePauseScreen(void)
|
||||
{
|
||||
Mtx sp30;
|
||||
Vec sp24;
|
||||
Vec sp18;
|
||||
|
|
@ -294,10 +269,12 @@ void CreatePauseScreen(void) {
|
|||
if (GWPartyGet() == 1) {
|
||||
if (GWTeamGet()) {
|
||||
HuSprBankSet(pauseSprGrp, 2, 2);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
HuSprBankSet(pauseSprGrp, 2, 0);
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
HuSprBankSet(pauseSprGrp, 2, 1);
|
||||
}
|
||||
for (i = 0; i < 4; i++) {
|
||||
|
|
@ -334,7 +311,8 @@ void CreatePauseScreen(void) {
|
|||
sp24.x = 68.0f;
|
||||
if (GWBoardGet() == 3) {
|
||||
sp24.y = 464.0f;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
sp24.y = 434.0f;
|
||||
}
|
||||
sp24.z = 1100.0f;
|
||||
|
|
@ -436,7 +414,8 @@ void CreatePauseScreen(void) {
|
|||
SetBoxVisible(0);
|
||||
}
|
||||
|
||||
static void DeletePauseScreen(void) {
|
||||
static void DeletePauseScreen(void)
|
||||
{
|
||||
ConfigWork *temp_r30;
|
||||
Mtx sp8;
|
||||
s32 i;
|
||||
|
|
@ -461,7 +440,7 @@ static void DeletePauseScreen(void) {
|
|||
HuSprGrpKill(pauseCursorPos);
|
||||
pauseCursorPos = -1;
|
||||
}
|
||||
PSMTXIdentity(sp8);
|
||||
MTXIdentity(sp8);
|
||||
BoardModelLayerSet(hostMdl, hostOldLayer);
|
||||
BoardModelVisibilitySet(hostMdl, 1);
|
||||
BoardModelMtxSet(hostMdl, &sp8);
|
||||
|
|
@ -471,7 +450,8 @@ static void DeletePauseScreen(void) {
|
|||
}
|
||||
}
|
||||
|
||||
static void SetBoxVisible(s32 arg0) {
|
||||
static void SetBoxVisible(s32 arg0)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < 8; i++) {
|
||||
|
|
@ -479,7 +459,8 @@ static void SetBoxVisible(s32 arg0) {
|
|||
}
|
||||
}
|
||||
|
||||
static void PauseConfigObjFunc(omObjData *arg0) {
|
||||
static void PauseConfigObjFunc(omObjData *arg0)
|
||||
{
|
||||
ConfigWork *temp_r31;
|
||||
s16 temp_r28;
|
||||
s32 var_r29;
|
||||
|
|
@ -578,7 +559,8 @@ static void PauseConfigObjFunc(omObjData *arg0) {
|
|||
InitPauseQuit(arg0, temp_r31);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
cursorPos = ExecPauseConfig(arg0, temp_r31);
|
||||
if (temp_r28 != cursorPos) {
|
||||
arg0->trans.x = -40.0f + boxPosTbl[cursorPos][0];
|
||||
|
|
@ -590,7 +572,8 @@ static void PauseConfigObjFunc(omObjData *arg0) {
|
|||
}
|
||||
}
|
||||
|
||||
static void UpdatePauseText(s32 arg0) {
|
||||
static void UpdatePauseText(s32 arg0)
|
||||
{
|
||||
s32 var_r28;
|
||||
s32 j;
|
||||
s32 i;
|
||||
|
|
@ -603,7 +586,8 @@ static void UpdatePauseText(s32 arg0) {
|
|||
if (i == GWPlayer[j].port) {
|
||||
if (GWPlayer[j].com) {
|
||||
var_r28 = MAKE_MESSID(16, 30);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
var_r28 = MAKE_MESSID(16, 29);
|
||||
}
|
||||
HuWinInsertMesSet(settingsWin, var_r28, i);
|
||||
|
|
@ -615,14 +599,16 @@ static void UpdatePauseText(s32 arg0) {
|
|||
case 1:
|
||||
if (boxState[arg0] != 0) {
|
||||
HuWinMesSet(settingsWin, MAKE_MESSID(16, 33));
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
HuWinMesSet(settingsWin, MAKE_MESSID(16, 34));
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (boxState[arg0] != 0) {
|
||||
HuWinMesSet(settingsWin, MAKE_MESSID(16, 35));
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
HuWinMesSet(settingsWin, MAKE_MESSID(16, 36));
|
||||
}
|
||||
break;
|
||||
|
|
@ -642,7 +628,8 @@ static void UpdatePauseText(s32 arg0) {
|
|||
case 4:
|
||||
if (boxState[arg0] != 0) {
|
||||
HuWinMesSet(settingsWin, MAKE_MESSID(16, 40));
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
HuWinMesSet(settingsWin, MAKE_MESSID(16, 41));
|
||||
}
|
||||
break;
|
||||
|
|
@ -678,7 +665,8 @@ static void UpdatePauseText(s32 arg0) {
|
|||
}
|
||||
}
|
||||
|
||||
static void InitPauseQuit(omObjData *arg0, ConfigWork *arg1) {
|
||||
static void InitPauseQuit(omObjData *arg0, ConfigWork *arg1)
|
||||
{
|
||||
float var_f31;
|
||||
|
||||
switch (arg1->unk01) {
|
||||
|
|
@ -696,7 +684,8 @@ static void InitPauseQuit(omObjData *arg0, ConfigWork *arg1) {
|
|||
if (quitWin != -1 && HuWinStatGet(quitWin) == 3) {
|
||||
if (HuWinChoiceNowGet(quitWin) != 0) {
|
||||
HuWinMesSet(settingsWin, MAKE_MESSID(16, 51));
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
HuWinMesSet(settingsWin, MAKE_MESSID(16, 50));
|
||||
}
|
||||
}
|
||||
|
|
@ -725,7 +714,8 @@ static void InitPauseQuit(omObjData *arg0, ConfigWork *arg1) {
|
|||
}
|
||||
}
|
||||
|
||||
static void PauseQuitProcess(void) {
|
||||
static void PauseQuitProcess(void)
|
||||
{
|
||||
WindowData *temp_r31;
|
||||
float sp10[2];
|
||||
float sp8[2];
|
||||
|
|
@ -748,7 +738,8 @@ static void PauseQuitProcess(void) {
|
|||
HuPrcEnd();
|
||||
}
|
||||
|
||||
static void DeletePauseQuit(void) {
|
||||
static void DeletePauseQuit(void)
|
||||
{
|
||||
if (quitWin != -1) {
|
||||
HuWinExCleanup(quitWin);
|
||||
quitWin = -1;
|
||||
|
|
@ -757,7 +748,8 @@ static void DeletePauseQuit(void) {
|
|||
quitProcess = NULL;
|
||||
}
|
||||
|
||||
static s32 UpdatePadConfig(omObjData *arg0, ConfigWork *arg1) {
|
||||
static s32 UpdatePadConfig(omObjData *arg0, ConfigWork *arg1)
|
||||
{
|
||||
switch (arg1->unk01) {
|
||||
case 0:
|
||||
CreatePadConfig(arg0, arg1);
|
||||
|
|
@ -777,12 +769,14 @@ static s32 UpdatePadConfig(omObjData *arg0, ConfigWork *arg1) {
|
|||
}
|
||||
if (arg1->unk00_field1 != 0) {
|
||||
return 0;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
static void CreatePadConfig(omObjData *arg0, ConfigWork *arg1) {
|
||||
static void CreatePadConfig(omObjData *arg0, ConfigWork *arg1)
|
||||
{
|
||||
Vec sp14;
|
||||
Vec sp8;
|
||||
s32 i;
|
||||
|
|
@ -817,7 +811,8 @@ static void CreatePadConfig(omObjData *arg0, ConfigWork *arg1) {
|
|||
arg1->unk01 = 1;
|
||||
}
|
||||
|
||||
static void ScrollInPadConfig(omObjData *arg0, ConfigWork *arg1) {
|
||||
static void ScrollInPadConfig(omObjData *arg0, ConfigWork *arg1)
|
||||
{
|
||||
Vec sp8;
|
||||
s32 i;
|
||||
|
||||
|
|
@ -834,7 +829,8 @@ static void ScrollInPadConfig(omObjData *arg0, ConfigWork *arg1) {
|
|||
arg1->unk04 = 0;
|
||||
arg1->unk05 = 0;
|
||||
arg1->unk01 = 0;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
arg1->unk01 = 2;
|
||||
}
|
||||
return;
|
||||
|
|
@ -848,7 +844,8 @@ static void ScrollInPadConfig(omObjData *arg0, ConfigWork *arg1) {
|
|||
arg1->unk07--;
|
||||
}
|
||||
|
||||
static void CursorMovePadConfig(omObjData *arg0, ConfigWork *arg1) {
|
||||
static void CursorMovePadConfig(omObjData *arg0, ConfigWork *arg1)
|
||||
{
|
||||
float sp8[4];
|
||||
s32 temp_r29;
|
||||
u32 temp_r30;
|
||||
|
|
@ -861,16 +858,19 @@ static void CursorMovePadConfig(omObjData *arg0, ConfigWork *arg1) {
|
|||
if (GWPlayer[temp_r29].com) {
|
||||
arg1->unk00_field3 = GWPlayer[temp_r29].diff + 1;
|
||||
arg1->unk05 = GWPlayer[temp_r29].diff + 1;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
arg1->unk00_field3 = 0;
|
||||
arg1->unk05 = 0;
|
||||
}
|
||||
HuSprBankSet(padConfigSprGrp, arg1->unk04 + 8, 1);
|
||||
HuAudFXPlay(2);
|
||||
} else if (temp_r30 == 0x200) {
|
||||
}
|
||||
else if (temp_r30 == 0x200) {
|
||||
HuAudFXPlay(3);
|
||||
arg1->unk01 = 4;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
if (temp_r30 == 1) {
|
||||
arg1->unk04--;
|
||||
}
|
||||
|
|
@ -879,9 +879,11 @@ static void CursorMovePadConfig(omObjData *arg0, ConfigWork *arg1) {
|
|||
}
|
||||
if (arg1->unk04 < 0) {
|
||||
arg1->unk04 = 0;
|
||||
} else if (arg1->unk04 >= 4) {
|
||||
}
|
||||
else if (arg1->unk04 >= 4) {
|
||||
arg1->unk04 = 3;
|
||||
} else if (temp_r30 == 1 || temp_r30 == 2) {
|
||||
}
|
||||
else if (temp_r30 == 1 || temp_r30 == 2) {
|
||||
HuAudFXPlay(0);
|
||||
arg1->unk06 = 4;
|
||||
}
|
||||
|
|
@ -891,7 +893,8 @@ static void CursorMovePadConfig(omObjData *arg0, ConfigWork *arg1) {
|
|||
}
|
||||
}
|
||||
|
||||
static void ChangeDiffPadConfig(omObjData *arg0, ConfigWork *arg1) {
|
||||
static void ChangeDiffPadConfig(omObjData *arg0, ConfigWork *arg1)
|
||||
{
|
||||
s32 temp_r29;
|
||||
s32 var_r28;
|
||||
s32 var_r26;
|
||||
|
|
@ -901,13 +904,15 @@ static void ChangeDiffPadConfig(omObjData *arg0, ConfigWork *arg1) {
|
|||
var_r30 = 0;
|
||||
if (HuPadStkX[pausePad] < -20) {
|
||||
var_r30 |= 1;
|
||||
} else if (HuPadStkX[pausePad] > 20) {
|
||||
}
|
||||
else if (HuPadStkX[pausePad] > 20) {
|
||||
var_r30 |= 2;
|
||||
}
|
||||
temp_r29 = CheckPort(arg1->unk04);
|
||||
if (GWGameStat.veryHardUnlock != 0) {
|
||||
var_r27 = 4;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
var_r27 = 3;
|
||||
}
|
||||
HuWinMesSet(settingsWin, MAKE_MESSID(16, 32));
|
||||
|
|
@ -916,13 +921,15 @@ static void ChangeDiffPadConfig(omObjData *arg0, ConfigWork *arg1) {
|
|||
if (arg1->unk09++ < 10) {
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
if (arg1->unk09++ < 2) {
|
||||
return;
|
||||
}
|
||||
arg1->unk0C = var_r30;
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
arg1->unk0C = 0;
|
||||
}
|
||||
arg1->unk09 = 0;
|
||||
|
|
@ -936,7 +943,8 @@ static void ChangeDiffPadConfig(omObjData *arg0, ConfigWork *arg1) {
|
|||
if (var_r28 != 0) {
|
||||
HuAudFXPlay(0);
|
||||
arg1->unk06 = 4;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
if (HuPadBtnDown[pausePad] == 0x100) {
|
||||
arg1->unk01 = 2;
|
||||
if (arg1->unk05 != 0) {
|
||||
|
|
@ -944,7 +952,8 @@ static void ChangeDiffPadConfig(omObjData *arg0, ConfigWork *arg1) {
|
|||
GWPlayerCfg[temp_r29].iscom = 1;
|
||||
GWPlayer[temp_r29].diff = arg1->unk05 - 1;
|
||||
GWPlayerCfg[temp_r29].diff = arg1->unk05 - 1;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
GWPlayer[temp_r29].com = 0;
|
||||
GWPlayerCfg[temp_r29].iscom = 0;
|
||||
}
|
||||
|
|
@ -967,18 +976,21 @@ static void ChangeDiffPadConfig(omObjData *arg0, ConfigWork *arg1) {
|
|||
}
|
||||
if (arg1->unk05 > var_r27) {
|
||||
arg1->unk05 = 0;
|
||||
} else if (arg1->unk05 < 0) {
|
||||
}
|
||||
else if (arg1->unk05 < 0) {
|
||||
arg1->unk05 = var_r27;
|
||||
}
|
||||
if (arg1->unk05 != 0) {
|
||||
var_r26 = arg1->unk05 + 3;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
var_r26 = arg1->unk04;
|
||||
}
|
||||
HuSprBankSet(padConfigSprGrp, arg1->unk04 + 4, var_r26);
|
||||
}
|
||||
|
||||
static void ScrollOutPadConfig(omObjData *arg0, ConfigWork *arg1) {
|
||||
static void ScrollOutPadConfig(omObjData *arg0, ConfigWork *arg1)
|
||||
{
|
||||
Vec sp14;
|
||||
Vec sp8;
|
||||
|
||||
|
|
@ -1003,7 +1015,8 @@ static void ScrollOutPadConfig(omObjData *arg0, ConfigWork *arg1) {
|
|||
arg1->unk00_field2 = 1;
|
||||
}
|
||||
|
||||
static s32 UpdatePauseBox(omObjData *arg0, ConfigWork *arg1, s32 arg2) {
|
||||
static s32 UpdatePauseBox(omObjData *arg0, ConfigWork *arg1, s32 arg2)
|
||||
{
|
||||
float var_f31;
|
||||
float var_f30;
|
||||
float var_f29;
|
||||
|
|
@ -1031,21 +1044,26 @@ static s32 UpdatePauseBox(omObjData *arg0, ConfigWork *arg1, s32 arg2) {
|
|||
}
|
||||
if (arg1->unk04 < 0) {
|
||||
arg1->unk04 = 0;
|
||||
} else if (arg1->unk04 > 1) {
|
||||
}
|
||||
else if (arg1->unk04 > 1) {
|
||||
arg1->unk04 = 1;
|
||||
} else if (temp_r28 == 1 || temp_r28 == 2) {
|
||||
}
|
||||
else if (temp_r28 == 1 || temp_r28 == 2) {
|
||||
HuAudFXPlay(0);
|
||||
}
|
||||
if (temp_r28 == 0x100) {
|
||||
arg1->unk01 = 3;
|
||||
HuAudFXPlay(2);
|
||||
} else if (temp_r28 == 0x200) {
|
||||
}
|
||||
else if (temp_r28 == 0x200) {
|
||||
arg1->unk01 = 4;
|
||||
HuAudFXPlay(3);
|
||||
} else if (temp_r27 != arg1->unk04) {
|
||||
}
|
||||
else if (temp_r27 != arg1->unk04) {
|
||||
if (arg1->unk04 != 0) {
|
||||
var_f30 = 0.0f;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
var_f30 = -90.0f;
|
||||
}
|
||||
var_f29 = arg0->rot.x;
|
||||
|
|
@ -1058,7 +1076,8 @@ static s32 UpdatePauseBox(omObjData *arg0, ConfigWork *arg1, s32 arg2) {
|
|||
if (arg1->unk07 != 0) {
|
||||
arg0->rot.x += arg0->rot.y;
|
||||
arg1->unk07--;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
arg1->unk01 = 1;
|
||||
}
|
||||
break;
|
||||
|
|
@ -1091,7 +1110,8 @@ static s32 UpdatePauseBox(omObjData *arg0, ConfigWork *arg1, s32 arg2) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
static s32 UpdatePauseBoxExt(omObjData *arg0, ConfigWork *arg1, s32 arg2) {
|
||||
static s32 UpdatePauseBoxExt(omObjData *arg0, ConfigWork *arg1, s32 arg2)
|
||||
{
|
||||
float var_f31;
|
||||
float var_f30;
|
||||
float var_f29;
|
||||
|
|
@ -1102,7 +1122,8 @@ static s32 UpdatePauseBoxExt(omObjData *arg0, ConfigWork *arg1, s32 arg2) {
|
|||
|
||||
if (arg2 == 3 && GWGameStat.customPackEnable == 0) {
|
||||
var_r27 = 1;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
var_r27 = 2;
|
||||
}
|
||||
switch (arg1->unk01) {
|
||||
|
|
@ -1125,18 +1146,22 @@ static s32 UpdatePauseBoxExt(omObjData *arg0, ConfigWork *arg1, s32 arg2) {
|
|||
}
|
||||
if (arg1->unk04 < 0) {
|
||||
arg1->unk04 = 0;
|
||||
} else if (arg1->unk04 > var_r27) {
|
||||
}
|
||||
else if (arg1->unk04 > var_r27) {
|
||||
arg1->unk04 = var_r27;
|
||||
} else if (temp_r28 == 1 || temp_r28 == 2) {
|
||||
}
|
||||
else if (temp_r28 == 1 || temp_r28 == 2) {
|
||||
HuAudFXPlay(0);
|
||||
}
|
||||
if (temp_r28 == 0x100) {
|
||||
arg1->unk01 = 3;
|
||||
HuAudFXPlay(2);
|
||||
} else if (temp_r28 == 0x200) {
|
||||
}
|
||||
else if (temp_r28 == 0x200) {
|
||||
arg1->unk01 = 4;
|
||||
HuAudFXPlay(3);
|
||||
} else if (temp_r26 != arg1->unk04) {
|
||||
}
|
||||
else if (temp_r26 != arg1->unk04) {
|
||||
switch (arg1->unk04) {
|
||||
case 0:
|
||||
var_f30 = 90.0f;
|
||||
|
|
@ -1158,7 +1183,8 @@ static s32 UpdatePauseBoxExt(omObjData *arg0, ConfigWork *arg1, s32 arg2) {
|
|||
if (arg1->unk07 != 0) {
|
||||
arg0->rot.x += arg0->rot.y;
|
||||
arg1->unk07--;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
arg1->unk01 = 1;
|
||||
}
|
||||
break;
|
||||
|
|
@ -1191,7 +1217,8 @@ static s32 UpdatePauseBoxExt(omObjData *arg0, ConfigWork *arg1, s32 arg2) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
static s32 ExecPauseConfig(omObjData *arg0, ConfigWork *arg1) {
|
||||
static s32 ExecPauseConfig(omObjData *arg0, ConfigWork *arg1)
|
||||
{
|
||||
s32 var_r27;
|
||||
s32 var_r26;
|
||||
s32 var_r29;
|
||||
|
|
@ -1218,17 +1245,21 @@ static s32 ExecPauseConfig(omObjData *arg0, ConfigWork *arg1) {
|
|||
arg1->unk03 += var_r28;
|
||||
if (arg1->unk03 < 0) {
|
||||
arg1->unk03 = 0;
|
||||
} else if (arg1->unk03 >= 2) {
|
||||
}
|
||||
else if (arg1->unk03 >= 2) {
|
||||
arg1->unk03 = 1;
|
||||
} else if (var_r28 != 0) {
|
||||
}
|
||||
else if (var_r28 != 0) {
|
||||
HuAudFXPlay(0);
|
||||
arg1->unk06 = 4;
|
||||
}
|
||||
if (arg1->unk02 < 0) {
|
||||
arg1->unk02 = 0;
|
||||
} else if (arg1->unk02 >= 4) {
|
||||
}
|
||||
else if (arg1->unk02 >= 4) {
|
||||
arg1->unk02 = 3;
|
||||
} else if (var_r29 != 0) {
|
||||
}
|
||||
else if (var_r29 != 0) {
|
||||
HuAudFXPlay(0);
|
||||
arg1->unk06 = 4;
|
||||
}
|
||||
|
|
@ -1251,7 +1282,8 @@ static s32 ExecPauseConfig(omObjData *arg0, ConfigWork *arg1) {
|
|||
}
|
||||
if (var_r26 != 0) {
|
||||
HuAudFXPlay(4);
|
||||
} else if (var_r27 != 0) {
|
||||
}
|
||||
else if (var_r27 != 0) {
|
||||
HuAudFXPlay(2);
|
||||
arg1->unk00_field1 = 1;
|
||||
}
|
||||
|
|
@ -1263,7 +1295,8 @@ static s32 ExecPauseConfig(omObjData *arg0, ConfigWork *arg1) {
|
|||
return arg1->unk02 + arg1->unk03 * 4;
|
||||
}
|
||||
|
||||
static void CreatePauseControlWin(void) {
|
||||
static void CreatePauseControlWin(void)
|
||||
{
|
||||
float sp8[2];
|
||||
float var_f31;
|
||||
float var_f30;
|
||||
|
|
@ -1280,7 +1313,8 @@ static void CreatePauseControlWin(void) {
|
|||
HuWinDispOff(settingsControlWin);
|
||||
if (GWBoardGet() == 7 || GWBoardGet() == 8) {
|
||||
var_r31 = MAKE_MESSID(16, 73);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
var_r31 = MAKE_MESSID(16, 52);
|
||||
}
|
||||
HuWinMesMaxSizeGet(1, sp8, var_r31);
|
||||
|
|
@ -1304,7 +1338,8 @@ static void CreatePauseControlWin(void) {
|
|||
sp8[1] = 128.0f;
|
||||
}
|
||||
|
||||
static void DeletePauseControlWin(void) {
|
||||
static void DeletePauseControlWin(void)
|
||||
{
|
||||
if (settingsControlWin != -1) {
|
||||
HuWinKill(settingsControlWin);
|
||||
settingsControlWin = -1;
|
||||
|
|
@ -1319,7 +1354,8 @@ static void DeletePauseControlWin(void) {
|
|||
}
|
||||
}
|
||||
|
||||
static s32 WaitPauseInput(void) {
|
||||
static s32 WaitPauseInput(void)
|
||||
{
|
||||
s32 var_r28;
|
||||
s32 var_r31;
|
||||
u32 temp_r30;
|
||||
|
|
@ -1327,7 +1363,8 @@ static s32 WaitPauseInput(void) {
|
|||
mainScreenF = 1;
|
||||
if (GWBoardGet() == 7 || GWBoardGet() == 8) {
|
||||
var_r28 = 1;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
var_r28 = 0;
|
||||
}
|
||||
HuWinDispOn(controlWin);
|
||||
|
|
@ -1344,13 +1381,15 @@ static s32 WaitPauseInput(void) {
|
|||
var_r31 = 0;
|
||||
HuAudFXPlay(0x1C);
|
||||
break;
|
||||
} else if (var_r28 == 0) {
|
||||
}
|
||||
else if (var_r28 == 0) {
|
||||
if (temp_r30 == 0x100) {
|
||||
var_r31 = 1;
|
||||
HuAudFXPlay(1);
|
||||
break;
|
||||
}
|
||||
} else if (temp_r30 == 0x10) {
|
||||
}
|
||||
else if (temp_r30 == 0x10) {
|
||||
pauseQuitF = 1;
|
||||
var_r31 = 2;
|
||||
mgQuitExtraF = 1;
|
||||
|
|
@ -1368,7 +1407,8 @@ static s32 WaitPauseInput(void) {
|
|||
return var_r31;
|
||||
}
|
||||
|
||||
static void ShowPauseConfig(void) {
|
||||
static void ShowPauseConfig(void)
|
||||
{
|
||||
float var_f31;
|
||||
float var_f30;
|
||||
|
||||
|
|
@ -1383,7 +1423,8 @@ static void ShowPauseConfig(void) {
|
|||
var_f30 = boxPosTbl[0][1];
|
||||
HuSprPosSet(pauseCursorPos, 1, var_f31, var_f30);
|
||||
HuSprAttrReset(pauseCursorPos, 1, HUSPR_ATTR_DISPOFF);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
HuSprAttrSet(pauseCursorPos, 1, HUSPR_ATTR_DISPOFF);
|
||||
}
|
||||
while (configObj) {
|
||||
|
|
@ -1391,7 +1432,8 @@ static void ShowPauseConfig(void) {
|
|||
}
|
||||
}
|
||||
|
||||
static void CreatePadConfigSprite(void) {
|
||||
static void CreatePadConfigSprite(void)
|
||||
{
|
||||
float temp_f31;
|
||||
float temp_f30;
|
||||
s32 var_r29;
|
||||
|
|
@ -1415,7 +1457,8 @@ static void CreatePadConfigSprite(void) {
|
|||
HuSprBankSet(padConfigSprGrp, i, temp_r28);
|
||||
if (temp_r26 != 0) {
|
||||
var_r29 = temp_r27 + 4;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
var_r29 = i;
|
||||
}
|
||||
HuSprBankSet(padConfigSprGrp, i + 4, var_r29);
|
||||
|
|
@ -1427,7 +1470,8 @@ static void CreatePadConfigSprite(void) {
|
|||
HuSprGrpPosSet(padConfigSprGrp, 0.0f, 0.0f);
|
||||
}
|
||||
|
||||
static void ShowPadConfigSprite(s32 arg0) {
|
||||
static void ShowPadConfigSprite(s32 arg0)
|
||||
{
|
||||
s32 temp_r31;
|
||||
s32 i;
|
||||
|
||||
|
|
@ -1437,7 +1481,8 @@ static void ShowPadConfigSprite(s32 arg0) {
|
|||
HuSprAttrReset(padConfigSprGrp, temp_r31, HUSPR_ATTR_DISPOFF);
|
||||
HuSprAttrReset(padConfigSprGrp, temp_r31 + 4, HUSPR_ATTR_DISPOFF);
|
||||
HuSprAttrReset(padConfigSprGrp, temp_r31 + 8, HUSPR_ATTR_DISPOFF);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
HuSprAttrSet(padConfigSprGrp, temp_r31, HUSPR_ATTR_DISPOFF);
|
||||
HuSprAttrSet(padConfigSprGrp, temp_r31 + 4, HUSPR_ATTR_DISPOFF);
|
||||
HuSprAttrSet(padConfigSprGrp, temp_r31 + 8, HUSPR_ATTR_DISPOFF);
|
||||
|
|
@ -1445,12 +1490,14 @@ static void ShowPadConfigSprite(s32 arg0) {
|
|||
}
|
||||
if (arg0 != 0) {
|
||||
HuSprAttrReset(padConfigSprGrp, 12, HUSPR_ATTR_DISPOFF);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
HuSprAttrSet(padConfigSprGrp, 12, HUSPR_ATTR_DISPOFF);
|
||||
}
|
||||
}
|
||||
|
||||
static void PauseCreateNumber(s32 arg0, s8 arg1) {
|
||||
static void PauseCreateNumber(s32 arg0, s8 arg1)
|
||||
{
|
||||
s32 var_r31;
|
||||
s32 temp_r30;
|
||||
s32 temp_r29;
|
||||
|
|
@ -1459,22 +1506,26 @@ static void PauseCreateNumber(s32 arg0, s8 arg1) {
|
|||
temp_r30 = arg1 / 10;
|
||||
if (arg0 == 0) {
|
||||
var_r31 = 3;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
var_r31 = 5;
|
||||
}
|
||||
if (temp_r30 != 0) {
|
||||
HuSprBankSet(pauseSprGrp, var_r31, temp_r30);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
HuSprAttrSet(pauseSprGrp, var_r31, 4);
|
||||
}
|
||||
HuSprBankSet(pauseSprGrp, var_r31 + 1, temp_r29);
|
||||
}
|
||||
|
||||
BOOL BoardPauseActiveCheck(void) {
|
||||
BOOL BoardPauseActiveCheck(void)
|
||||
{
|
||||
return (mainProcess != NULL) ? TRUE : FALSE;
|
||||
}
|
||||
|
||||
BOOL BoardPauseReqCheck(void) {
|
||||
BOOL BoardPauseReqCheck(void)
|
||||
{
|
||||
s32 temp_r30;
|
||||
s32 i;
|
||||
|
||||
|
|
@ -1495,7 +1546,8 @@ BOOL BoardPauseReqCheck(void) {
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
static s32 CheckPort(s32 arg0) {
|
||||
static s32 CheckPort(s32 arg0)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
|
|
@ -1506,7 +1558,8 @@ static s32 CheckPort(s32 arg0) {
|
|||
return i;
|
||||
}
|
||||
|
||||
static void RotateBox(float arg0, float arg1, Mtx arg2) {
|
||||
static void RotateBox(float arg0, float arg1, Mtx arg2)
|
||||
{
|
||||
Vec sp14;
|
||||
Mtx spB0;
|
||||
Mtx sp80;
|
||||
|
|
@ -1514,11 +1567,11 @@ static void RotateBox(float arg0, float arg1, Mtx arg2) {
|
|||
Mtx sp20;
|
||||
|
||||
BoardCameraRotGet(&sp14);
|
||||
PSMTXRotRad(spB0, 'x', MTXDegToRad(sp14.x));
|
||||
PSMTXRotRad(sp80, 'y', MTXDegToRad(sp14.y));
|
||||
PSMTXRotRad(sp50, 'x', MTXDegToRad(arg0));
|
||||
PSMTXRotRad(sp20, 'y', MTXDegToRad(arg1));
|
||||
PSMTXConcat(sp80, spB0, sp80);
|
||||
PSMTXConcat(sp50, sp20, sp20);
|
||||
PSMTXConcat(sp80, sp20, arg2);
|
||||
MTXRotRad(spB0, 'x', MTXDegToRad(sp14.x));
|
||||
MTXRotRad(sp80, 'y', MTXDegToRad(sp14.y));
|
||||
MTXRotRad(sp50, 'x', MTXDegToRad(arg0));
|
||||
MTXRotRad(sp20, 'y', MTXDegToRad(arg1));
|
||||
MTXConcat(sp80, spB0, sp80);
|
||||
MTXConcat(sp50, sp20, sp20);
|
||||
MTXConcat(sp80, sp20, arg2);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,13 +1,5 @@
|
|||
#include "game/board/shop.h"
|
||||
#include "game/audio.h"
|
||||
#include "game/gamework.h"
|
||||
#include "game/gamework_data.h"
|
||||
#include "game/object.h"
|
||||
#include "game/objsub.h"
|
||||
#include "game/disp.h"
|
||||
#include "game/pad.h"
|
||||
#include "game/process.h"
|
||||
#include "game/sprite.h"
|
||||
#include "game/board/audio.h"
|
||||
#include "game/board/com.h"
|
||||
#include "game/board/com_path.h"
|
||||
|
|
@ -20,6 +12,14 @@
|
|||
#include "game/board/ui.h"
|
||||
#include "game/board/view.h"
|
||||
#include "game/board/window.h"
|
||||
#include "game/disp.h"
|
||||
#include "game/gamework.h"
|
||||
#include "game/gamework_data.h"
|
||||
#include "game/object.h"
|
||||
#include "game/objsub.h"
|
||||
#include "game/pad.h"
|
||||
#include "game/process.h"
|
||||
#include "game/sprite.h"
|
||||
|
||||
#include "dolphin.h"
|
||||
#include "ext_math.h"
|
||||
|
|
@ -103,39 +103,20 @@ static Process *shopProc;
|
|||
static s16 itemMdl = -1;
|
||||
static s8 itemChoice = -1;
|
||||
|
||||
static BoardModelParam shopMdlParam[1] = {
|
||||
{ 0x00070094, { 0, 1, 0, 0, 0 }, -1 }
|
||||
};
|
||||
static BoardModelParam shopMdlParam[1] = { { 0x00070094, { 0, 1, 0, 0, 0 }, -1 } };
|
||||
|
||||
static s16 hostMdl = -1;
|
||||
static s16 shopMot[3] = { -1, -1, -1 };
|
||||
static s8 itemCurChoice = -1;
|
||||
|
||||
static s8 defaultItemTbl[5] = {
|
||||
0x05, 0x07, 0x02, 0x03, 0x00
|
||||
};
|
||||
static s8 defaultItemTbl[5] = { 0x05, 0x07, 0x02, 0x03, 0x00 };
|
||||
|
||||
static s32 hostMessTbl[] = {
|
||||
MAKE_MESSID(0x0F, 0x04),
|
||||
MAKE_MESSID(0x0F, 0x07),
|
||||
MAKE_MESSID(0x0F, 0x0A),
|
||||
MAKE_MESSID(0x0F, 0x0D),
|
||||
MAKE_MESSID(0x0F, 0x10),
|
||||
MAKE_MESSID(0x0F, 0x13),
|
||||
MAKE_MESSID(0x0F, 0x04),
|
||||
MAKE_MESSID(0x0F, 0x24),
|
||||
MAKE_MESSID(0x0F, 0x24)
|
||||
};
|
||||
static s32 hostMessTbl[] = { MAKE_MESSID(0x0F, 0x04), MAKE_MESSID(0x0F, 0x07), MAKE_MESSID(0x0F, 0x0A), MAKE_MESSID(0x0F, 0x0D),
|
||||
MAKE_MESSID(0x0F, 0x10), MAKE_MESSID(0x0F, 0x13), MAKE_MESSID(0x0F, 0x04), MAKE_MESSID(0x0F, 0x24), MAKE_MESSID(0x0F, 0x24) };
|
||||
|
||||
static s8 itemPriceTbl[] = {
|
||||
5, 5, 15, 15,
|
||||
10, 10, 15, 15,
|
||||
15, 15, 0, 25,
|
||||
30, 30, 0, 0
|
||||
};
|
||||
static s8 itemPriceTbl[] = { 5, 5, 15, 15, 10, 10, 15, 15, 15, 15, 0, 25, 30, 30, 0, 0 };
|
||||
|
||||
static s32 shopMotTbl[9][3] = {
|
||||
{ DATA_MAKE_NUM(DATADIR_BGUEST, 0x01), DATA_MAKE_NUM(DATADIR_BGUEST, 0x03), DATA_MAKE_NUM(DATADIR_BGUEST, 0x04) },
|
||||
static s32 shopMotTbl[9][3] = { { DATA_MAKE_NUM(DATADIR_BGUEST, 0x01), DATA_MAKE_NUM(DATADIR_BGUEST, 0x03), DATA_MAKE_NUM(DATADIR_BGUEST, 0x04) },
|
||||
{ DATA_MAKE_NUM(DATADIR_BGUEST, 0x09), DATA_MAKE_NUM(DATADIR_BGUEST, 0x0B), DATA_MAKE_NUM(DATADIR_BGUEST, 0x0C) },
|
||||
{ DATA_MAKE_NUM(DATADIR_BGUEST, 0x0E), DATA_MAKE_NUM(DATADIR_BGUEST, 0x10), DATA_MAKE_NUM(DATADIR_BGUEST, 0x11) },
|
||||
{ DATA_MAKE_NUM(DATADIR_BGUEST, 0x18), DATA_MAKE_NUM(DATADIR_BGUEST, 0x1A), DATA_MAKE_NUM(DATADIR_BGUEST, 0x1B) },
|
||||
|
|
@ -143,27 +124,26 @@ static s32 shopMotTbl[9][3] = {
|
|||
{ DATA_MAKE_NUM(DATADIR_BGUEST, 0x22), DATA_MAKE_NUM(DATADIR_BGUEST, 0x24), DATA_MAKE_NUM(DATADIR_BGUEST, 0x25) },
|
||||
{ DATA_MAKE_NUM(DATADIR_BGUEST, 0x09), DATA_MAKE_NUM(DATADIR_BGUEST, 0x0B), DATA_MAKE_NUM(DATADIR_BGUEST, 0x0C) },
|
||||
{ DATA_MAKE_NUM(DATADIR_BGUEST, 0x2A), DATA_MAKE_NUM(DATADIR_BGUEST, 0x2C), DATA_MAKE_NUM(DATADIR_BGUEST, 0x2D) },
|
||||
{ DATA_MAKE_NUM(DATADIR_BGUEST, 0x2A), DATA_MAKE_NUM(DATADIR_BGUEST, 0x2C), DATA_MAKE_NUM(DATADIR_BGUEST, 0x2D) }
|
||||
};
|
||||
{ DATA_MAKE_NUM(DATADIR_BGUEST, 0x2A), DATA_MAKE_NUM(DATADIR_BGUEST, 0x2C), DATA_MAKE_NUM(DATADIR_BGUEST, 0x2D) } };
|
||||
|
||||
void BoardShopHostSet(s16 arg0) {
|
||||
void BoardShopHostSet(s16 arg0)
|
||||
{
|
||||
hostMdl = arg0;
|
||||
}
|
||||
|
||||
s16 BoardShopHostGet(void) {
|
||||
s16 BoardShopHostGet(void)
|
||||
{
|
||||
return hostMdl;
|
||||
}
|
||||
|
||||
void BoardShopInit(void) {
|
||||
void BoardShopInit(void)
|
||||
{
|
||||
BoardModelParam *var_r29;
|
||||
Vec sp1C;
|
||||
Vec sp10;
|
||||
s32 j;
|
||||
s32 i;
|
||||
s32 sp8[2] = {
|
||||
0x00080000,
|
||||
0x00100000
|
||||
};
|
||||
s32 sp8[2] = { 0x00080000, 0x00100000 };
|
||||
|
||||
for (i = 0; i < 2; i++) {
|
||||
BoardSpaceLinkTransformGet(sp8[i], &sp1C, &sp10, 0);
|
||||
|
|
@ -176,7 +156,8 @@ void BoardShopInit(void) {
|
|||
BoardModelVisibilitySet(hostMdl, 0);
|
||||
}
|
||||
|
||||
void BoardShopKill(void) {
|
||||
void BoardShopKill(void)
|
||||
{
|
||||
s32 i;
|
||||
s32 j;
|
||||
|
||||
|
|
@ -190,7 +171,8 @@ void BoardShopKill(void) {
|
|||
}
|
||||
}
|
||||
|
||||
void BoardShopExec(s32 player, s32 space) {
|
||||
void BoardShopExec(s32 player, s32 space)
|
||||
{
|
||||
if (BoardPlayerSizeGet(GWSystem.player_curr) == 2) {
|
||||
return;
|
||||
}
|
||||
|
|
@ -204,7 +186,8 @@ void BoardShopExec(s32 player, s32 space) {
|
|||
BoardRollDispSet(1);
|
||||
}
|
||||
|
||||
static void ExecShop(void) {
|
||||
static void ExecShop(void)
|
||||
{
|
||||
Vec sp38;
|
||||
Vec sp2C;
|
||||
Vec sp20;
|
||||
|
|
@ -229,7 +212,8 @@ static void ExecShop(void) {
|
|||
temp_r28 = GWPlayer[shopPlayer].space_curr;
|
||||
if (BoardSpaceFlagGet(0, temp_r28) & 0x80000) {
|
||||
shopMdlPtr = shopMdlIdx[0];
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
shopMdlPtr = shopMdlIdx[1];
|
||||
}
|
||||
BoardPlayerIdleSet(shopPlayer);
|
||||
|
|
@ -315,7 +299,8 @@ static void ExecShop(void) {
|
|||
if (var_r29 > BoardPlayerCoinsGet(shopPlayer)) {
|
||||
BoardWinChoiceDisable(i);
|
||||
choiceEnableTbl[i] = 0;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
choiceEnableTbl[i] = 1;
|
||||
}
|
||||
}
|
||||
|
|
@ -332,7 +317,8 @@ static void ExecShop(void) {
|
|||
HuPrcSleep(0xF);
|
||||
if (itemCurChoice == -1 || itemCurChoice == 5 || itemCurChoice == 0x7F) {
|
||||
PauseShopWin();
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
PauseShopWin();
|
||||
while (!BoardStatusStopCheck(shopPlayer)) {
|
||||
HuPrcVSleep();
|
||||
|
|
@ -346,7 +332,8 @@ static void ExecShop(void) {
|
|||
temp_r24 = itemPriceTbl[activeItemTbl[itemCurChoice]];
|
||||
if (temp_r24 >= 20) {
|
||||
var_r23 = 3;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
var_r23 = 6;
|
||||
}
|
||||
var_f30 = BoardDAngleCalc(180.0f + BoardPlayerRotYGet(shopPlayer));
|
||||
|
|
@ -391,7 +378,8 @@ static void ExecShop(void) {
|
|||
HuPrcEnd();
|
||||
}
|
||||
|
||||
static void DestroyShop(void) {
|
||||
static void DestroyShop(void)
|
||||
{
|
||||
s16 temp_r30;
|
||||
s32 i;
|
||||
|
||||
|
|
@ -413,7 +401,8 @@ static void DestroyShop(void) {
|
|||
shopProc = NULL;
|
||||
}
|
||||
|
||||
static void PopupShop(void) {
|
||||
static void PopupShop(void)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < 2; i++) {
|
||||
|
|
@ -443,7 +432,8 @@ static void PopupShop(void) {
|
|||
}
|
||||
}
|
||||
|
||||
static void CloseShop(void) {
|
||||
static void CloseShop(void)
|
||||
{
|
||||
BoardModelMotionStart(shopMdlPtr[0], 0, 0x40000004);
|
||||
while (BoardModelMotionTimeGet(shopMdlPtr[0]) > 28.0f) {
|
||||
HuPrcVSleep();
|
||||
|
|
@ -458,7 +448,8 @@ static void CloseShop(void) {
|
|||
BoardModelVisibilitySet(BoardShopHostGet(), 0);
|
||||
}
|
||||
|
||||
static void CreateShopWin(void) {
|
||||
static void CreateShopWin(void)
|
||||
{
|
||||
Vec sp8;
|
||||
omObjData *var_r31;
|
||||
ShopWinWork *var_r30;
|
||||
|
|
@ -473,12 +464,12 @@ static void CreateShopWin(void) {
|
|||
var_r30->unk01 = 0xC;
|
||||
var_r30->unk04 = 0;
|
||||
shopWinObj = var_r31;
|
||||
var_r30->unk06 = HuWinCreate(36.0f, HU_DISP_HEIGHT-136, 0x1F8, 0x60, 0);
|
||||
var_r30->unk06 = HuWinCreate(36.0f, HU_DISP_HEIGHT - 136, 0x1F8, 0x60, 0);
|
||||
HuWinMesSpeedSet(var_r30->unk06, 0);
|
||||
HuWinDrawNoSet(var_r30->unk06, 0x40);
|
||||
HuWinExAnimIn(var_r30->unk06);
|
||||
sp8.x = 84.0f;
|
||||
sp8.y = HU_DISP_HEIGHT-88;
|
||||
sp8.y = HU_DISP_HEIGHT - 88;
|
||||
sp8.z = 400.0f;
|
||||
var_r31->scale.x = var_r31->scale.y = var_r31->scale.z = 0.25f;
|
||||
Hu3D2Dto3D(&sp8, 1, &sp8);
|
||||
|
|
@ -488,7 +479,8 @@ static void CreateShopWin(void) {
|
|||
var_r31->scale.x = var_r31->scale.y = var_r31->scale.z = 1.0f;
|
||||
}
|
||||
|
||||
static void UpdateShopWin(omObjData *arg0) {
|
||||
static void UpdateShopWin(omObjData *arg0)
|
||||
{
|
||||
Vec spC;
|
||||
float var_f29;
|
||||
float var_f28;
|
||||
|
|
@ -517,7 +509,8 @@ static void UpdateShopWin(omObjData *arg0) {
|
|||
if (temp_r28->unk00_field0 == 0) {
|
||||
BoardModelVisibilitySet(itemMdl, 0);
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
HuWinDispOn(temp_r28->unk06);
|
||||
SetShopWinItem(temp_r28, arg0);
|
||||
BoardModelVisibilitySet(itemMdl, 1);
|
||||
|
|
@ -543,9 +536,9 @@ static void UpdateShopWin(omObjData *arg0) {
|
|||
}
|
||||
arg0->rot.y = BoardDAngleCalc(arg0->rot.y + 2.0f);
|
||||
BoardCameraRotGet(&spC);
|
||||
PSMTXRotRad(sp48, 'y', MTXDegToRad(arg0->rot.y));
|
||||
PSMTXRotRad(sp18, 'x', MTXDegToRad(spC.x + 10.0f));
|
||||
PSMTXConcat(sp18, sp48, sp48);
|
||||
MTXRotRad(sp48, 'y', MTXDegToRad(arg0->rot.y));
|
||||
MTXRotRad(sp18, 'x', MTXDegToRad(spC.x + 10.0f));
|
||||
MTXConcat(sp18, sp48, sp48);
|
||||
BoardModelMtxSet(itemMdl, &sp48);
|
||||
BoardModelRotSet(itemMdl, 0.0f, 0.0f, 0.0f);
|
||||
BoardModelPosSet(itemMdl, arg0->trans.x, arg0->trans.y + var_f29, arg0->trans.z);
|
||||
|
|
@ -554,7 +547,8 @@ static void UpdateShopWin(omObjData *arg0) {
|
|||
}
|
||||
}
|
||||
|
||||
static void SetShopWinItem(ShopWinWork *arg0, omObjData *arg1) {
|
||||
static void SetShopWinItem(ShopWinWork *arg0, omObjData *arg1)
|
||||
{
|
||||
Vec spC;
|
||||
s32 var_r26;
|
||||
s8 temp_r28;
|
||||
|
|
@ -581,14 +575,16 @@ static void SetShopWinItem(ShopWinWork *arg0, omObjData *arg1) {
|
|||
}
|
||||
}
|
||||
|
||||
static void PauseShopWin(void) {
|
||||
static void PauseShopWin(void)
|
||||
{
|
||||
if (shopWinObj) {
|
||||
OM_GET_WORK_PTR(shopWinObj, ShopWinWork)->unk00_field0 = 1;
|
||||
shopWinObj = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void StartItemGive(void) {
|
||||
void StartItemGive(void)
|
||||
{
|
||||
Vec sp14;
|
||||
Vec sp8;
|
||||
omObjData *temp_r30;
|
||||
|
|
@ -605,7 +601,7 @@ void StartItemGive(void) {
|
|||
BoardModelMotionStart(itemMdl, 0, 0);
|
||||
BoardModelMotionSpeedSet(itemMdl, 0.0f);
|
||||
BoardModelPosGet(itemMdl, &sp14);
|
||||
PSMTXIdentity(sp20);
|
||||
MTXIdentity(sp20);
|
||||
BoardModelMtxSet(itemMdl, &sp20);
|
||||
OSs16tof32(&angleVal, &temp_r30->scale.z);
|
||||
temp_r30->scale.z = -temp_r30->scale.z / 40.0f;
|
||||
|
|
@ -621,7 +617,8 @@ void StartItemGive(void) {
|
|||
itemGiveObj = temp_r30;
|
||||
}
|
||||
|
||||
static void ExecItemGive(omObjData *arg0) {
|
||||
static void ExecItemGive(omObjData *arg0)
|
||||
{
|
||||
ItemGiveWork *temp_r29;
|
||||
float var_f30;
|
||||
|
||||
|
|
@ -653,7 +650,8 @@ static void ExecItemGive(omObjData *arg0) {
|
|||
BoardModelRotYSet(itemMdl, var_f30);
|
||||
}
|
||||
|
||||
static void MoveItemGive(omObjData *arg0, ItemGiveWork *arg1) {
|
||||
static void MoveItemGive(omObjData *arg0, ItemGiveWork *arg1)
|
||||
{
|
||||
Vec sp1C;
|
||||
Vec sp10;
|
||||
float temp_f27;
|
||||
|
|
@ -665,13 +663,15 @@ static void MoveItemGive(omObjData *arg0, ItemGiveWork *arg1) {
|
|||
arg1->unk00_field1 = 2;
|
||||
BoardMakeRandomItem();
|
||||
BoardItemStart(GWSystem.player_curr, 0xD);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
arg1->unk00_field1 = 1;
|
||||
arg1->unk04 = 0xF;
|
||||
BoardPlayerPosGet(shopPlayer, &sp1C);
|
||||
if (BoardPlayerSizeGet(shopPlayer) == 1) {
|
||||
arg0->rot.x = (sp1C.y + 30.0f - arg0->trans.y) / 22.5f;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
arg0->rot.x = (sp1C.y + 70.0f - arg0->trans.y) / 22.5f;
|
||||
}
|
||||
arg0->trans.y = arg0->rot.y;
|
||||
|
|
@ -692,7 +692,8 @@ static void MoveItemGive(omObjData *arg0, ItemGiveWork *arg1) {
|
|||
BoardCameraDirGet(&sp10);
|
||||
var_f26 = BoardDAngleCalc(atan2d(-sp10.x, -sp10.z));
|
||||
OSf32tos16(&var_f26, &angleVal);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
arg0->scale.x += arg0->scale.y;
|
||||
arg0->trans.x += arg0->rot.x;
|
||||
arg0->trans.z += arg0->rot.z;
|
||||
|
|
@ -706,7 +707,8 @@ static void MoveItemGive(omObjData *arg0, ItemGiveWork *arg1) {
|
|||
arg1->unk02++;
|
||||
}
|
||||
|
||||
static void ShrinkItemGive(omObjData *arg0, ItemGiveWork *arg1) {
|
||||
static void ShrinkItemGive(omObjData *arg0, ItemGiveWork *arg1)
|
||||
{
|
||||
float var_f30;
|
||||
|
||||
if (arg1->unk02 == 0) {
|
||||
|
|
@ -733,10 +735,12 @@ static void ShrinkItemGive(omObjData *arg0, ItemGiveWork *arg1) {
|
|||
arg1->unk02 += 4;
|
||||
}
|
||||
|
||||
static void WaitItemGive(omObjData *arg0, ItemGiveWork *arg1) {
|
||||
static void WaitItemGive(omObjData *arg0, ItemGiveWork *arg1)
|
||||
{
|
||||
if (arg1->unk02 > 20) {
|
||||
BoardModelVisibilitySet(itemMdl, 0);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
arg1->unk02++;
|
||||
}
|
||||
if (BoardItemDoneCheck()) {
|
||||
|
|
@ -744,44 +748,25 @@ static void WaitItemGive(omObjData *arg0, ItemGiveWork *arg1) {
|
|||
}
|
||||
}
|
||||
|
||||
static s8 itemPrioTbl[2][5][14] = {
|
||||
{
|
||||
{ 0x14, 0x14, 0x0F, 0x0F, 0x05, 0x07, 0x05, 0x05, 0x00, 0x05, 0x00, 0x03, 0x00, 0x00 },
|
||||
{ 0x0F, 0x0F, 0x0D, 0x0A, 0x0A, 0x0A, 0x0A, 0x05, 0x00, 0x07, 0x00, 0x05, 0x00, 0x00 },
|
||||
{ 0x07, 0x07, 0x0E, 0x0C, 0x0A, 0x0A, 0x0A, 0x08, 0x05, 0x09, 0x00, 0x08, 0x00, 0x00 },
|
||||
{ 0x0A, 0x0A, 0x0D, 0x0C, 0x0A, 0x0A, 0x07, 0x0A, 0x05, 0x05, 0x00, 0x08, 0x00, 0x00 },
|
||||
{ 0x07, 0x07, 0x0D, 0x0A, 0x0D, 0x07, 0x0A, 0x0A, 0x07, 0x08, 0x00, 0x08, 0x00, 0x00 }
|
||||
},
|
||||
{
|
||||
{ 0x0F, 0x0F, 0x12, 0x0F, 0x05, 0x05, 0x05, 0x05, 0x00, 0x05, 0x00, 0x02, 0x05, 0x05 },
|
||||
static s8 itemPrioTbl[2][5][14] = { { { 0x14, 0x14, 0x0F, 0x0F, 0x05, 0x07, 0x05, 0x05, 0x00, 0x05, 0x00, 0x03, 0x00, 0x00 },
|
||||
{ 0x0F, 0x0F, 0x0D, 0x0A, 0x0A, 0x0A, 0x0A, 0x05, 0x00, 0x07, 0x00, 0x05, 0x00, 0x00 },
|
||||
{ 0x07, 0x07, 0x0E, 0x0C, 0x0A, 0x0A, 0x0A, 0x08, 0x05, 0x09, 0x00, 0x08, 0x00, 0x00 },
|
||||
{ 0x0A, 0x0A, 0x0D, 0x0C, 0x0A, 0x0A, 0x07, 0x0A, 0x05, 0x05, 0x00, 0x08, 0x00, 0x00 },
|
||||
{ 0x07, 0x07, 0x0D, 0x0A, 0x0D, 0x07, 0x0A, 0x0A, 0x07, 0x08, 0x00, 0x08, 0x00, 0x00 } },
|
||||
{ { 0x0F, 0x0F, 0x12, 0x0F, 0x05, 0x05, 0x05, 0x05, 0x00, 0x05, 0x00, 0x02, 0x05, 0x05 },
|
||||
{ 0x0F, 0x0F, 0x0D, 0x0A, 0x07, 0x0A, 0x07, 0x03, 0x00, 0x07, 0x00, 0x00, 0x05, 0x08 },
|
||||
{ 0x05, 0x04, 0x0D, 0x0C, 0x0A, 0x05, 0x0A, 0x08, 0x05, 0x05, 0x00, 0x05, 0x08, 0x0A },
|
||||
{ 0x07, 0x04, 0x0D, 0x0C, 0x08, 0x08, 0x07, 0x0A, 0x05, 0x05, 0x00, 0x05, 0x08, 0x08 },
|
||||
{ 0x03, 0x02, 0x0D, 0x0A, 0x0D, 0x03, 0x08, 0x08, 0x07, 0x07, 0x00, 0x08, 0x08, 0x0A }
|
||||
}
|
||||
};
|
||||
{ 0x03, 0x02, 0x0D, 0x0A, 0x0D, 0x03, 0x08, 0x08, 0x07, 0x07, 0x00, 0x08, 0x08, 0x0A } } };
|
||||
|
||||
static s8 rankItemGroupTbl[2][4][3] = {
|
||||
{
|
||||
{ 0x00, 0x01, 0x03 }, { 0x00, 0x02, 0x04 },
|
||||
{ 0x00, 0x02, 0x04 }, { 0x00, 0x02, 0x04 }
|
||||
},
|
||||
{
|
||||
{ 0x00, 0x01, 0x03 }, { 0x00, 0x02, 0x04 },
|
||||
{ 0x00, 0x02, 0x04 }, { 0x00, 0x02, 0x04 }
|
||||
}
|
||||
};
|
||||
static s8 rankItemGroupTbl[2][4][3] = { { { 0x00, 0x01, 0x03 }, { 0x00, 0x02, 0x04 }, { 0x00, 0x02, 0x04 }, { 0x00, 0x02, 0x04 } },
|
||||
{ { 0x00, 0x01, 0x03 }, { 0x00, 0x02, 0x04 }, { 0x00, 0x02, 0x04 }, { 0x00, 0x02, 0x04 } } };
|
||||
|
||||
static float cursorPosTbl[6][2] = {
|
||||
{ 190.0f, 182.0f },
|
||||
{ 190.0f, 208.0f },
|
||||
{ 190.0f, 234.0f },
|
||||
{ 190.0f, 260.0f },
|
||||
{ 190.0f, 286.0f },
|
||||
{ 190.0f, 312.0f }
|
||||
};
|
||||
static float cursorPosTbl[6][2]
|
||||
= { { 190.0f, 182.0f }, { 190.0f, 208.0f }, { 190.0f, 234.0f }, { 190.0f, 260.0f }, { 190.0f, 286.0f }, { 190.0f, 312.0f } };
|
||||
|
||||
static void GetShopItems(s32 arg0) {
|
||||
static void GetShopItems(s32 arg0)
|
||||
{
|
||||
s32 temp_r25;
|
||||
s32 temp_r20;
|
||||
s32 temp_r19;
|
||||
|
|
@ -795,10 +780,11 @@ static void GetShopItems(s32 arg0) {
|
|||
s32 var_r29;
|
||||
s32 var_r30;
|
||||
|
||||
temp_r22 = 3.0f * ((float) GWSystem.turn / GWSystem.max_turn);
|
||||
temp_r22 = 3.0f * ((float)GWSystem.turn / GWSystem.max_turn);
|
||||
if (BoardPlayerCoinsGet(arg0) < 30) {
|
||||
var_r27 = 0;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
var_r27 = 1;
|
||||
}
|
||||
temp_r19 = rankItemGroupTbl[var_r27][GWPlayer[arg0].rank][temp_r22];
|
||||
|
|
@ -839,7 +825,8 @@ static void GetShopItems(s32 arg0) {
|
|||
}
|
||||
}
|
||||
|
||||
static void GetDefaultShopItems(s32 arg0) {
|
||||
static void GetDefaultShopItems(s32 arg0)
|
||||
{
|
||||
s32 temp_r29;
|
||||
s32 var_r31;
|
||||
s32 var_r30;
|
||||
|
|
@ -847,9 +834,11 @@ static void GetDefaultShopItems(s32 arg0) {
|
|||
temp_r29 = BoardRandMod(100);
|
||||
if (temp_r29 > 90) {
|
||||
var_r30 = 3;
|
||||
} else if (temp_r29 > 40) {
|
||||
}
|
||||
else if (temp_r29 > 40) {
|
||||
var_r30 = BoardRandMod(2) + 1;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
var_r30 = 0;
|
||||
}
|
||||
for (var_r31 = 0; var_r31 < 5; var_r31++) {
|
||||
|
|
@ -857,7 +846,8 @@ static void GetDefaultShopItems(s32 arg0) {
|
|||
}
|
||||
}
|
||||
|
||||
static void SortShopItems(void) {
|
||||
static void SortShopItems(void)
|
||||
{
|
||||
s32 sp8[5];
|
||||
s32 var_r29;
|
||||
s32 i;
|
||||
|
|
@ -880,7 +870,8 @@ static void SortShopItems(void) {
|
|||
}
|
||||
}
|
||||
|
||||
static void DecideComEnter(s32 arg0) {
|
||||
static void DecideComEnter(s32 arg0)
|
||||
{
|
||||
s32 temp_r27;
|
||||
s32 temp_r30;
|
||||
s32 temp_r29;
|
||||
|
|
@ -910,14 +901,13 @@ static void DecideComEnter(s32 arg0) {
|
|||
BoardComKeySetRight();
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
temp_r27 = GWPlayer[arg0].space_curr;
|
||||
temp_r30 = BoardComPathShortcutLenGet(temp_r27, 8, 0);
|
||||
temp_r29 = BoardComPathShortcutLenGet(temp_r27, 8, 1);
|
||||
if ((temp_r30 != 0 || temp_r29 != 0)
|
||||
&& (BoardPlayerCoinsGet(arg0) >= 17 || (temp_r29 >= temp_r26 && temp_r30 >= temp_r26))
|
||||
&& BoardPlayerCoinsGet(arg0) < 40
|
||||
&& ((temp_r30 < 20 && temp_r30 > 0) || (temp_r29 < 10 && temp_r29 > 0))
|
||||
if ((temp_r30 != 0 || temp_r29 != 0) && (BoardPlayerCoinsGet(arg0) >= 17 || (temp_r29 >= temp_r26 && temp_r30 >= temp_r26))
|
||||
&& BoardPlayerCoinsGet(arg0) < 40 && ((temp_r30 < 20 && temp_r30 > 0) || (temp_r29 < 10 && temp_r29 > 0))
|
||||
&& BoardRandMod(100) > var_r28) {
|
||||
BoardComKeySetRight();
|
||||
return;
|
||||
|
|
@ -926,18 +916,21 @@ static void DecideComEnter(s32 arg0) {
|
|||
BoardComKeySetLeft();
|
||||
}
|
||||
|
||||
static void DecideComBuy(s32 arg0) {
|
||||
static void DecideComBuy(s32 arg0)
|
||||
{
|
||||
if (!GWPlayer[arg0].com) {
|
||||
return;
|
||||
}
|
||||
if (comF != 0) {
|
||||
BoardComKeySetDown();
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
BoardComKeySetUp();
|
||||
}
|
||||
}
|
||||
|
||||
static s32 GetComItemChoice(s32 arg0) {
|
||||
static s32 GetComItemChoice(s32 arg0)
|
||||
{
|
||||
s16 sp8;
|
||||
s32 temp_r26;
|
||||
s32 var_r28 = 0;
|
||||
|
|
@ -954,7 +947,8 @@ static s32 GetComItemChoice(s32 arg0) {
|
|||
for (var_r27 = i = 0; i < 5; i++) {
|
||||
if (temp_r26 >= itemPriceTbl[activeItemTbl[i]]) {
|
||||
var_r30 = BoardComItemWeightGet(arg0, activeItemTbl[i]);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
var_r30 = 0;
|
||||
}
|
||||
if (BoardPlayerItemFind(arg0, activeItemTbl[i]) != -1) {
|
||||
|
|
@ -968,28 +962,31 @@ static s32 GetComItemChoice(s32 arg0) {
|
|||
if (var_r27 == 0) {
|
||||
comF = 1;
|
||||
var_r28 = 5;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
var_r28 = var_r25;
|
||||
}
|
||||
return var_r28;
|
||||
}
|
||||
|
||||
static void WaitItemChoice(void) {
|
||||
static void WaitItemChoice(void)
|
||||
{
|
||||
while (itemChoiceObj) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
}
|
||||
|
||||
static void CreateShopItemChoice(s32 arg0, s32 arg1) {
|
||||
static void CreateShopItemChoice(s32 arg0, s32 arg1)
|
||||
{
|
||||
omObjData *temp_r30;
|
||||
ItemChoiceWork *var_r31;
|
||||
s16 spC;
|
||||
s16 i;
|
||||
#if VERSION_PAL
|
||||
for(i=0; i<6; i++) {
|
||||
#if VERSION_PAL
|
||||
for (i = 0; i < 6; i++) {
|
||||
cursorPosTbl[i][0] = 190;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
temp_r30 = omAddObjEx(boardObjMan, 0x7E01, 0, 0, -1, UpdateShopItemChoice);
|
||||
itemChoiceObj = temp_r30;
|
||||
itemChoice = -1;
|
||||
|
|
@ -1001,29 +998,30 @@ static void CreateShopItemChoice(s32 arg0, s32 arg1) {
|
|||
var_r31->unk02 = 0;
|
||||
var_r31->unk03 = arg1;
|
||||
var_r31->unk06 = HuSprGrpCreate(1);
|
||||
#if VERSION_PAL
|
||||
#if VERSION_PAL
|
||||
if (GWLanguageGet() != 0) {
|
||||
s16 winId = BoardWinIDGet();
|
||||
if(winId != -1) {
|
||||
if (winId != -1) {
|
||||
WindowData *winP = &winData[winId];
|
||||
for(i=0; i<6; i++) {
|
||||
cursorPosTbl[i][0] = winP->pos_x+96;
|
||||
for (i = 0; i < 6; i++) {
|
||||
cursorPosTbl[i][0] = winP->pos_x + 96;
|
||||
}
|
||||
} else {
|
||||
for(i=0; i<6; i++) {
|
||||
}
|
||||
else {
|
||||
for (i = 0; i < 6; i++) {
|
||||
cursorPosTbl[i][0] = 166;
|
||||
}
|
||||
}
|
||||
}
|
||||
temp_r30->trans.x = cursorPosTbl[0][0];
|
||||
temp_r30->trans.y = cursorPosTbl[0][1];
|
||||
#else
|
||||
#else
|
||||
temp_r30->trans.x = cursorPosTbl[0][0];
|
||||
temp_r30->trans.y = cursorPosTbl[0][1];
|
||||
if (GWLanguageGet() != 0) {
|
||||
temp_r30->trans.x -= 24.0f;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
if (GWPlayer[arg0].com) {
|
||||
var_r31->unk01 = GWMessDelayGet();
|
||||
}
|
||||
|
|
@ -1033,11 +1031,13 @@ static void CreateShopItemChoice(s32 arg0, s32 arg1) {
|
|||
HuSprPosSet(var_r31->unk06, 0, temp_r30->trans.x, temp_r30->trans.y);
|
||||
}
|
||||
|
||||
static s32 GetShopItemChoice(void) {
|
||||
static s32 GetShopItemChoice(void)
|
||||
{
|
||||
return itemChoice;
|
||||
}
|
||||
|
||||
static s32 GetShopItemWinChoice(void) {
|
||||
static s32 GetShopItemWinChoice(void)
|
||||
{
|
||||
ItemChoiceWork *var_r31;
|
||||
|
||||
if (!itemChoiceObj) {
|
||||
|
|
@ -1047,7 +1047,8 @@ static s32 GetShopItemWinChoice(void) {
|
|||
return var_r31->unk02;
|
||||
}
|
||||
|
||||
static void MoveShopItemChoice(omObjData *arg0, ItemChoiceWork *arg1) {
|
||||
static void MoveShopItemChoice(omObjData *arg0, ItemChoiceWork *arg1)
|
||||
{
|
||||
u32 sp8;
|
||||
s32 temp_r28;
|
||||
s32 temp_r29;
|
||||
|
|
@ -1055,14 +1056,15 @@ static void MoveShopItemChoice(omObjData *arg0, ItemChoiceWork *arg1) {
|
|||
temp_r28 = arg1->unk02;
|
||||
arg0->trans.x = cursorPosTbl[arg1->unk02][0];
|
||||
arg0->trans.y = cursorPosTbl[arg1->unk02][1];
|
||||
#if VERSION_NTSC
|
||||
#if VERSION_NTSC
|
||||
if (GWLanguageGet() != 0) {
|
||||
arg0->trans.x -= 24.0f;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
if (GWPlayer[arg1->unk00_field1].com) {
|
||||
GetShopItemChoiceInput(arg1, arg0, &sp8);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
temp_r29 = GWPlayer[arg1->unk00_field1].port;
|
||||
sp8 = HuPadDStkRep[temp_r29] | HuPadBtnDown[temp_r29];
|
||||
}
|
||||
|
|
@ -1077,7 +1079,8 @@ static void MoveShopItemChoice(omObjData *arg0, ItemChoiceWork *arg1) {
|
|||
HuAudFXPlay(2);
|
||||
if (GWPlayer[arg1->unk00_field1].com) {
|
||||
arg1->unk05 = 0x32;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
arg1->unk05 = 5;
|
||||
}
|
||||
return;
|
||||
|
|
@ -1105,7 +1108,8 @@ static void MoveShopItemChoice(omObjData *arg0, ItemChoiceWork *arg1) {
|
|||
}
|
||||
}
|
||||
|
||||
static void UpdateShopItemChoice(omObjData *arg0) {
|
||||
static void UpdateShopItemChoice(omObjData *arg0)
|
||||
{
|
||||
ItemChoiceWork *temp_r31;
|
||||
|
||||
temp_r31 = OM_GET_WORK_PTR(arg0, ItemChoiceWork);
|
||||
|
|
@ -1120,25 +1124,31 @@ static void UpdateShopItemChoice(omObjData *arg0) {
|
|||
if (temp_r31->unk05 == 0) {
|
||||
temp_r31->unk00_field0 = 1;
|
||||
}
|
||||
} else if (temp_r31->unk01 != 0) {
|
||||
}
|
||||
else if (temp_r31->unk01 != 0) {
|
||||
temp_r31->unk01--;
|
||||
} else if (temp_r31->unk04 != 0) {
|
||||
}
|
||||
else if (temp_r31->unk04 != 0) {
|
||||
temp_r31->unk04--;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
MoveShopItemChoice(arg0, temp_r31);
|
||||
}
|
||||
HuSprPosSet(temp_r31->unk06, 0, arg0->trans.x, arg0->trans.y);
|
||||
}
|
||||
|
||||
static void GetShopItemChoiceInput(ItemChoiceWork *arg0, omObjData *arg1, u32 *arg2) {
|
||||
static void GetShopItemChoiceInput(ItemChoiceWork *arg0, omObjData *arg1, u32 *arg2)
|
||||
{
|
||||
if (arg0->unk02 == arg0->unk03) {
|
||||
*arg2 = 0x100;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
*arg2 = 4;
|
||||
}
|
||||
}
|
||||
|
||||
void BoardShopTutorialExec(s32 arg0) {
|
||||
void BoardShopTutorialExec(s32 arg0)
|
||||
{
|
||||
Vec sp48;
|
||||
Vec sp3C;
|
||||
Vec sp30;
|
||||
|
|
@ -1155,7 +1165,8 @@ void BoardShopTutorialExec(s32 arg0) {
|
|||
sp10 = BoardWinPortraitGet();
|
||||
if (BoardSpaceFlagGet(0, arg0) & 0x80000) {
|
||||
shopMdlPtr = shopMdlIdx[0];
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
shopMdlPtr = shopMdlIdx[1];
|
||||
}
|
||||
temp_r27 = BoardSpaceLinkFlagSearch(0, arg0, 0x02000000);
|
||||
|
|
|
|||
|
|
@ -1111,4 +1111,8 @@ void BoardSpaceDestroy(void)
|
|||
HuMemDirectFree(spaceTexData);
|
||||
spaceTexData = NULL;
|
||||
}
|
||||
#ifdef TARGET_PC
|
||||
GXDestroyTexObj(&spaceHiliteTex);
|
||||
GXDestroyTexObj(&spaceTex);
|
||||
#endif
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,15 +3,6 @@
|
|||
#include "game/data.h"
|
||||
#include "game/disp.h"
|
||||
|
||||
#include "game/flag.h"
|
||||
#include "game/gamework.h"
|
||||
#include "game/gamework_data.h"
|
||||
#include "game/hsfanim.h"
|
||||
#include "game/hsfman.h"
|
||||
#include "game/msm.h"
|
||||
#include "game/objsub.h"
|
||||
#include "game/window.h"
|
||||
#include "game/wipe.h"
|
||||
#include "game/board/audio.h"
|
||||
#include "game/board/com.h"
|
||||
#include "game/board/main.h"
|
||||
|
|
@ -21,6 +12,15 @@
|
|||
#include "game/board/tutorial.h"
|
||||
#include "game/board/ui.h"
|
||||
#include "game/board/window.h"
|
||||
#include "game/flag.h"
|
||||
#include "game/gamework.h"
|
||||
#include "game/gamework_data.h"
|
||||
#include "game/hsfanim.h"
|
||||
#include "game/hsfman.h"
|
||||
#include "game/msm.h"
|
||||
#include "game/objsub.h"
|
||||
#include "game/window.h"
|
||||
#include "game/wipe.h"
|
||||
|
||||
#include "ext_math.h"
|
||||
|
||||
|
|
@ -74,77 +74,28 @@ static Process *starProc;
|
|||
static s16 starParman = -1;
|
||||
static s16 hostMdl = -1;
|
||||
|
||||
static const s32 starMesTbl1[9] = {
|
||||
MAKE_MESSID(12, 0),
|
||||
MAKE_MESSID(12, 9),
|
||||
MAKE_MESSID(12, 18),
|
||||
MAKE_MESSID(12, 27),
|
||||
MAKE_MESSID(12, 36),
|
||||
MAKE_MESSID(12, 45),
|
||||
MAKE_MESSID(12, 0),
|
||||
MAKE_MESSID(12, 0),
|
||||
MAKE_MESSID(12, 0)
|
||||
};
|
||||
static const s32 starMesTbl1[9] = { MAKE_MESSID(12, 0), MAKE_MESSID(12, 9), MAKE_MESSID(12, 18), MAKE_MESSID(12, 27), MAKE_MESSID(12, 36),
|
||||
MAKE_MESSID(12, 45), MAKE_MESSID(12, 0), MAKE_MESSID(12, 0), MAKE_MESSID(12, 0) };
|
||||
|
||||
static const s32 starMesTbl2[9][2] = {
|
||||
{ MAKE_MESSID(21, 34), MAKE_MESSID(21, 40) },
|
||||
{ MAKE_MESSID(21, 35), MAKE_MESSID(21, 41) },
|
||||
{ MAKE_MESSID(21, 36), MAKE_MESSID(21, 42) },
|
||||
{ MAKE_MESSID(21, 37), MAKE_MESSID(21, 43) },
|
||||
{ MAKE_MESSID(21, 38), MAKE_MESSID(21, 44) },
|
||||
{ MAKE_MESSID(21, 39), MAKE_MESSID(21, 45) },
|
||||
{ MAKE_MESSID(21, 34), MAKE_MESSID(21, 40) },
|
||||
{ MAKE_MESSID(21, 34), MAKE_MESSID(21, 40) },
|
||||
{ MAKE_MESSID(21, 34), MAKE_MESSID(21, 40) }
|
||||
};
|
||||
static const s32 starMesTbl2[9][2]
|
||||
= { { MAKE_MESSID(21, 34), MAKE_MESSID(21, 40) }, { MAKE_MESSID(21, 35), MAKE_MESSID(21, 41) }, { MAKE_MESSID(21, 36), MAKE_MESSID(21, 42) },
|
||||
{ MAKE_MESSID(21, 37), MAKE_MESSID(21, 43) }, { MAKE_MESSID(21, 38), MAKE_MESSID(21, 44) }, { MAKE_MESSID(21, 39), MAKE_MESSID(21, 45) },
|
||||
{ MAKE_MESSID(21, 34), MAKE_MESSID(21, 40) }, { MAKE_MESSID(21, 34), MAKE_MESSID(21, 40) }, { MAKE_MESSID(21, 34), MAKE_MESSID(21, 40) } };
|
||||
|
||||
s32 boardStarSndTbl[] = {
|
||||
0x00000120,
|
||||
0x00000160,
|
||||
0x000001A0,
|
||||
0x000001E0,
|
||||
0x00000220,
|
||||
0x00000260,
|
||||
0x000002A0,
|
||||
0x000002E0
|
||||
};
|
||||
s32 boardStarSndTbl[] = { 0x00000120, 0x00000160, 0x000001A0, 0x000001E0, 0x00000220, 0x00000260, 0x000002A0, 0x000002E0 };
|
||||
|
||||
static s32 hostMotTbl[9][2] = {
|
||||
{ DATA_MAKE_NUM(DATADIR_W01, 33), DATA_MAKE_NUM(DATADIR_BOARD, 157) },
|
||||
{ DATA_MAKE_NUM(DATADIR_W02, 7), DATA_MAKE_NUM(DATADIR_BOARD, 158) },
|
||||
{ DATA_MAKE_NUM(DATADIR_W03, 31), DATA_MAKE_NUM(DATADIR_BOARD, 159) },
|
||||
{ DATA_MAKE_NUM(DATADIR_W04, 11), DATA_MAKE_NUM(DATADIR_BOARD, 160) },
|
||||
{ DATA_MAKE_NUM(DATADIR_W05, 9), DATA_MAKE_NUM(DATADIR_BOARD, 161) },
|
||||
{ DATA_MAKE_NUM(DATADIR_W06, 21), DATA_MAKE_NUM(DATADIR_BOARD, 162) }
|
||||
};
|
||||
static s32 hostMotTbl[9][2] = { { DATA_MAKE_NUM(DATADIR_W01, 33), DATA_MAKE_NUM(DATADIR_BOARD, 157) },
|
||||
{ DATA_MAKE_NUM(DATADIR_W02, 7), DATA_MAKE_NUM(DATADIR_BOARD, 158) }, { DATA_MAKE_NUM(DATADIR_W03, 31), DATA_MAKE_NUM(DATADIR_BOARD, 159) },
|
||||
{ DATA_MAKE_NUM(DATADIR_W04, 11), DATA_MAKE_NUM(DATADIR_BOARD, 160) }, { DATA_MAKE_NUM(DATADIR_W05, 9), DATA_MAKE_NUM(DATADIR_BOARD, 161) },
|
||||
{ DATA_MAKE_NUM(DATADIR_W06, 21), DATA_MAKE_NUM(DATADIR_BOARD, 162) } };
|
||||
|
||||
static HsfanimStruct00 starEffParam = {
|
||||
0x001E,
|
||||
{ 0x00, 0x00 }, // padding?
|
||||
3.3f,
|
||||
70.0f,
|
||||
7.0f,
|
||||
{ 0.0f, -0.05f, 0.0f },
|
||||
2.0f,
|
||||
1.0f,
|
||||
20.0f,
|
||||
0.98f,
|
||||
0x0002,
|
||||
{
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0x40, 0xFF,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00
|
||||
},
|
||||
{
|
||||
0xFF, 0x80, 0x80, 0x00,
|
||||
0xFF, 0x40, 0x20, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00
|
||||
}
|
||||
};
|
||||
static HsfanimStruct00 starEffParam = { 0x001E, { 0x00, 0x00 }, // padding?
|
||||
3.3f, 70.0f, 7.0f, { 0.0f, -0.05f, 0.0f }, 2.0f, 1.0f, 20.0f, 0.98f, 0x0002,
|
||||
{ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x40, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
|
||||
{ 0xFF, 0x80, 0x80, 0x00, 0xFF, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } };
|
||||
|
||||
void BoardStarHostSet(s16 arg0) {
|
||||
void BoardStarHostSet(s16 arg0)
|
||||
{
|
||||
hostMdl = arg0;
|
||||
if (GWBoardGet() == BOARD_ID_EXTRA1 || GWBoardGet() == BOARD_ID_EXTRA2) {
|
||||
return;
|
||||
|
|
@ -154,11 +105,13 @@ void BoardStarHostSet(s16 arg0) {
|
|||
}
|
||||
}
|
||||
|
||||
s16 BoardStarHostMdlGet(void) {
|
||||
s16 BoardStarHostMdlGet(void)
|
||||
{
|
||||
return hostMdl;
|
||||
}
|
||||
|
||||
void BoardStarExec(s32 arg0, s32 arg1) {
|
||||
void BoardStarExec(s32 arg0, s32 arg1)
|
||||
{
|
||||
if (GWBoardGet() == BOARD_ID_EXTRA1 || GWBoardGet() == BOARD_ID_EXTRA2) {
|
||||
return;
|
||||
}
|
||||
|
|
@ -173,7 +126,8 @@ void BoardStarExec(s32 arg0, s32 arg1) {
|
|||
}
|
||||
}
|
||||
|
||||
static void ExecStar(void) {
|
||||
static void ExecStar(void)
|
||||
{
|
||||
Vec sp24;
|
||||
Vec sp18;
|
||||
Vec spC;
|
||||
|
|
@ -215,22 +169,23 @@ static void ExecStar(void) {
|
|||
BoardPlayerIdleSet(temp_r31);
|
||||
if (BoardDAngleCalc(temp_f30 - temp_f29) < 0.0f) {
|
||||
var_f28 = -BoardDAngleCalc(temp_f30 - temp_f29);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
var_f28 = BoardDAngleCalc(temp_f30 - temp_f29);
|
||||
}
|
||||
if (var_f28 > 90.0f) {
|
||||
var_r25 = 30;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
var_r25 = 15;
|
||||
}
|
||||
BoardPlayerMotBlendSet(temp_r31, temp_f30, var_r25);
|
||||
temp_f27 = BoardModelRotYGet(temp_r30);
|
||||
var_f31 = BoardDAngleCalc(temp_f30 + 180.0f) - temp_f27;
|
||||
if ((var_f31 <= 4.0f && var_f31 >= 0.0f)
|
||||
|| (var_f31 <= 360.0f && var_f31 >= 355.0f)
|
||||
|| (var_f31 <= 0.0f && var_f31 >= -4.0f)) {
|
||||
if ((var_f31 <= 4.0f && var_f31 >= 0.0f) || (var_f31 <= 360.0f && var_f31 >= 355.0f) || (var_f31 <= 0.0f && var_f31 >= -4.0f)) {
|
||||
var_r26 = 0;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
var_r26 = 1;
|
||||
}
|
||||
if (var_r26 != 0) {
|
||||
|
|
@ -253,12 +208,14 @@ static void ExecStar(void) {
|
|||
BoardWinCreate(0, temp_r29, BoardWinPortraitGetStar());
|
||||
BoardWinWait();
|
||||
BoardWinKill();
|
||||
} else if (BoardPlayerCoinsGet(temp_r31) < 20 && GWSystem.last5_effect != 4) {
|
||||
}
|
||||
else if (BoardPlayerCoinsGet(temp_r31) < 20 && GWSystem.last5_effect != 4) {
|
||||
temp_r29 = starMesTbl1[temp_r27] + 2;
|
||||
BoardWinCreate(2, temp_r29, BoardWinPortraitGetStar());
|
||||
BoardWinWait();
|
||||
BoardWinKill();
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
BoardStatusShowSetAll(0);
|
||||
while (!BoardStatusStopCheck(0) || !BoardStatusStopCheck(1) || !BoardStatusStopCheck(2) || !BoardStatusStopCheck(3)) {
|
||||
HuPrcVSleep();
|
||||
|
|
@ -286,7 +243,8 @@ static void ExecStar(void) {
|
|||
if (GWPlayer[temp_r31].com) {
|
||||
if (BoardPlayerCoinsGet(temp_r31) >= 20) {
|
||||
BoardComKeySetUp();
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
BoardComKeySetDown();
|
||||
}
|
||||
}
|
||||
|
|
@ -325,7 +283,7 @@ static void ExecStar(void) {
|
|||
break;
|
||||
}
|
||||
}
|
||||
block_A:
|
||||
block_A:
|
||||
temp_r29 = starMesTbl1[temp_r27] + 3;
|
||||
BoardWinCreate(2, temp_r29, BoardWinPortraitGetStar());
|
||||
BoardWinWait();
|
||||
|
|
@ -381,7 +339,8 @@ block_B:
|
|||
HuPrcEnd();
|
||||
}
|
||||
|
||||
static void DestroyStar(void) {
|
||||
static void DestroyStar(void)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
_ClearFlag(0x10017);
|
||||
|
|
@ -394,7 +353,8 @@ static void DestroyStar(void) {
|
|||
starProc = NULL;
|
||||
}
|
||||
|
||||
static void GiveStarMain(omObjData *arg0) {
|
||||
static void GiveStarMain(omObjData *arg0)
|
||||
{
|
||||
GiveStarWork *temp_r30;
|
||||
|
||||
temp_r30 = OM_GET_WORK_PTR(arg0, GiveStarWork);
|
||||
|
|
@ -407,7 +367,8 @@ static void GiveStarMain(omObjData *arg0) {
|
|||
}
|
||||
if (temp_r30->unk04 != 0) {
|
||||
temp_r30->unk04--;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
switch (temp_r30->unk01) {
|
||||
case 4:
|
||||
break;
|
||||
|
|
@ -431,7 +392,8 @@ static void GiveStarMain(omObjData *arg0) {
|
|||
}
|
||||
}
|
||||
|
||||
static void UpdateStarAngle(GiveStarWork *arg0, omObjData *arg1) {
|
||||
static void UpdateStarAngle(GiveStarWork *arg0, omObjData *arg1)
|
||||
{
|
||||
float var_f31;
|
||||
|
||||
if (arg0->unk00_field1 != 0) {
|
||||
|
|
@ -446,7 +408,8 @@ static void UpdateStarAngle(GiveStarWork *arg0, omObjData *arg1) {
|
|||
}
|
||||
}
|
||||
|
||||
static void InitGiveStar(GiveStarWork *arg0, omObjData *arg1) {
|
||||
static void InitGiveStar(GiveStarWork *arg0, omObjData *arg1)
|
||||
{
|
||||
Vec sp8;
|
||||
|
||||
BoardPlayerPosGet(arg0->unk00_field3, &sp8);
|
||||
|
|
@ -465,7 +428,8 @@ static void InitGiveStar(GiveStarWork *arg0, omObjData *arg1) {
|
|||
InitGiveStarEffect();
|
||||
}
|
||||
|
||||
static void MoveGiveStar(GiveStarWork *arg0, omObjData *arg1) {
|
||||
static void MoveGiveStar(GiveStarWork *arg0, omObjData *arg1)
|
||||
{
|
||||
Vec sp8;
|
||||
float temp_f31;
|
||||
|
||||
|
|
@ -482,7 +446,8 @@ static void MoveGiveStar(GiveStarWork *arg0, omObjData *arg1) {
|
|||
arg1->trans.z += arg1->rot.z;
|
||||
arg1->trans.y += -0.08166667f * temp_f31 * temp_f31 * 0.97f + 50.0f;
|
||||
arg0->unk0A++;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
arg1->trans.y += -4.0f;
|
||||
if (arg1->trans.y <= sp8.y + 300.0f) {
|
||||
arg1->trans.y = sp8.y + 300.0f;
|
||||
|
|
@ -491,7 +456,8 @@ static void MoveGiveStar(GiveStarWork *arg0, omObjData *arg1) {
|
|||
}
|
||||
}
|
||||
|
||||
static void ShrinkGiveStar(GiveStarWork *arg0, omObjData *arg1) {
|
||||
static void ShrinkGiveStar(GiveStarWork *arg0, omObjData *arg1)
|
||||
{
|
||||
Vec sp8;
|
||||
float var_f30;
|
||||
|
||||
|
|
@ -505,7 +471,8 @@ static void ShrinkGiveStar(GiveStarWork *arg0, omObjData *arg1) {
|
|||
if (arg0->unk08 < 90) {
|
||||
if (BoardPlayerSizeGet(arg0->unk00_field3) != 1) {
|
||||
arg0->unk08 += 2;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
arg0->unk08 += 1.4f;
|
||||
}
|
||||
if (arg0->unk08 > 90) {
|
||||
|
|
@ -519,7 +486,8 @@ static void ShrinkGiveStar(GiveStarWork *arg0, omObjData *arg1) {
|
|||
}
|
||||
arg1->scale.y = arg1->scale.x;
|
||||
arg1->scale.z = arg1->scale.x;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
omVibrate(arg0->unk00_field3, 12, 0xC, 0);
|
||||
arg0->unk00_field0 = 1;
|
||||
arg0->unk01 = 4;
|
||||
|
|
@ -529,7 +497,8 @@ static void ShrinkGiveStar(GiveStarWork *arg0, omObjData *arg1) {
|
|||
}
|
||||
}
|
||||
|
||||
static void StopGiveStar(void) {
|
||||
static void StopGiveStar(void)
|
||||
{
|
||||
GiveStarWork *temp_r31;
|
||||
|
||||
if (giveStarObj) {
|
||||
|
|
@ -538,7 +507,8 @@ static void StopGiveStar(void) {
|
|||
}
|
||||
}
|
||||
|
||||
static void InitGiveStarEffect(void) {
|
||||
static void InitGiveStarEffect(void)
|
||||
{
|
||||
s16 temp_r3;
|
||||
void *var_r30;
|
||||
|
||||
|
|
@ -553,7 +523,8 @@ static void InitGiveStarEffect(void) {
|
|||
HuDataDirClose(DATADIR_EFFECT);
|
||||
}
|
||||
|
||||
static void KillGiveStarEffect(void) {
|
||||
static void KillGiveStarEffect(void)
|
||||
{
|
||||
if (starParman != -1) {
|
||||
Hu3DParManKill(starParman);
|
||||
starParman = -1;
|
||||
|
|
@ -561,13 +532,15 @@ static void KillGiveStarEffect(void) {
|
|||
}
|
||||
}
|
||||
|
||||
static inline void StarInlineFunc00(void) {
|
||||
static inline void StarInlineFunc00(void)
|
||||
{
|
||||
GiveStarWork *temp_r28 = OM_GET_WORK_PTR(giveStarObj, GiveStarWork);
|
||||
|
||||
temp_r28->unk01 = 0;
|
||||
}
|
||||
|
||||
static inline void StarInlineFunc01(void) {
|
||||
static inline void StarInlineFunc01(void)
|
||||
{
|
||||
GiveStarWork *temp_r27 = OM_GET_WORK_PTR(giveStarObj, GiveStarWork);
|
||||
|
||||
while (temp_r27->unk01 != 4) {
|
||||
|
|
@ -575,7 +548,8 @@ static inline void StarInlineFunc01(void) {
|
|||
}
|
||||
}
|
||||
|
||||
static inline void StarInlineFunc02(void) {
|
||||
static inline void StarInlineFunc02(void)
|
||||
{
|
||||
GiveStarWork *temp_r29 = OM_GET_WORK_PTR(giveStarObj, GiveStarWork);
|
||||
|
||||
temp_r29->unk00_field1 = 1;
|
||||
|
|
@ -584,7 +558,8 @@ static inline void StarInlineFunc02(void) {
|
|||
temp_r29->unk01 = 2;
|
||||
}
|
||||
|
||||
void BoardStarGive(s32 arg0, Vec *arg1) {
|
||||
void BoardStarGive(s32 arg0, Vec *arg1)
|
||||
{
|
||||
Vec sp8;
|
||||
s32 temp_r25;
|
||||
GiveStarWork *temp_r31;
|
||||
|
|
@ -631,7 +606,8 @@ void BoardStarGive(s32 arg0, Vec *arg1) {
|
|||
HuPrcSleep(10);
|
||||
if (_CheckFlag(FLAG_ID_MAKE(1, 11))) {
|
||||
BoardPlayerMotionEndWait(arg0);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
temp_r25 = HuAudSStreamPlay(6);
|
||||
BoardPlayerMotionEndWait(arg0);
|
||||
while (msmStreamGetStatus(temp_r25) != 0) {
|
||||
|
|
@ -641,7 +617,8 @@ void BoardStarGive(s32 arg0, Vec *arg1) {
|
|||
BoardPlayerVoiceEnableSet(arg0, 7, 1);
|
||||
}
|
||||
|
||||
void BoardStarShowNext(s32 arg0) {
|
||||
void BoardStarShowNext(s32 arg0)
|
||||
{
|
||||
Mtx spBC;
|
||||
Mtx sp8C;
|
||||
Mtx sp5C;
|
||||
|
|
@ -669,7 +646,8 @@ void BoardStarShowNext(s32 arg0) {
|
|||
while (WipeStatGet() != 0) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
HuPrcSleep(18);
|
||||
}
|
||||
BoardStatusItemSet(0);
|
||||
|
|
@ -703,14 +681,16 @@ void BoardStarShowNext(s32 arg0) {
|
|||
temp_f31 = VECMag(&sp20);
|
||||
if (temp_f31 > 3000.0f) {
|
||||
var_r27 = 0xF0;
|
||||
} else if (temp_f31 > 1500.0f) {
|
||||
}
|
||||
else if (temp_f31 > 1500.0f) {
|
||||
var_r27 = 0x78;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
var_r27 = 0x78;
|
||||
}
|
||||
BoardViewMoveStart(&sp38, &sp50, var_r27);
|
||||
showNextObj->trans.x = 68.0f;
|
||||
showNextObj->trans.y = HU_DISP_HEIGHT-50;
|
||||
showNextObj->trans.y = HU_DISP_HEIGHT - 50;
|
||||
showNextObj->trans.z = 100.0f;
|
||||
sp44.x = showNextObj->trans.x;
|
||||
sp44.y = showNextObj->trans.y;
|
||||
|
|
@ -718,9 +698,9 @@ void BoardStarShowNext(s32 arg0) {
|
|||
Hu3D2Dto3D(&sp44, 1, &sp44);
|
||||
BoardModelPosSetV(BoardStarHostMdlGet(), &sp44);
|
||||
BoardCameraRotGet(&sp2C);
|
||||
PSMTXRotRad(sp5C, 'y', MTXDegToRad(10.0f));
|
||||
PSMTXRotRad(sp8C, 'x', MTXDegToRad(sp2C.x));
|
||||
PSMTXConcat(sp8C, sp5C, spBC);
|
||||
MTXRotRad(sp5C, 'y', MTXDegToRad(10.0f));
|
||||
MTXRotRad(sp8C, 'x', MTXDegToRad(sp2C.x));
|
||||
MTXConcat(sp8C, sp5C, spBC);
|
||||
BoardModelMtxSet(BoardStarHostMdlGet(), &spBC);
|
||||
BoardModelRotSet(BoardStarHostMdlGet(), 0.0f, 0.0f, 0.0f);
|
||||
BoardModelScaleSet(BoardStarHostMdlGet(), 0.09f, 0.09f, 0.09f);
|
||||
|
|
@ -735,7 +715,8 @@ void BoardStarShowNext(s32 arg0) {
|
|||
}
|
||||
if (var_r28 == 0) {
|
||||
var_r30 = starMesTbl1[GWBoardGet()] + 6;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
var_r30 = starMesTbl2[GWBoardGet()][0];
|
||||
}
|
||||
BoardWinCreate(3, var_r30, -1);
|
||||
|
|
@ -749,7 +730,8 @@ void BoardStarShowNext(s32 arg0) {
|
|||
HuPrcSleep(3);
|
||||
if (var_r28 == 0) {
|
||||
var_r30 = starMesTbl1[GWBoardGet()] + 7;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
var_r30 = starMesTbl2[GWBoardGet()][1];
|
||||
}
|
||||
BoardWinCreate(3, var_r30, -1);
|
||||
|
|
@ -765,7 +747,7 @@ void BoardStarShowNext(s32 arg0) {
|
|||
HuPrcVSleep();
|
||||
}
|
||||
BoardViewWait();
|
||||
PSMTXIdentity(spBC);
|
||||
MTXIdentity(spBC);
|
||||
BoardModelMtxSet(BoardStarHostMdlGet(), &spBC);
|
||||
HideNextHost(1);
|
||||
while (showNextObj) {
|
||||
|
|
@ -786,7 +768,8 @@ void BoardStarShowNext(s32 arg0) {
|
|||
_ClearFlag(FLAG_ID_MAKE(1, 28));
|
||||
}
|
||||
|
||||
static void ShowNextUpdate(omObjData *arg0) {
|
||||
static void ShowNextUpdate(omObjData *arg0)
|
||||
{
|
||||
ShowNextWork *temp_r30 = OM_GET_WORK_PTR(arg0, ShowNextWork);
|
||||
Vec sp8;
|
||||
|
||||
|
|
@ -815,7 +798,8 @@ static void ShowNextUpdate(omObjData *arg0) {
|
|||
BoardModelPosSetV(BoardStarHostMdlGet(), &sp8);
|
||||
}
|
||||
|
||||
static void HideNextHost(s32 arg0) {
|
||||
static void HideNextHost(s32 arg0)
|
||||
{
|
||||
ShowNextWork *temp_r31 = OM_GET_WORK_PTR(showNextObj, ShowNextWork);
|
||||
|
||||
temp_r31->unk01 = arg0;
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue