mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2024-11-26 03:12:18 -05:00
Merge branch 'develop' of github.com:Malkierian/Shipwright into dev-to-rando-5-6
This commit is contained in:
commit
f550bf1381
@ -1 +1 @@
|
|||||||
Subproject commit a5d84b29429dcd9b32fb1d8b169b6dd269e6c979
|
Subproject commit 878efcc26701f1779e06389a6c6ca8df7aef64da
|
@ -547,6 +547,7 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang|AppleClang")
|
|||||||
-Wno-parentheses
|
-Wno-parentheses
|
||||||
-Wno-narrowing
|
-Wno-narrowing
|
||||||
-Wno-missing-braces
|
-Wno-missing-braces
|
||||||
|
-Wno-int-conversion
|
||||||
$<$<COMPILE_LANGUAGE:C>:
|
$<$<COMPILE_LANGUAGE:C>:
|
||||||
-Werror-implicit-function-declaration
|
-Werror-implicit-function-declaration
|
||||||
-Wno-incompatible-pointer-types
|
-Wno-incompatible-pointer-types
|
||||||
|
@ -2356,7 +2356,6 @@ s32 __osCheckPackId(OSPfs* pfs, __OSPackId* check);
|
|||||||
s32 __osGetId(OSPfs* pfs);
|
s32 __osGetId(OSPfs* pfs);
|
||||||
s32 __osCheckId(OSPfs* pfs);
|
s32 __osCheckId(OSPfs* pfs);
|
||||||
s32 __osPfsRWInode(OSPfs* pfs, __OSInode* inode, u8 flag, u8 bank);
|
s32 __osPfsRWInode(OSPfs* pfs, __OSInode* inode, u8 flag, u8 bank);
|
||||||
void guMtxL2F(MtxF* m1, Mtx* m2);
|
|
||||||
s32 osPfsFindFile(OSPfs* pfs, u16 companyCode, u32 gameCode, u8* gameName, u8* extName, s32* fileNo);
|
s32 osPfsFindFile(OSPfs* pfs, u16 companyCode, u32 gameCode, u8* gameName, u8* extName, s32* fileNo);
|
||||||
s32 osAfterPreNMI(void);
|
s32 osAfterPreNMI(void);
|
||||||
s32 osContStartQuery(OSMesgQueue* mq);
|
s32 osContStartQuery(OSMesgQueue* mq);
|
||||||
@ -2410,7 +2409,6 @@ u32 __osSpGetStatus(void);
|
|||||||
void __osSpSetStatus(u32 status);
|
void __osSpSetStatus(u32 status);
|
||||||
void osWritebackDCacheAll(void);
|
void osWritebackDCacheAll(void);
|
||||||
OSThread* __osGetCurrFaultedThread(void);
|
OSThread* __osGetCurrFaultedThread(void);
|
||||||
void guMtxF2L(MtxF* m1, Mtx* m2);
|
|
||||||
// ? __d_to_ll(?);
|
// ? __d_to_ll(?);
|
||||||
// ? __f_to_ll(?);
|
// ? __f_to_ll(?);
|
||||||
// ? __d_to_ull(?);
|
// ? __d_to_ull(?);
|
||||||
|
@ -445,7 +445,7 @@ void DrawBgActorCollision() {
|
|||||||
bg.curTransform.scale.z, bg.curTransform.rot.x, bg.curTransform.rot.y,
|
bg.curTransform.scale.z, bg.curTransform.rot.x, bg.curTransform.rot.y,
|
||||||
bg.curTransform.rot.z, bg.curTransform.pos.x, bg.curTransform.pos.y,
|
bg.curTransform.rot.z, bg.curTransform.pos.x, bg.curTransform.pos.y,
|
||||||
bg.curTransform.pos.z);
|
bg.curTransform.pos.z);
|
||||||
guMtxF2L(&mf, &m);
|
// guMtxF2L(mf, &m);
|
||||||
mtxDl.push_back(m);
|
mtxDl.push_back(m);
|
||||||
dl.push_back(gsSPMatrix(&mtxDl.back(), G_MTX_MODELVIEW | G_MTX_LOAD | G_MTX_PUSH));
|
dl.push_back(gsSPMatrix(&mtxDl.back(), G_MTX_MODELVIEW | G_MTX_LOAD | G_MTX_PUSH));
|
||||||
|
|
||||||
@ -493,7 +493,7 @@ void DrawColCheckList(std::vector<Gfx>& dl, Collider** objects, int32_t count) {
|
|||||||
SkinMatrix_SetScale(&ms, radius / 128.0f, radius / 128.0f, radius / 128.0f);
|
SkinMatrix_SetScale(&ms, radius / 128.0f, radius / 128.0f, radius / 128.0f);
|
||||||
MtxF dest;
|
MtxF dest;
|
||||||
SkinMatrix_MtxFMtxFMult(&mf, &ms, &dest);
|
SkinMatrix_MtxFMtxFMult(&mf, &ms, &dest);
|
||||||
guMtxF2L(&dest, &m);
|
// guMtxF2L(&dest, &m);
|
||||||
mtxDl.push_back(m);
|
mtxDl.push_back(m);
|
||||||
|
|
||||||
dl.push_back(gsSPMatrix(&mtxDl.back(), G_MTX_MODELVIEW | G_MTX_LOAD | G_MTX_PUSH));
|
dl.push_back(gsSPMatrix(&mtxDl.back(), G_MTX_MODELVIEW | G_MTX_LOAD | G_MTX_PUSH));
|
||||||
@ -512,7 +512,7 @@ void DrawColCheckList(std::vector<Gfx>& dl, Collider** objects, int32_t count) {
|
|||||||
SkinMatrix_SetScale(&ms, radius / 128.0f, cyl->dim.height / 128.0f, radius / 128.0f);
|
SkinMatrix_SetScale(&ms, radius / 128.0f, cyl->dim.height / 128.0f, radius / 128.0f);
|
||||||
MtxF dest;
|
MtxF dest;
|
||||||
SkinMatrix_MtxFMtxFMult(&mt, &ms, &dest);
|
SkinMatrix_MtxFMtxFMult(&mt, &ms, &dest);
|
||||||
guMtxF2L(&dest, &m);
|
// guMtxF2L(&dest, &m);
|
||||||
mtxDl.push_back(m);
|
mtxDl.push_back(m);
|
||||||
|
|
||||||
dl.push_back(gsSPMatrix(&mtxDl.back(), G_MTX_MODELVIEW | G_MTX_LOAD | G_MTX_PUSH));
|
dl.push_back(gsSPMatrix(&mtxDl.back(), G_MTX_MODELVIEW | G_MTX_LOAD | G_MTX_PUSH));
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
#include <chrono>
|
#include <chrono>
|
||||||
|
|
||||||
#include <ResourceManager.h>
|
#include <ResourceManager.h>
|
||||||
|
#include "graphic/Fast3D/Fast3dWindow.h"
|
||||||
#include <File.h>
|
#include <File.h>
|
||||||
#include <DisplayList.h>
|
#include <DisplayList.h>
|
||||||
#include <Window.h>
|
#include <Window.h>
|
||||||
@ -1264,11 +1265,6 @@ extern "C" uint64_t GetUnixTimestamp() {
|
|||||||
return (uint64_t)millis.count();
|
return (uint64_t)millis.count();
|
||||||
}
|
}
|
||||||
|
|
||||||
// C->C++ Bridge
|
|
||||||
extern "C" void Graph_ProcessFrame(void (*run_one_game_iter)(void)) {
|
|
||||||
OTRGlobals::Instance->context->GetWindow()->MainLoop(run_one_game_iter);
|
|
||||||
}
|
|
||||||
|
|
||||||
extern bool ToggleAltAssetsAtEndOfFrame;
|
extern bool ToggleAltAssetsAtEndOfFrame;
|
||||||
|
|
||||||
extern "C" void Graph_StartFrame() {
|
extern "C" void Graph_StartFrame() {
|
||||||
@ -1392,6 +1388,7 @@ extern "C" void Graph_ProcessGfxCommands(Gfx* commands) {
|
|||||||
static int time;
|
static int time;
|
||||||
int fps = target_fps;
|
int fps = target_fps;
|
||||||
int original_fps = 60 / R_UPDATE_RATE;
|
int original_fps = 60 / R_UPDATE_RATE;
|
||||||
|
auto wnd = std::dynamic_pointer_cast<Fast::Fast3dWindow>(Ship::Context::GetInstance()->GetWindow());
|
||||||
|
|
||||||
if (target_fps == 20 || original_fps > target_fps) {
|
if (target_fps == 20 || original_fps > target_fps) {
|
||||||
fps = original_fps;
|
fps = original_fps;
|
||||||
@ -1415,10 +1412,12 @@ extern "C" void Graph_ProcessGfxCommands(Gfx* commands) {
|
|||||||
|
|
||||||
time -= fps;
|
time -= fps;
|
||||||
|
|
||||||
OTRGlobals::Instance->context->GetWindow()->SetTargetFps(fps);
|
if (wnd != nullptr) {
|
||||||
|
wnd->SetTargetFps(fps);
|
||||||
|
}
|
||||||
|
|
||||||
int threshold = CVarGetInteger(CVAR_SETTING("ExtraLatencyThreshold"), 80);
|
int threshold = CVarGetInteger(CVAR_SETTING("ExtraLatencyThreshold"), 80);
|
||||||
OTRGlobals::Instance->context->GetWindow()->SetMaximumFrameLatency(threshold > 0 && target_fps >= threshold ? 2 : 1);
|
wnd->SetMaximumFrameLatency(threshold > 0 && target_fps >= threshold ? 2 : 1);
|
||||||
|
|
||||||
RunCommands(commands, mtx_replacements);
|
RunCommands(commands, mtx_replacements);
|
||||||
|
|
||||||
@ -1451,11 +1450,21 @@ extern "C" void Graph_ProcessGfxCommands(Gfx* commands) {
|
|||||||
float divisor_num = 0.0f;
|
float divisor_num = 0.0f;
|
||||||
|
|
||||||
extern "C" void OTRGetPixelDepthPrepare(float x, float y) {
|
extern "C" void OTRGetPixelDepthPrepare(float x, float y) {
|
||||||
OTRGlobals::Instance->context->GetWindow()->GetPixelDepthPrepare(x, y);
|
auto wnd = std::dynamic_pointer_cast<Fast::Fast3dWindow>(Ship::Context::GetInstance()->GetWindow());
|
||||||
|
if (wnd == nullptr) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
wnd->GetPixelDepthPrepare(x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" uint16_t OTRGetPixelDepth(float x, float y) {
|
extern "C" uint16_t OTRGetPixelDepth(float x, float y) {
|
||||||
return OTRGlobals::Instance->context->GetWindow()->GetPixelDepth(x, y);
|
auto wnd = std::dynamic_pointer_cast<Fast::Fast3dWindow>(Ship::Context::GetInstance()->GetWindow());
|
||||||
|
if (wnd == nullptr) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return wnd->GetPixelDepth(x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" uint32_t ResourceMgr_GetNumGameVersions() {
|
extern "C" uint32_t ResourceMgr_GetNumGameVersions() {
|
||||||
|
@ -1249,7 +1249,7 @@ void SaveManager::SaveSection(int fileNum, int sectionID, bool threaded) {
|
|||||||
auto saveContext = new SaveContext;
|
auto saveContext = new SaveContext;
|
||||||
memcpy(saveContext, &gSaveContext, sizeof(gSaveContext));
|
memcpy(saveContext, &gSaveContext, sizeof(gSaveContext));
|
||||||
if (threaded) {
|
if (threaded) {
|
||||||
smThreadPool->push_task_back(&SaveManager::SaveFileThreaded, this, fileNum, saveContext, sectionID);
|
smThreadPool->detach_task(std::bind(&SaveManager::SaveFileThreaded, this, fileNum, saveContext, sectionID));
|
||||||
} else {
|
} else {
|
||||||
SaveFileThreaded(fileNum, saveContext, sectionID);
|
SaveFileThreaded(fileNum, saveContext, sectionID);
|
||||||
}
|
}
|
||||||
@ -1340,7 +1340,7 @@ void SaveManager::LoadFile(int fileNum) {
|
|||||||
|
|
||||||
void SaveManager::ThreadPoolWait() {
|
void SaveManager::ThreadPoolWait() {
|
||||||
if (smThreadPool) {
|
if (smThreadPool) {
|
||||||
smThreadPool->wait_for_tasks();
|
smThreadPool->wait();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,7 +40,10 @@ typedef struct {
|
|||||||
#include <functional>
|
#include <functional>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
#include "thread-pool/BS_thread_pool.hpp"
|
|
||||||
|
#define BS_THREAD_POOL_ENABLE_PRIORITY
|
||||||
|
#define BS_THREAD_POOL_ENABLE_PAUSE
|
||||||
|
#include <BS_thread_pool.hpp>
|
||||||
|
|
||||||
#include "z64save.h"
|
#include "z64save.h"
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
#include <libultraship/libultraship.h>
|
#include <libultraship/libultraship.h>
|
||||||
#include "UIWidgets.hpp"
|
#include "UIWidgets.hpp"
|
||||||
#include "include/z64audio.h"
|
#include "include/z64audio.h"
|
||||||
|
#include "graphic/Fast3D/gfx_rendering_api.h"
|
||||||
#include "OTRGlobals.h"
|
#include "OTRGlobals.h"
|
||||||
#include "z64.h"
|
#include "z64.h"
|
||||||
#include "macros.h"
|
#include "macros.h"
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
#include <libultraship/libultra.h>
|
#include <libultraship/libultra.h>
|
||||||
|
#include <stdarg.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "z64.h"
|
#include "z64.h"
|
||||||
@ -31,18 +32,6 @@ f32 qNaN0x10000 = 0x7F810000;
|
|||||||
// __gSPTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy);
|
// __gSPTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy);
|
||||||
//}
|
//}
|
||||||
|
|
||||||
s32 osJamMesg(OSMesgQueue* mq, OSMesg msg, s32 flag)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void osSetEventMesg(OSEvent e, OSMesgQueue* mq, OSMesg msg)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void osViSetEvent(OSMesgQueue* mq, OSMesg msg, u32 retraceCount)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
OSId osGetThreadId(OSThread* thread)
|
OSId osGetThreadId(OSThread* thread)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -55,31 +44,11 @@ void osSetThreadPri(OSThread* thread, OSPri pri)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 osSetTimer(OSTimer* timer, OSTime countdown, OSTime interval, OSMesgQueue* mq, OSMesg msg)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void osCreatePiManager(OSPri pri, OSMesgQueue* cmdQ, OSMesg* cmdBuf, s32 cmdMsgCnt)
|
void osCreatePiManager(OSPri pri, OSMesgQueue* cmdQ, OSMesg* cmdBuf, s32 cmdMsgCnt)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void osCreateViManager(OSPri pri)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
s32 osMotorInit(OSMesgQueue* ctrlrqueue, OSPfs* pfs, s32 channel)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
u32 osAiGetLength(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
s32 osPfsFreeBlocks(OSPfs* pfs, s32* leftoverBytes)
|
s32 osPfsFreeBlocks(OSPfs* pfs, s32* leftoverBytes)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -130,16 +99,6 @@ s32 osPfsAllocateFile(OSPfs* pfs, u16 companyCode, u32 gameCode, u8* gameName, u
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 osAiSetNextBuffer(void* buf, size_t size)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
s32 __osMotorAccess(OSPfs* pfs, u32 vibrate)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
OSIntMask osSetIntMask(OSIntMask a)
|
OSIntMask osSetIntMask(OSIntMask a)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
@ -200,16 +159,6 @@ void osContGetQuery(OSContStatus* data)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void osViSwapBuffer(void* vaddr)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void* osViGetNextFramebuffer()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
u32 __osGetFpcCsr()
|
u32 __osGetFpcCsr()
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
@ -240,11 +189,6 @@ OSThread* __osGetCurrFaultedThread(void)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void osCartRomInit()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
u32 osMemSize = 1024 * 1024 * 1024;
|
u32 osMemSize = 1024 * 1024 * 1024;
|
||||||
|
|
||||||
void Audio_osInvalDCache(void* buf, s32 size)
|
void Audio_osInvalDCache(void* buf, s32 size)
|
||||||
@ -263,11 +207,6 @@ s32 osAiSetFrequency(u32 freq)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 osEPiStartDma(OSPiHandle* handle, OSIoMesg* mb, s32 direction)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void osInvalDCache(void* vaddr, s32 nbytes)
|
void osInvalDCache(void* vaddr, s32 nbytes)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -313,31 +252,6 @@ OSPiHandle* osDriveRomInit()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void osViSetMode(OSViMode* mode)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void osViBlack(u8 active)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void osViSetYScale(f32 scale)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void osViSetXScale(f32 value)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void osViSetSpecialFeatures(u32 func)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void __osInitialize_common(void)
|
void __osInitialize_common(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -390,11 +304,6 @@ s32 osEPiReadIo(OSPiHandle* handle, u32 devAddr, u32* data)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
u32* osViGetCurrentFramebuffer(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void osSpTaskYield(void)
|
void osSpTaskYield(void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
#include "soh/Enhancements/debugger/valueViewer.h"
|
#include "soh/Enhancements/debugger/valueViewer.h"
|
||||||
#include "soh/Enhancements/gameconsole.h"
|
#include "soh/Enhancements/gameconsole.h"
|
||||||
#include "soh/OTRGlobals.h"
|
#include "soh/OTRGlobals.h"
|
||||||
|
#include "libultraship/bridge.h"
|
||||||
|
|
||||||
#define GFXPOOL_HEAD_MAGIC 0x1234
|
#define GFXPOOL_HEAD_MAGIC 0x1234
|
||||||
#define GFXPOOL_TAIL_MAGIC 0x5678
|
#define GFXPOOL_TAIL_MAGIC 0x5678
|
||||||
@ -541,8 +542,9 @@ static void RunFrame()
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Graph_ThreadEntry(void* arg0) {
|
void Graph_ThreadEntry(void* arg0) {
|
||||||
|
while (WindowIsRunning()) {
|
||||||
Graph_ProcessFrame(RunFrame);
|
RunFrame();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void* Graph_Alloc(GraphicsContext* gfxCtx, size_t size) {
|
void* Graph_Alloc(GraphicsContext* gfxCtx, size_t size) {
|
||||||
|
@ -6268,7 +6268,7 @@ s32 func_8083D12C(PlayState* play, Player* this, Input* arg2) {
|
|||||||
func_80832340(play, this);
|
func_80832340(play, this);
|
||||||
// Skip take breath animation on surface if Link didn't grab an item while underwater and the setting is enabled
|
// Skip take breath animation on surface if Link didn't grab an item while underwater and the setting is enabled
|
||||||
if (CVarGetInteger(CVAR_ENHANCEMENT("SkipSwimDeepEndAnim"), 0) && !(this->stateFlags1 & PLAYER_STATE1_ITEM_OVER_HEAD)) {
|
if (CVarGetInteger(CVAR_ENHANCEMENT("SkipSwimDeepEndAnim"), 0) && !(this->stateFlags1 & PLAYER_STATE1_ITEM_OVER_HEAD)) {
|
||||||
auto lastAnimFrame = Animation_GetLastFrame(&gPlayerAnim_link_swimer_swim_deep_end);
|
int lastAnimFrame = Animation_GetLastFrame(&gPlayerAnim_link_swimer_swim_deep_end);
|
||||||
LinkAnimation_Change(play, &this->skelAnime, &gPlayerAnim_link_swimer_swim_deep_end, 1.0f,
|
LinkAnimation_Change(play, &this->skelAnime, &gPlayerAnim_link_swimer_swim_deep_end, 1.0f,
|
||||||
lastAnimFrame, lastAnimFrame, ANIMMODE_ONCE, -6.0f);
|
lastAnimFrame, lastAnimFrame, ANIMMODE_ONCE, -6.0f);
|
||||||
} else {
|
} else {
|
||||||
|
@ -141,7 +141,7 @@ static Vtx sCycleAButtonVtx[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Track animation timers for each inventory slot
|
// Track animation timers for each inventory slot
|
||||||
static sSlotCycleActiveAnimTimer[24] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
|
static int sSlotCycleActiveAnimTimer[24] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
|
||||||
|
|
||||||
// Renders a left and/or right item for any item slot that can support cycling
|
// Renders a left and/or right item for any item slot that can support cycling
|
||||||
void KaleidoScope_DrawItemCycleExtras(PlayState* play, u8 slot, u8 canCycle, u8 leftItem, u8 rightItem) {
|
void KaleidoScope_DrawItemCycleExtras(PlayState* play, u8 slot, u8 canCycle, u8 leftItem, u8 rightItem) {
|
||||||
|
Loading…
Reference in New Issue
Block a user