spockalicious (#2751)
* Rough mockup of LUS XML loading * Updated code for merge * Loading from FS support and custom DList WIP implementation * Added current directory support to F3D and impl most of the dlist cmds * WIP Skeleton support * Almost done * Rebase fixes * Submodule updates * HD Texture Support * Fixes * bump lus * fix exporter build, header update * soh builds * setMesh image path cleanup * Update soh/src/overlays/actors/ovl_player_actor/z_player.c * Update soh/src/overlays/actors/ovl_player_actor/z_player.c * Update OTRExporter/OTRExporter/Main.cpp * Update ZAPDTR/ZAPD/ZResource.h * Update soh/src/code/z_skelanime.c * Update OTRExporter/OTRExporter/Main.cpp * Fixed jpeg backgrounds and decreased icon buffer size * Bump lus * Increased even more the buffer because it crashes on long texts * Removed print because sometimes the if is not triggered when the image is already byteswapped * fix non-windows build * fix build Co-authored-by: Kenix <kenixwhisperwind@gmail.com> * add hd checkbox * Various fixes for custom model support (#23) * Some fixes * Updated LUS Version * Fixed issue with Link Skirt on pause menu * Added CVar for custom link model changes * Fixed headers * Additional header fixes * Tweaks * Unload HD game assets on scene transition. (#16) * Unload game assets on scene transition. * Bump LUS * Unloads all HD assets on scene transition. * Only unload hd assets if hd assets are turned on. * Fixes issues on toggling between HD and non HD assets. --------- Co-authored-by: briaguya <briaguya@alice> * fix: actually load hd debug font (#27) * fix: actually load hd debug font * toggle debug text correctly --------- Co-authored-by: briaguya <briaguya> * Yes. (#28) * Merge branch 'develop' into dev-to-ghost * HD Skeleton Swapping and Language Fixes (#32) * Yes. * HD Skeleton Swapping and Language Fixes * Test * Fixed issues with ganon cape (#34) * Fixed Bongo Bongo Crash (#35) * Added HD Assets Toggle (#37) * Ivan the Fairy - Coop Mode (#36) * wip * hookshotable ivan * added hookshot item * new items & changes & fixes & restored navi * farore, din and nayru's spells are done * fixed slingshot & bow * added more items supported * done with all main items * bug fixes & ready * added imgui button * wip * hookshotable ivan * added hookshot item * new items & changes & fixes & restored navi * farore, din and nayru's spells are done * fixed slingshot & bow * added more items supported * fix own dungeon items on shuffled boss rooms (#2683) * bump lus (#2692) * fix: lowercase package names for vcpkg (#2693) vcpkg was throwing an error `error: invalid character in package name (must be lowercase, digits, '-')` this updates our calls to `vcpkg_install_packages` to use lowercase package names instead of uppercase * fix death mountain cloud in rando (#2691) * Fix: Switch Age No Longer Reloads Start Room (#2679) * [Reduced Clutter] Disable Hot/Underwater Warning Text (#2684) * Disable Warning Text * Moved to Reduced Clutter * done with all main items * bug fixes & ready * fix: process roms in consistent order (#2696) * chore: move rando savefile setup and document flags (#2697) * remove rando save init from sram * move rando savefile init logic and set more flags * document flags for rando save creation * Fix: Use correct fps value for frame interpolation with match refresh rate (#2694) * Fix: Kak GS placement on construction site (#2695) * added imgui button * addressed kenix's comments * fixed useless null * added rupee dash mode in extra modes * changed menu position --------- Co-authored-by: Adam Bird <Archez@users.noreply.github.com> Co-authored-by: briaguya <70942617+briaguya-ai@users.noreply.github.com> Co-authored-by: inspectredc <78732756+inspectredc@users.noreply.github.com> Co-authored-by: Patrick12115 <115201185+Patrick12115@users.noreply.github.com> * LUS Scancodes (#42) * Added HD Assets Toggle * Switched out SDL for LUS scancodes * Ivan tweaks (#45) * Magic consumption slowed down; Bosses now affected by Ivan's Din spell * Adjust magic timer * clean up imgui * model fixes/improvements (#50) * replace `gUseCustomLinkModel` with custom resource check * handle adult/child * bump lus * fix model switching with tab * use lus main * fix carpet man (#52) Co-authored-by: Rozelette <Rozelette@users.noreply.github.com> * get ship model and lus texture into soh.otr, use `gAuthenticLogo` to toggle between ship and authentic (#55) * Use libultra features for CPU-modified textures (#40) * Use libultra features for CPU-modified textures * Comment * bump lus on ghost (#58) * fix: properly use `Interface_LoadActionLabel` to display start button text (#61) * Changes hd -> alt for texture replacement. (#65) * Changes hd -> alt for texture replacement. * Renames variables in gfxprint for hd -> alt change. * Update soh/soh/resource/type/Skeleton.cpp --------- Co-authored-by: briaguya <70942617+briaguya-ai@users.noreply.github.com> * Fixes kaleido dungeon maps (#67) * skeleton stuff (#69) * comment out wii u build (#70) * bump lus (#71) * Rework readme (#72) * Update README.md * docs * put custom music docs somewhere * Update README.md * Update README.md * Update README.md * Update README.md * dark/light title image * lus * Update README.md * Fixed vanilla minimap (#73) * Fixed vanilla minimap * Workaround for pulsing SD maps with non-broken HD maps. --------- Co-authored-by: Christopher Leggett <chris@leggett.dev> * Skeleton fix fixed (#75) * WIP skelton patcher fix * Fixes skeleton reference change. * Adds const back to name in ResourceMgr_LoadSkeletonByName --------- Co-authored-by: Christopher Leggett <chris@leggett.dev> Co-authored-by: Kenix <kenixwhisperwind@gmail.com> * Fixes z_message_otr memory leak. * Update soh/soh/z_message_OTR.cpp * Update soh/src/code/game.c * docs: add how to find otr files to switch instructions (#78) * bump lus (#79) * comment out RegisterBlendedTexture in king d (#80) --------- Co-authored-by: Nicholas Estelami <NEstelami@users.noreply.github.com> Co-authored-by: David Chavez <david@dcvz.io> Co-authored-by: briaguya <briaguya@alice> Co-authored-by: Kenix3 <kenixwhisperwind@gmail.com> Co-authored-by: KiritoDv <kiritodev01@gmail.com> Co-authored-by: briaguya <briaguya> Co-authored-by: Ralphie Morell <stratomaster64@gmail.com> Co-authored-by: MelonSpeedruns <melonspeedruns@outlook.com> Co-authored-by: Adam Bird <Archez@users.noreply.github.com> Co-authored-by: inspectredc <78732756+inspectredc@users.noreply.github.com> Co-authored-by: Patrick12115 <115201185+Patrick12115@users.noreply.github.com> Co-authored-by: Rozelette <Rozelette@users.noreply.github.com> Co-authored-by: Christopher Leggett <chris@leggett.dev> Co-authored-by: Lywx <36680385+KiritoDv@users.noreply.github.com>
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
#include <string.h>
|
||||
#include "global.h"
|
||||
#include "vt.h"
|
||||
#include "libultraship/bridge.h"
|
||||
#include "soh/Enhancements/game-interactor/GameInteractor.h"
|
||||
|
||||
SpeedMeter D_801664D0;
|
||||
@@ -13,6 +14,7 @@ u16 sLastButtonPressed;
|
||||
|
||||
// Forward declared, because this in a C++ header.
|
||||
int gfx_create_framebuffer(uint32_t width, uint32_t height);
|
||||
void gfx_texture_cache_clear();
|
||||
|
||||
void GameState_FaultPrint(void) {
|
||||
static char sBtnChars[] = "ABZSuldr*+LRudlr";
|
||||
@@ -459,6 +461,14 @@ void GameState_Destroy(GameState* gameState) {
|
||||
Fault_RemoveClient(&sGameFaultClient);
|
||||
|
||||
osSyncPrintf("game デストラクタ終了\n"); // "game destructor end"
|
||||
|
||||
// Performing clear skeletons before unload resources fixes an actor heap corruption crash due to the skeleton patching system.
|
||||
ResourceMgr_ClearSkeletons();
|
||||
|
||||
if (CVarGetInteger("gAltAssets", 0)) {
|
||||
UnloadResourceDirectory("alt/*");
|
||||
gfx_texture_cache_clear();
|
||||
}
|
||||
}
|
||||
|
||||
GameStateFunc GameState_GetInit(GameState* gameState) {
|
||||
|
||||
@@ -128,6 +128,7 @@ u8 sGfxPrintFontData[(16 * 256) / 2] = {
|
||||
|
||||
// Can be used to set GFXP_FLAG_ENLARGE by default
|
||||
static u8 sDefaultSpecialFlags;
|
||||
static const char rGfxPrintFontData[] = "__OTR__alt/textures/font/sGfxPrintFontData";
|
||||
|
||||
void GfxPrint_Setup(GfxPrint* this) {
|
||||
s32 width = 16;
|
||||
@@ -140,13 +141,26 @@ void GfxPrint_Setup(GfxPrint* this) {
|
||||
G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
|
||||
G_AC_NONE | G_ZS_PRIM | G_RM_XLU_SURF | G_RM_XLU_SURF2);
|
||||
gDPSetCombineMode(this->dList++, G_CC_DECALRGBA, G_CC_DECALRGBA);
|
||||
gDPLoadTextureBlock_4b(this->dList++, sGfxPrintFontData, G_IM_FMT_CI, width, height, 0, G_TX_NOMIRROR | G_TX_WRAP,
|
||||
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
|
||||
|
||||
bool useAltTexture = ResourceMgr_FileExists(rGfxPrintFontData) && CVarGetInteger("gAltAssets", 0);
|
||||
if (!useAltTexture) {
|
||||
gDPLoadTextureBlock_4b(this->dList++, sGfxPrintFontData, G_IM_FMT_CI, width, height, 0, G_TX_NOMIRROR | G_TX_WRAP,
|
||||
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
|
||||
} else {
|
||||
gDPLoadTextureBlock_4b(this->dList++, rGfxPrintFontData, G_IM_FMT_CI, width * 4, height, 0, G_TX_NOMIRROR | G_TX_WRAP,
|
||||
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
|
||||
}
|
||||
|
||||
gDPLoadTLUT(this->dList++, 64, 256, sGfxPrintFontTLUT);
|
||||
|
||||
for (i = 1; i < 4; i++) {
|
||||
gDPSetTile(this->dList++, G_IM_FMT_CI, G_IM_SIZ_4b, 1, 0, i * 2, i, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK,
|
||||
G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD);
|
||||
if (useAltTexture) {
|
||||
gDPSetTile(this->dList++, G_IM_FMT_RGBA, G_IM_SIZ_4b, 1, 0, i * 2, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK,
|
||||
G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD);
|
||||
} else {
|
||||
gDPSetTile(this->dList++, G_IM_FMT_CI, G_IM_SIZ_4b, 1, 0, i * 2, i, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK,
|
||||
G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD);
|
||||
}
|
||||
gDPSetTileSize(this->dList++, i * 2, 0, 0, 60, 1020);
|
||||
}
|
||||
|
||||
@@ -174,7 +188,7 @@ void GfxPrint_SetColor(GfxPrint* this, u32 r, u32 g, u32 b, u32 a) {
|
||||
}
|
||||
|
||||
void GfxPrint_SetPosPx(GfxPrint* this, s32 x, s32 y) {
|
||||
this->posX = this->baseX + (x * 4);
|
||||
this->posX = this->baseX + (x * 4) + CVarGetInteger("gGfxPrintCharStartOffset", 0);
|
||||
this->posY = this->baseY + (y * 4);
|
||||
}
|
||||
|
||||
@@ -189,6 +203,8 @@ void GfxPrint_SetBasePosPx(GfxPrint* this, s32 x, s32 y) {
|
||||
|
||||
void GfxPrint_PrintCharImpl(GfxPrint* this, u8 c) {
|
||||
u32 tile = (c & 0xFF) * 2;
|
||||
u8 offset = ((c * 2) & 0x7) / 2;
|
||||
u8 useAltTexture = ResourceMgr_FileExists(rGfxPrintFontData) && CVarGetInteger("gAltAssets", 0);
|
||||
|
||||
if (this->flags & GFXP_FLAG_UPDATE) {
|
||||
this->flags &= ~GFXP_FLAG_UPDATE;
|
||||
@@ -226,11 +242,12 @@ void GfxPrint_PrintCharImpl(GfxPrint* this, u8 c) {
|
||||
gSPTextureRectangle(this->dList++, (this->posX) << 1, (this->posY) << 1, (this->posX + 32) << 1,
|
||||
(this->posY + 32) << 1, tile, (u16)(c & 4) * 64, (u16)(c >> 3) * 256, 1 << 9, 1 << 9);
|
||||
} else {
|
||||
gSPTextureRectangle(this->dList++, this->posX, this->posY, this->posX + 32, this->posY + 32, tile,
|
||||
(u16)(c & 4) * 64, (u16)(c >> 3) * 256, 1 << 10, 1 << 10);
|
||||
gSPTextureRectangle(this->dList++, this->posX, this->posY, this->posX + 32, this->posY + 32,
|
||||
useAltTexture ? 0 : tile, (useAltTexture ? ((128 * 4) * offset) : 0) + (u16)((c & 4) * 64),
|
||||
(u16)(c >> 3) * 256, 1 << 10, 1 << 10);
|
||||
}
|
||||
|
||||
this->posX += 32;
|
||||
this->posX += CVarGetInteger("gGfxPrintCharSpacing", 32);
|
||||
}
|
||||
|
||||
void GfxPrint_PrintStringWithSize(GfxPrint* this, const void* buffer, u32 charSize, u32 charCount) {
|
||||
|
||||
@@ -799,9 +799,22 @@ void func_8002CDE4(PlayState* play, TitleCardContext* titleCtx) {
|
||||
|
||||
void TitleCard_InitBossName(PlayState* play, TitleCardContext* titleCtx, void* texture, s16 x, s16 y, u8 width,
|
||||
u8 height, s16 hasTranslation) {
|
||||
|
||||
if (ResourceMgr_OTRSigCheck(texture))
|
||||
texture = GetResourceDataByName(texture, false);
|
||||
static char newName[512];
|
||||
|
||||
if (gSaveContext.language != LANGUAGE_ENG) {
|
||||
size_t length = strlen(texture);
|
||||
strcpy(newName, texture);
|
||||
if (gSaveContext.language == LANGUAGE_FRA) {
|
||||
newName[length - 6] = 'F';
|
||||
newName[length - 5] = 'R';
|
||||
newName[length - 4] = 'A';
|
||||
} else if (gSaveContext.language == LANGUAGE_GER) {
|
||||
newName[length - 6] = 'G';
|
||||
newName[length - 5] = 'E';
|
||||
newName[length - 4] = 'R';
|
||||
}
|
||||
texture = newName;
|
||||
}
|
||||
|
||||
titleCtx->texture = texture;
|
||||
titleCtx->isBossCard = true;
|
||||
@@ -1005,7 +1018,7 @@ void TitleCard_InitPlaceName(PlayState* play, TitleCardContext* titleCtx, void*
|
||||
|
||||
}
|
||||
|
||||
char newName[512];
|
||||
static char newName[512];
|
||||
|
||||
if (gSaveContext.language != LANGUAGE_ENG) {
|
||||
size_t length = strlen(texture);
|
||||
@@ -1023,7 +1036,7 @@ void TitleCard_InitPlaceName(PlayState* play, TitleCardContext* titleCtx, void*
|
||||
texture = newName;
|
||||
}
|
||||
|
||||
titleCtx->texture = GetResourceDataByName(texture, false);
|
||||
titleCtx->texture = texture;
|
||||
titleCtx->isBossCard = false;
|
||||
titleCtx->hasTranslation = false;
|
||||
titleCtx->x = x;
|
||||
@@ -1067,14 +1080,9 @@ void TitleCard_Update(PlayState* play, TitleCardContext* titleCtx) {
|
||||
void TitleCard_Draw(PlayState* play, TitleCardContext* titleCtx) {
|
||||
s32 width;
|
||||
s32 height;
|
||||
s32 unused;
|
||||
s32 titleX;
|
||||
s32 doubleWidth;
|
||||
s32 titleY;
|
||||
s32 titleSecondY;
|
||||
s32 textureLanguageOffset;
|
||||
s32 shiftTopY;
|
||||
s32 shiftBottomY;
|
||||
|
||||
if (titleCtx->alpha != 0) {
|
||||
width = titleCtx->width;
|
||||
@@ -1107,52 +1115,21 @@ void TitleCard_Draw(PlayState* play, TitleCardContext* titleCtx) {
|
||||
|
||||
OPEN_DISPS(play->state.gfxCtx);
|
||||
|
||||
height = (width * height > 0x1000) ? 0x1000 / width : height;
|
||||
titleSecondY = titleY + (height * 4);
|
||||
|
||||
textureLanguageOffset = 0x0;
|
||||
shiftTopY = 0x0;
|
||||
shiftBottomY = 0x1000;
|
||||
|
||||
//if this card is bosses cards, has translation and that is not using English language.
|
||||
if (titleCtx->isBossCard && titleCtx->hasTranslation && gSaveContext.language != LANGUAGE_ENG) {
|
||||
textureLanguageOffset = (width * height * gSaveContext.language);
|
||||
if (gSaveContext.language == LANGUAGE_GER) {
|
||||
shiftTopY = 0x400;
|
||||
shiftBottomY = 0x1400;
|
||||
} else if (gSaveContext.language == LANGUAGE_FRA) {
|
||||
shiftTopY = 0x800;
|
||||
shiftBottomY = 0x1800;
|
||||
}
|
||||
}
|
||||
|
||||
// WORLD_OVERLAY_DISP Goes over POLY_XLU_DISP but under POLY_KAL_DISP
|
||||
WORLD_OVERLAY_DISP = Gfx_SetupDL_52NoCD(WORLD_OVERLAY_DISP);
|
||||
|
||||
gDPSetPrimColor(WORLD_OVERLAY_DISP++, 0, 0, (u8)titleCtx->intensityR, (u8)titleCtx->intensityG, (u8)titleCtx->intensityB,
|
||||
(u8)titleCtx->alpha);
|
||||
|
||||
gDPLoadTextureBlock(WORLD_OVERLAY_DISP++, (uintptr_t)titleCtx->texture + textureLanguageOffset + shiftTopY, G_IM_FMT_IA,
|
||||
gDPLoadTextureBlock(WORLD_OVERLAY_DISP++, (uintptr_t)titleCtx->texture, G_IM_FMT_IA,
|
||||
G_IM_SIZ_8b,
|
||||
width, height, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK,
|
||||
G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
|
||||
//Removing the -1 there remove the gap between top and bottom textures.
|
||||
gSPWideTextureRectangle(WORLD_OVERLAY_DISP++, titleX, titleY, ((doubleWidth * 2) + titleX) - 4, titleY + (height * 4),
|
||||
G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
|
||||
|
||||
height = titleCtx->height - height;
|
||||
|
||||
// If texture is bigger than 0x1000, display the rest
|
||||
if (height > 0) {
|
||||
gDPLoadTextureBlock(WORLD_OVERLAY_DISP++, (uintptr_t)titleCtx->texture + textureLanguageOffset + shiftBottomY,
|
||||
G_IM_FMT_IA,
|
||||
G_IM_SIZ_8b, width, height, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP,
|
||||
G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
|
||||
//Removing the -1 there remove the gap between top and bottom textures.
|
||||
gSPWideTextureRectangle(WORLD_OVERLAY_DISP++, titleX, titleSecondY, ((doubleWidth * 2) + titleX) - 4,
|
||||
titleSecondY + (height * 4), G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
|
||||
}
|
||||
|
||||
CLOSE_DISPS(play->state.gfxCtx);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,7 +6,11 @@ void Gfx_DrawDListOpa(PlayState* play, Gfx* dlist) {
|
||||
Gfx_SetupDL_25Opa(play->state.gfxCtx);
|
||||
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx),
|
||||
G_MTX_MODELVIEW | G_MTX_LOAD);
|
||||
gSPDisplayList(POLY_OPA_DISP++, dlist);
|
||||
|
||||
if (ResourceMgr_OTRSigCheck(dlist) == 1)
|
||||
gsSPPushCD(POLY_OPA_DISP++, dlist);
|
||||
|
||||
gSPDisplayList(POLY_OPA_DISP++, dlist);
|
||||
|
||||
CLOSE_DISPS(play->state.gfxCtx);
|
||||
}
|
||||
@@ -17,6 +21,10 @@ void Gfx_DrawDListXlu(PlayState* play, Gfx* dlist) {
|
||||
Gfx_SetupDL_25Xlu(play->state.gfxCtx);
|
||||
gSPMatrix(POLY_XLU_DISP++, MATRIX_NEWMTX(play->state.gfxCtx),
|
||||
G_MTX_MODELVIEW | G_MTX_LOAD);
|
||||
|
||||
if (ResourceMgr_OTRSigCheck(dlist) == 1)
|
||||
gsSPPushCD(POLY_XLU_DISP++, dlist);
|
||||
|
||||
gSPDisplayList(POLY_XLU_DISP++, dlist);
|
||||
|
||||
CLOSE_DISPS(play->state.gfxCtx);
|
||||
|
||||
@@ -3045,6 +3045,10 @@ void CollisionCheck_ApplyDamage(PlayState* play, CollisionCheckContext* colChkCt
|
||||
if (!(collider->acFlags & AC_HARD)) {
|
||||
collider->actor->colChkInfo.damage += damage;
|
||||
}
|
||||
|
||||
if (CVarGetInteger("gIvanCoopModeEnabled", 0)) {
|
||||
collider->actor->colChkInfo.damage *= GET_PLAYER(play)->ivanDamageMultiplier;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -3649,7 +3653,7 @@ s32 CollisionCheck_CylSideVsLineSeg(f32 radius, f32 height, f32 offset, Vec3f* a
|
||||
* Gets damage from a sword strike using generic values, and returns 0 if the attack is
|
||||
* not sword-type. Used by bosses to require that a sword attack deal the killing blow.
|
||||
*/
|
||||
u8 CollisionCheck_GetSwordDamage(s32 dmgFlags) {
|
||||
u8 CollisionCheck_GetSwordDamage(s32 dmgFlags, PlayState* play) {
|
||||
u8 damage = 0;
|
||||
|
||||
if (dmgFlags & 0x00400100) {
|
||||
@@ -3662,6 +3666,10 @@ u8 CollisionCheck_GetSwordDamage(s32 dmgFlags) {
|
||||
damage = 8;
|
||||
}
|
||||
|
||||
if (CVarGetInteger("gIvanCoopModeEnabled", 0)) {
|
||||
damage *= GET_PLAYER(play)->ivanDamageMultiplier;
|
||||
}
|
||||
|
||||
KREG(7) = damage;
|
||||
return damage;
|
||||
}
|
||||
|
||||
@@ -41,18 +41,16 @@ void func_801109B0(PlayState* play) {
|
||||
DmaMgr_SendRequest1(interfaceCtx->parameterSegment, (uintptr_t)_parameter_staticSegmentRomStart, parameterSize,
|
||||
__FILE__, 162);
|
||||
|
||||
interfaceCtx->doActionSegment = GAMESTATE_ALLOC_MC(&play->state, 0x480);
|
||||
interfaceCtx->doActionSegment = GAMESTATE_ALLOC_MC(&play->state, 3 * sizeof(char*));
|
||||
|
||||
osSyncPrintf("DOアクション テクスチャ初期=%x\n", 0x480); // "DO Action Texture Initialization"
|
||||
osSyncPrintf("parameter->do_actionSegment=%x\n", interfaceCtx->doActionSegment);
|
||||
|
||||
ASSERT(interfaceCtx->doActionSegment != NULL);
|
||||
|
||||
uint32_t attackDoActionTexSize = GetResourceTexSizeByName(gAttackDoActionENGTex, false);
|
||||
memcpy(interfaceCtx->doActionSegment, GetResourceDataByName(gAttackDoActionENGTex, false), attackDoActionTexSize);
|
||||
memcpy(interfaceCtx->doActionSegment + (attackDoActionTexSize / 2), GetResourceDataByName(gCheckDoActionENGTex, false), attackDoActionTexSize);
|
||||
|
||||
memcpy(interfaceCtx->doActionSegment + attackDoActionTexSize, GetResourceDataByName(gReturnDoActionENGTex, false), GetResourceTexSizeByName(gReturnDoActionENGTex, false));
|
||||
interfaceCtx->doActionSegment[0] = gAttackDoActionENGTex;
|
||||
interfaceCtx->doActionSegment[1] = gCheckDoActionENGTex;
|
||||
interfaceCtx->doActionSegment[2] = gReturnDoActionENGTex;
|
||||
|
||||
interfaceCtx->iconItemSegment = GAMESTATE_ALLOC_MC(
|
||||
&play->state, 0x1000 * ARRAY_COUNT(gSaveContext.equips.buttonItems));
|
||||
|
||||
@@ -15,7 +15,7 @@ s32 SkelCurve_Init(PlayState* play, SkelAnimeCurve* skelCurve, SkelCurveLimbList
|
||||
TransformUpdateIndex* transUpdIdx) {
|
||||
|
||||
if (ResourceMgr_OTRSigCheck(limbListSeg))
|
||||
limbListSeg = ResourceMgr_LoadSkeletonByName(limbListSeg);
|
||||
limbListSeg = ResourceMgr_LoadSkeletonByName(limbListSeg, NULL);
|
||||
|
||||
SkelCurveLimb** limbs;
|
||||
SkelCurveLimbList* limbList = SEGMENTED_TO_VIRTUAL(limbListSeg);
|
||||
|
||||
@@ -174,7 +174,7 @@ void Font_LoadChar(Font* font, u8 character, u16 codePointIndex) {
|
||||
//__FILE__, __LINE__);
|
||||
|
||||
if (character < 0x8B)
|
||||
memcpy(&font->charTexBuf[codePointIndex], GetResourceDataByName(fntTbl[character], false), FONT_CHAR_TEX_SIZE);
|
||||
memcpy(&font->charTexBuf[codePointIndex], fntTbl[character], strlen(fntTbl[character]) + 1);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -183,7 +183,7 @@ void Font_LoadChar(Font* font, u8 character, u16 codePointIndex) {
|
||||
* The different icons are given in the MessageBoxIcon enum.
|
||||
*/
|
||||
void Font_LoadMessageBoxIcon(Font* font, u16 icon) {
|
||||
memcpy(font->iconBuf, GetResourceDataByName(msgStaticTbl[4 + icon], false), FONT_CHAR_TEX_SIZE);
|
||||
memcpy(font->iconBuf, msgStaticTbl[4 + icon], strlen(msgStaticTbl[4 + icon]) + 1);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -218,7 +218,7 @@ void Font_LoadOrderedFont(Font* font) {
|
||||
osSyncPrintf("nes_mes_buf[%d]=%d\n", codePointIndex, font->msgBuf[codePointIndex]);
|
||||
|
||||
offset = (font->msgBuf[codePointIndex] - '\x20') * FONT_CHAR_TEX_SIZE;
|
||||
memcpy(fontBuf, GetResourceDataByName(fntTbl[offset / FONT_CHAR_TEX_SIZE], false), FONT_CHAR_TEX_SIZE);
|
||||
memcpy(fontBuf, fntTbl[offset / FONT_CHAR_TEX_SIZE], strlen(fntTbl[offset / FONT_CHAR_TEX_SIZE]) + 1);
|
||||
//DmaMgr_SendRequest1(fontBuf, fontStatic + offset, FONT_CHAR_TEX_SIZE, __FILE__, __LINE__);
|
||||
fontBufIndex += FONT_CHAR_TEX_SIZE / 8;
|
||||
}
|
||||
|
||||
@@ -413,8 +413,8 @@ void Map_InitData(PlayState* play, s16 room) {
|
||||
//gMapData->owMinimapTexSize[mapIndex], __FILE__, __LINE__);
|
||||
|
||||
if (sEntranceIconMapIndex < 24) {
|
||||
const char* textureName = minimapTableOW[sEntranceIconMapIndex];
|
||||
memcpy(play->interfaceCtx.mapSegment, GetResourceDataByName(textureName, false), GetResourceTexSizeByName(textureName, false));
|
||||
play->interfaceCtx.mapSegment[0] = GetResourceDataByName(minimapTableOW[sEntranceIconMapIndex], true);
|
||||
play->interfaceCtx.mapSegmentName[0] = minimapTableOW[sEntranceIconMapIndex];
|
||||
}
|
||||
|
||||
interfaceCtx->unk_258 = mapIndex;
|
||||
@@ -447,9 +447,8 @@ void Map_InitData(PlayState* play, s16 room) {
|
||||
//((gMapData->dgnMinimapTexIndexOffset[mapIndex] + room) * 0xFF0),
|
||||
//0xFF0, __FILE__, __LINE__);
|
||||
|
||||
const char* textureName = minimapTableDangeon[gMapData->dgnMinimapTexIndexOffset[mapIndex] + room];
|
||||
memcpy(play->interfaceCtx.mapSegment, GetResourceDataByName(textureName, false), GetResourceTexSizeByName(textureName, false));
|
||||
|
||||
play->interfaceCtx.mapSegment[0] = GetResourceDataByName(minimapTableDangeon[gMapData->dgnMinimapTexIndexOffset[mapIndex] + room], true);
|
||||
play->interfaceCtx.mapSegmentName[0] = minimapTableDangeon[gMapData->dgnMinimapTexIndexOffset[mapIndex] + room];
|
||||
R_COMPASS_OFFSET_X = gMapData->roomCompassOffsetX[mapIndex][room];
|
||||
R_COMPASS_OFFSET_Y = gMapData->roomCompassOffsetY[mapIndex][room];
|
||||
Map_SetFloorPalettesData(play, VREG(30));
|
||||
@@ -519,7 +518,8 @@ void Map_Init(PlayState* play) {
|
||||
interfaceCtx->unk_258 = -1;
|
||||
interfaceCtx->unk_25A = -1;
|
||||
|
||||
interfaceCtx->mapSegment = GAMESTATE_ALLOC_MC(&play->state, 0x1000);
|
||||
interfaceCtx->mapSegment = GAMESTATE_ALLOC_MC(&play->state, 2 * sizeof(char*));
|
||||
interfaceCtx->mapSegmentName = GAMESTATE_ALLOC_MC(&play->state, 2 * sizeof(char*));
|
||||
// "MAP texture initialization scene_data_ID=%d mapSegment=%x"
|
||||
osSyncPrintf("\n\n\nMAP テクスチャ初期化 scene_data_ID=%d\nmapSegment=%x\n\n", play->sceneNum,
|
||||
interfaceCtx->mapSegment, play);
|
||||
@@ -639,20 +639,20 @@ void Minimap_DrawCompassIcons(PlayState* play) {
|
||||
if (CVarGetInteger("gMinimapPosType", 0) == 1) {//Anchor Left
|
||||
if (CVarGetInteger("gMinimapUseMargins", 0) != 0) {X_Margins_Minimap = Left_MM_Margin;};
|
||||
Matrix_Translate(
|
||||
OTRGetDimensionFromLeftEdge((R_COMPASS_OFFSET_X + (X_Margins_Minimap*10) + tempX + (CVarGetInteger("gMinimapPosX", 0)*10)) / 10.0f),
|
||||
OTRGetDimensionFromLeftEdge((R_COMPASS_OFFSET_X + (X_Margins_Minimap*10) + tempX + (CVarGetInteger("gMinimapPosX", 0)*10)) / 10.0f),
|
||||
(R_COMPASS_OFFSET_Y + ((Y_Margins_Minimap*10)*-1) - tempZ + ((CVarGetInteger("gMinimapPosY", 0)*10)*-1)) / 10.0f, 0.0f, MTXMODE_NEW);
|
||||
} else if (CVarGetInteger("gMinimapPosType", 0) == 2) {//Anchor Right
|
||||
if (CVarGetInteger("gMinimapUseMargins", 0) != 0) {X_Margins_Minimap = Right_MM_Margin;};
|
||||
Matrix_Translate(
|
||||
OTRGetDimensionFromRightEdge((R_COMPASS_OFFSET_X + (X_Margins_Minimap*10) + tempX + (CVarGetInteger("gMinimapPosX", 0)*10)) / 10.0f),
|
||||
OTRGetDimensionFromRightEdge((R_COMPASS_OFFSET_X + (X_Margins_Minimap*10) + tempX + (CVarGetInteger("gMinimapPosX", 0)*10)) / 10.0f),
|
||||
(R_COMPASS_OFFSET_Y +((Y_Margins_Minimap*10)*-1) - tempZ + ((CVarGetInteger("gMinimapPosY", 0)*10)*-1)) / 10.0f, 0.0f, MTXMODE_NEW);
|
||||
} else if (CVarGetInteger("gMinimapPosType", 0) == 3) {//Anchor None
|
||||
Matrix_Translate(
|
||||
(R_COMPASS_OFFSET_X + tempX + (CVarGetInteger("gMinimapPosX", 0)*10) / 10.0f),
|
||||
(R_COMPASS_OFFSET_X + tempX + (CVarGetInteger("gMinimapPosX", 0)*10) / 10.0f),
|
||||
(R_COMPASS_OFFSET_Y + ((Y_Margins_Minimap*10)*-1) - tempZ + ((CVarGetInteger("gMinimapPosY", 0)*10)*-1)) / 10.0f, 0.0f, MTXMODE_NEW);
|
||||
} else if (CVarGetInteger("gMinimapPosType", 0) == 4) {//Hidden
|
||||
Matrix_Translate(
|
||||
(R_COMPASS_OFFSET_X+(9999*10) + tempX / 10.0f),
|
||||
(R_COMPASS_OFFSET_X+(9999*10) + tempX / 10.0f),
|
||||
(R_COMPASS_OFFSET_Y+(9999*10) - tempZ) / 10.0f, 0.0f, MTXMODE_NEW);
|
||||
}
|
||||
} else {
|
||||
@@ -677,20 +677,20 @@ void Minimap_DrawCompassIcons(PlayState* play) {
|
||||
if (CVarGetInteger("gMinimapPosType", 0) == 1) {//Anchor Left
|
||||
if (CVarGetInteger("gMinimapUseMargins", 0) != 0) {X_Margins_Minimap = Left_MM_Margin;};
|
||||
Matrix_Translate(
|
||||
OTRGetDimensionFromLeftEdge((R_COMPASS_OFFSET_X + (X_Margins_Minimap*10) + tempX + (CVarGetInteger("gMinimapPosX", 0)*10)) / 10.0f),
|
||||
OTRGetDimensionFromLeftEdge((R_COMPASS_OFFSET_X + (X_Margins_Minimap*10) + tempX + (CVarGetInteger("gMinimapPosX", 0)*10)) / 10.0f),
|
||||
(R_COMPASS_OFFSET_Y + ((Y_Margins_Minimap*10)*-1) - tempZ + ((CVarGetInteger("gMinimapPosY", 0)*10)*-1)) / 10.0f, 0.0f, MTXMODE_NEW);
|
||||
} else if (CVarGetInteger("gMinimapPosType", 0) == 2) {//Anchor Right
|
||||
if (CVarGetInteger("gMinimapUseMargins", 0) != 0) {X_Margins_Minimap = Right_MM_Margin;};
|
||||
Matrix_Translate(
|
||||
OTRGetDimensionFromRightEdge((R_COMPASS_OFFSET_X + (X_Margins_Minimap*10) + tempX + (CVarGetInteger("gMinimapPosX", 0)*10)) / 10.0f),
|
||||
OTRGetDimensionFromRightEdge((R_COMPASS_OFFSET_X + (X_Margins_Minimap*10) + tempX + (CVarGetInteger("gMinimapPosX", 0)*10)) / 10.0f),
|
||||
(R_COMPASS_OFFSET_Y +((Y_Margins_Minimap*10)*-1) - tempZ + ((CVarGetInteger("gMinimapPosY", 0)*10)*-1)) / 10.0f, 0.0f, MTXMODE_NEW);
|
||||
} else if (CVarGetInteger("gMinimapPosType", 0) == 3) {//Anchor None
|
||||
Matrix_Translate(
|
||||
(R_COMPASS_OFFSET_X + tempX + (CVarGetInteger("gMinimapPosX", 0)*10) / 10.0f),
|
||||
(R_COMPASS_OFFSET_X + tempX + (CVarGetInteger("gMinimapPosX", 0)*10) / 10.0f),
|
||||
(R_COMPASS_OFFSET_Y - tempZ + ((CVarGetInteger("gMinimapPosY", 0)*10)*-1)) / 10.0f, 0.0f, MTXMODE_NEW);
|
||||
} else if (CVarGetInteger("gMinimapPosType", 0) == 4) {//Hidden
|
||||
Matrix_Translate(
|
||||
(R_COMPASS_OFFSET_X+(9999*10) + tempX / 10.0f),
|
||||
(R_COMPASS_OFFSET_X+(9999*10) + tempX / 10.0f),
|
||||
(R_COMPASS_OFFSET_Y+(9999*10) - tempZ) / 10.0f, 0.0f, MTXMODE_NEW);
|
||||
}
|
||||
} else {
|
||||
@@ -756,8 +756,7 @@ void Minimap_Draw(PlayState* play) {
|
||||
if (CHECK_DUNGEON_ITEM(DUNGEON_MAP, mapIndex)) {
|
||||
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, minimapColor.r, minimapColor.g, minimapColor.b, interfaceCtx->minimapAlpha);
|
||||
|
||||
gSPInvalidateTexCache(OVERLAY_DISP++, interfaceCtx->mapSegment);
|
||||
gDPLoadTextureBlock_4b(OVERLAY_DISP++, interfaceCtx->mapSegment, G_IM_FMT_I, 96, 85, 0,
|
||||
gDPLoadTextureBlock_4b(OVERLAY_DISP++, interfaceCtx->mapSegmentName[0], G_IM_FMT_I, 96, 85, 0,
|
||||
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK,
|
||||
G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
|
||||
|
||||
@@ -767,7 +766,7 @@ void Minimap_Draw(PlayState* play) {
|
||||
dgnMiniMapY = R_DGN_MINIMAP_Y+CVarGetInteger("gMinimapPosY", 0)+Y_Margins_Minimap;
|
||||
if (CVarGetInteger("gMinimapPosType", 0) == 1) {//Anchor Left
|
||||
if (CVarGetInteger("gMinimapUseMargins", 0) != 0) {X_Margins_Minimap = Left_MM_Margin;};
|
||||
dgnMiniMapX = OTRGetDimensionFromLeftEdge(R_DGN_MINIMAP_X+CVarGetInteger("gMinimapPosX", 0)+X_Margins_Minimap);
|
||||
dgnMiniMapX = OTRGetDimensionFromLeftEdge(R_DGN_MINIMAP_X+CVarGetInteger("gMinimapPosX", 0)+X_Margins_Minimap);
|
||||
} else if (CVarGetInteger("gMinimapPosType", 0) == 2) {//Anchor Right
|
||||
if (CVarGetInteger("gMinimapUseMargins", 0) != 0) {X_Margins_Minimap = Right_MM_Margin;};
|
||||
dgnMiniMapX = OTRGetDimensionFromRightEdge(R_DGN_MINIMAP_X+CVarGetInteger("gMinimapPosX", 0)+X_Margins_Minimap);
|
||||
@@ -827,7 +826,7 @@ void Minimap_Draw(PlayState* play) {
|
||||
gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
|
||||
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, minimapColor.r, minimapColor.g, minimapColor.b, interfaceCtx->minimapAlpha);
|
||||
|
||||
gDPLoadTextureBlock_4b(OVERLAY_DISP++, interfaceCtx->mapSegment, G_IM_FMT_IA,
|
||||
gDPLoadTextureBlock_4b(OVERLAY_DISP++, interfaceCtx->mapSegmentName[0], G_IM_FMT_IA,
|
||||
gMapData->owMinimapWidth[mapIndex], gMapData->owMinimapHeight[mapIndex], 0,
|
||||
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK,
|
||||
G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
|
||||
@@ -897,7 +896,7 @@ void Minimap_Draw(PlayState* play) {
|
||||
//No idea why and how Original value work but this does actually fix them all.
|
||||
PosY = PosY+1024;
|
||||
}
|
||||
|
||||
|
||||
if (((gMapData->owEntranceFlag[sEntranceIconMapIndex] == 0xFFFF) ||
|
||||
((gMapData->owEntranceFlag[sEntranceIconMapIndex] != 0xFFFF) &&
|
||||
(gSaveContext.infTable[26] & gBitFlags[gMapData->owEntranceFlag[mapIndex]])
|
||||
@@ -912,9 +911,9 @@ void Minimap_Draw(PlayState* play) {
|
||||
}
|
||||
|
||||
s16 entranceX = OTRGetRectDimensionFromRightEdge(270 + X_Margins_Minimap);
|
||||
s16 entranceY = 154 + Y_Margins_Minimap;
|
||||
s16 entranceY = 154 + Y_Margins_Minimap;
|
||||
if (CVarGetInteger("gMinimapPosType", 0) != 0) {
|
||||
entranceY = 154 + Y_Margins_Minimap + CVarGetInteger("gMinimapPosY", 0);
|
||||
entranceY = 154 + Y_Margins_Minimap + CVarGetInteger("gMinimapPosY", 0);
|
||||
if (CVarGetInteger("gMinimapPosType", 0) == 1) {//Anchor Left
|
||||
if (CVarGetInteger("gMinimapUseMargins", 0) != 0) {X_Margins_Minimap = Left_MM_Margin;};
|
||||
entranceX = OTRGetRectDimensionFromLeftEdge(270 + X_Margins_Minimap + CVarGetInteger("gMinimapPosX", 0));
|
||||
@@ -932,15 +931,15 @@ void Minimap_Draw(PlayState* play) {
|
||||
gDPLoadTextureBlock(OVERLAY_DISP++, gMapDungeonEntranceIconTex, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8,
|
||||
8, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK,
|
||||
G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
|
||||
gSPWideTextureRectangle(OVERLAY_DISP++, entranceX << 2, entranceY << 2, (entranceX + 32) << 2, (entranceY + 8) << 2,
|
||||
gSPWideTextureRectangle(OVERLAY_DISP++, entranceX << 2, entranceY << 2, (entranceX + 32) << 2, (entranceY + 8) << 2,
|
||||
G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
|
||||
} else if ((play->sceneNum == SCENE_SPOT08) && CVarGetInteger("gAlwaysShowDungeonMinimapIcon", 0) != 0){
|
||||
|
||||
|
||||
gDPLoadTextureBlock(OVERLAY_DISP++, gMapDungeonEntranceIconTex, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8,
|
||||
8, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK,
|
||||
G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
|
||||
|
||||
gSPWideTextureRectangle(OVERLAY_DISP++, entranceX << 2, entranceY << 2, (entranceX + 32) << 2, (entranceY + 8) << 2,
|
||||
gSPWideTextureRectangle(OVERLAY_DISP++, entranceX << 2, entranceY << 2, (entranceX + 32) << 2, (entranceY + 8) << 2,
|
||||
G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
|
||||
}
|
||||
|
||||
|
||||
@@ -32,10 +32,10 @@ s16 sMessageHasSetSfx = false;
|
||||
|
||||
u16 sOcarinaSongBitFlags = 0; // ocarina bit flags
|
||||
|
||||
MessageTableEntry* sNesMessageEntryTablePtr;
|
||||
MessageTableEntry* sGerMessageEntryTablePtr;
|
||||
MessageTableEntry* sFraMessageEntryTablePtr;
|
||||
MessageTableEntry* sStaffMessageEntryTablePtr;
|
||||
MessageTableEntry* sNesMessageEntryTablePtr = NULL;
|
||||
MessageTableEntry* sGerMessageEntryTablePtr = NULL;
|
||||
MessageTableEntry* sFraMessageEntryTablePtr = NULL;
|
||||
MessageTableEntry* sStaffMessageEntryTablePtr = NULL;
|
||||
|
||||
char* _message_0xFFFC_nes;
|
||||
|
||||
@@ -562,7 +562,6 @@ void Message_DrawTextboxIcon(PlayState* play, Gfx** p, s16 x, s16 y) {
|
||||
*p = gfx;
|
||||
}
|
||||
|
||||
#define MESSAGE_SPACE_WIDTH 6
|
||||
f32 sFontWidths[144] = {
|
||||
8.0f, // ' '
|
||||
8.0f, // '!'
|
||||
@@ -865,7 +864,7 @@ void Message_DrawText(PlayState* play, Gfx** gfxP) {
|
||||
Message_SetTextColor(msgCtx, msgCtx->msgBufDecoded[++i] & 0xF);
|
||||
break;
|
||||
case ' ':
|
||||
msgCtx->textPosX += MESSAGE_SPACE_WIDTH;
|
||||
msgCtx->textPosX += CVarGetInteger("gTextSpacing", 6);
|
||||
break;
|
||||
case MESSAGE_BOX_BREAK:
|
||||
if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
|
||||
@@ -1131,7 +1130,7 @@ void Message_LoadItemIcon(PlayState* play, u16 itemId, s16 y) {
|
||||
R_TEXTBOX_ICON_YPOS = y + 6;
|
||||
R_TEXTBOX_ICON_SIZE = 32;
|
||||
memcpy((uintptr_t)msgCtx->textboxSegment + MESSAGE_STATIC_TEX_SIZE,
|
||||
GetResourceDataByName(gItemIcons[itemId], false), GetResourceTexSizeByName(gItemIcons[itemId], false));
|
||||
gItemIcons[itemId], strlen(gItemIcons[itemId]) + 1);
|
||||
// "Item 32-0"
|
||||
osSyncPrintf("アイテム32-0\n");
|
||||
} else {
|
||||
@@ -1139,7 +1138,7 @@ void Message_LoadItemIcon(PlayState* play, u16 itemId, s16 y) {
|
||||
R_TEXTBOX_ICON_YPOS = y + 10;
|
||||
R_TEXTBOX_ICON_SIZE = 24;
|
||||
memcpy((uintptr_t)msgCtx->textboxSegment + MESSAGE_STATIC_TEX_SIZE,
|
||||
GetResourceDataByName(gItemIcons[itemId], false), GetResourceTexSizeByName(gItemIcons[itemId], false));
|
||||
gItemIcons[itemId], strlen(gItemIcons[itemId]) + 1);
|
||||
// "Item 24"
|
||||
osSyncPrintf("アイテム24=%d (%d) {%d}\n", itemId, itemId - ITEM_KOKIRI_EMERALD, 84);
|
||||
}
|
||||
@@ -1525,10 +1524,8 @@ void Message_Decode(PlayState* play) {
|
||||
msgCtx->textboxBackgroundYOffsetIdx = (font->msgBuf[msgCtx->msgBufPos + 3] & 0xF0) >> 4;
|
||||
msgCtx->textboxBackgroundUnkArg = font->msgBuf[msgCtx->msgBufPos + 3] & 0xF;
|
||||
|
||||
memcpy((uintptr_t)msgCtx->textboxSegment + MESSAGE_STATIC_TEX_SIZE,
|
||||
GetResourceDataByName(gRedMessageXLeftTex, false), GetResourceTexSizeByName(gRedMessageXLeftTex, false));
|
||||
memcpy((uintptr_t)msgCtx->textboxSegment + MESSAGE_STATIC_TEX_SIZE + 0x900,
|
||||
GetResourceDataByName(gRedMessageXRightTex, false), GetResourceTexSizeByName(gRedMessageXRightTex, false));
|
||||
memcpy((uintptr_t)msgCtx->textboxSegment + MESSAGE_STATIC_TEX_SIZE, gRedMessageXLeftTex, strlen(gRedMessageXLeftTex) + 1);
|
||||
memcpy((uintptr_t)msgCtx->textboxSegment + MESSAGE_STATIC_TEX_SIZE + 0x900, gRedMessageXRightTex, strlen(gRedMessageXRightTex) + 1);
|
||||
|
||||
msgCtx->msgBufPos += 3;
|
||||
R_TEXTBOX_BG_YPOS = R_TEXTBOX_Y + 8;
|
||||
@@ -1674,7 +1671,7 @@ void Message_OpenText(PlayState* play, u16 textId) {
|
||||
osSyncPrintf("吹き出し種類=%d\n", msgCtx->textBoxType);
|
||||
if (textBoxType < TEXTBOX_TYPE_NONE_BOTTOM) {
|
||||
const char* textureName = msgStaticTbl[messageStaticIndices[textBoxType]];
|
||||
memcpy(msgCtx->textboxSegment, GetResourceDataByName(textureName, false), MESSAGE_STATIC_TEX_SIZE);
|
||||
memcpy(msgCtx->textboxSegment, textureName, strlen(textureName) + 1);
|
||||
if (textBoxType == TEXTBOX_TYPE_BLACK) {
|
||||
msgCtx->textboxColorRed = 0;
|
||||
msgCtx->textboxColorGreen = 0;
|
||||
|
||||
@@ -16,30 +16,9 @@
|
||||
#include "soh/Enhancements/game-interactor/GameInteractor.h"
|
||||
|
||||
|
||||
static uint16_t _doActionTexWidth, _doActionTexHeight = -1;
|
||||
static uint16_t DO_ACTION_TEX_WIDTH() {
|
||||
return 48;
|
||||
|
||||
// TODO: Figure out why Ship::Texture is not returning a valid width
|
||||
if (_doActionTexWidth == -1)
|
||||
_doActionTexWidth = GetResourceTexWidthByName(gCheckDoActionENGTex, false);
|
||||
return _doActionTexWidth;
|
||||
}
|
||||
static uint16_t DO_ACTION_TEX_HEIGHT() {
|
||||
return 16;
|
||||
|
||||
// TODO: Figure out why Ship::Texture is not returning a valid height
|
||||
if (_doActionTexHeight == -1)
|
||||
_doActionTexHeight = GetResourceTexHeightByName(gCheckDoActionENGTex, false);
|
||||
return _doActionTexHeight;
|
||||
}
|
||||
|
||||
static uint32_t _doActionTexSize = -1;
|
||||
static uint32_t DO_ACTION_TEX_SIZE() {
|
||||
if (_doActionTexSize == -1)
|
||||
_doActionTexSize = GetResourceTexSizeByName(gCheckDoActionENGTex, false);
|
||||
return _doActionTexSize;
|
||||
}
|
||||
#define DO_ACTION_TEX_WIDTH() 48
|
||||
#define DO_ACTION_TEX_HEIGHT() 16
|
||||
#define DO_ACTION_TEX_SIZE() ((DO_ACTION_TEX_WIDTH() * DO_ACTION_TEX_HEIGHT()) / 2)
|
||||
|
||||
// The button statuses include the A button when most things are only the equip item buttons
|
||||
// So, when indexing into it with a item button index, we need to adjust
|
||||
@@ -225,6 +204,8 @@ static const char* actionsTbl[] =
|
||||
gNum8DoActionENGTex,
|
||||
};
|
||||
|
||||
static const char gDoEmptyTexture[] = "__OTR__textures/virtual/gEmptyTexture";
|
||||
|
||||
// original name: "alpha_change"
|
||||
void Interface_ChangeAlpha(u16 alphaType) {
|
||||
if (alphaType != gSaveContext.unk_13EA) {
|
||||
@@ -2848,11 +2829,7 @@ bool Inventory_HatchPocketCucco(PlayState* play) {
|
||||
}
|
||||
|
||||
void func_80086D5C(s32* buf, u16 size) {
|
||||
u16 i;
|
||||
|
||||
//buf = GetResourceDataByName(buf, false);
|
||||
|
||||
for (i = 0; i < size; i++) {
|
||||
for (u16 i = 0; i < size; i++) {
|
||||
buf[i] = 0;
|
||||
}
|
||||
}
|
||||
@@ -2865,46 +2842,25 @@ void Interface_LoadActionLabel(InterfaceContext* interfaceCtx, u16 action, s16 l
|
||||
|
||||
char* doAction = actionsTbl[action];
|
||||
|
||||
char newName[512];
|
||||
static char newName[4][512];
|
||||
if (gSaveContext.language != LANGUAGE_ENG) {
|
||||
size_t length = strlen(doAction);
|
||||
strcpy(newName, doAction);
|
||||
strcpy(newName[loadOffset], doAction);
|
||||
if (gSaveContext.language == LANGUAGE_FRA) {
|
||||
newName[length - 6] = 'F';
|
||||
newName[length - 5] = 'R';
|
||||
newName[length - 4] = 'A';
|
||||
newName[loadOffset][length - 6] = 'F';
|
||||
newName[loadOffset][length - 5] = 'R';
|
||||
newName[loadOffset][length - 4] = 'A';
|
||||
} else if (gSaveContext.language == LANGUAGE_GER) {
|
||||
newName[length - 6] = 'G';
|
||||
newName[length - 5] = 'E';
|
||||
newName[length - 4] = 'R';
|
||||
newName[loadOffset][length - 6] = 'G';
|
||||
newName[loadOffset][length - 5] = 'E';
|
||||
newName[loadOffset][length - 4] = 'R';
|
||||
}
|
||||
doAction = newName;
|
||||
}
|
||||
|
||||
/*
|
||||
if (gSaveContext.language != LANGUAGE_ENG) {
|
||||
action += DO_ACTION_MAX;
|
||||
}
|
||||
|
||||
if (gSaveContext.language == LANGUAGE_FRA) {
|
||||
action += DO_ACTION_MAX;
|
||||
}*/
|
||||
|
||||
|
||||
if (action != DO_ACTION_NONE) {
|
||||
//osCreateMesgQueue(&interfaceCtx->loadQueue, &interfaceCtx->loadMsg, OS_MESG_BLOCK);
|
||||
memcpy(interfaceCtx->doActionSegment + (loadOffset * DO_ACTION_TEX_SIZE()), GetResourceDataByName(doAction, false),
|
||||
DO_ACTION_TEX_SIZE());
|
||||
//DmaMgr_SendRequest2(&interfaceCtx->dmaRequest_160,
|
||||
//interfaceCtx->doActionSegment + (loadOffset * DO_ACTION_TEX_SIZE),
|
||||
//(uintptr_t)_do_action_staticSegmentRomStart + (action * DO_ACTION_TEX_SIZE), DO_ACTION_TEX_SIZE,
|
||||
//0, &interfaceCtx->loadQueue, NULL, __FILE__, __LINE__);
|
||||
//osRecvMesg(&interfaceCtx->loadQueue, NULL, OS_MESG_BLOCK);
|
||||
} else {
|
||||
gSegments[7] = VIRTUAL_TO_PHYSICAL(interfaceCtx->doActionSegment);
|
||||
//func_80086D5C(SEGMENTED_TO_VIRTUAL(sDoActionTextures[loadOffset]), DO_ACTION_TEX_SIZE / 4);
|
||||
func_80086D5C(interfaceCtx->doActionSegment + (loadOffset * DO_ACTION_TEX_SIZE()), DO_ACTION_TEX_SIZE() / 4);
|
||||
doAction = newName[loadOffset];
|
||||
}
|
||||
|
||||
char* segment = interfaceCtx->doActionSegment[loadOffset];
|
||||
interfaceCtx->doActionSegment[loadOffset] = action != DO_ACTION_NONE ? doAction : gDoEmptyTexture;
|
||||
gSegments[7] = interfaceCtx->doActionSegment[loadOffset];
|
||||
}
|
||||
|
||||
void Interface_SetDoAction(PlayState* play, u16 action) {
|
||||
@@ -2950,7 +2906,7 @@ void Interface_LoadActionLabelB(PlayState* play, u16 action) {
|
||||
InterfaceContext* interfaceCtx = &play->interfaceCtx;
|
||||
|
||||
char* doAction = actionsTbl[action];
|
||||
char newName[512];
|
||||
static char newName[512];
|
||||
|
||||
if (gSaveContext.language != LANGUAGE_ENG) {
|
||||
size_t length = strlen(doAction);
|
||||
@@ -2967,24 +2923,10 @@ void Interface_LoadActionLabelB(PlayState* play, u16 action) {
|
||||
doAction = newName;
|
||||
}
|
||||
|
||||
/*if (gSaveContext.language != LANGUAGE_ENG) {
|
||||
action += DO_ACTION_MAX;
|
||||
}
|
||||
|
||||
if (gSaveContext.language == LANGUAGE_FRA) {
|
||||
action += DO_ACTION_MAX;
|
||||
}*/
|
||||
|
||||
interfaceCtx->unk_1FC = action;
|
||||
|
||||
|
||||
|
||||
// OTRTODO
|
||||
osCreateMesgQueue(&interfaceCtx->loadQueue, &interfaceCtx->loadMsg, OS_MESG_BLOCK);
|
||||
memcpy(interfaceCtx->doActionSegment + DO_ACTION_TEX_SIZE(), GetResourceDataByName(doAction, false), DO_ACTION_TEX_SIZE());
|
||||
//DmaMgr_SendRequest2(&interfaceCtx->dmaRequest_160, interfaceCtx->doActionSegment + DO_ACTION_TEX_SIZE,
|
||||
//(uintptr_t)_do_action_staticSegmentRomStart + (action * DO_ACTION_TEX_SIZE), DO_ACTION_TEX_SIZE, 0,
|
||||
//&interfaceCtx->loadQueue, NULL, __FILE__, __LINE__);
|
||||
|
||||
char* segment = interfaceCtx->doActionSegment[1];
|
||||
interfaceCtx->doActionSegment[1] = action != DO_ACTION_NONE ? doAction : gDoEmptyTexture;
|
||||
osRecvMesg(&interfaceCtx->loadQueue, NULL, OS_MESG_BLOCK);
|
||||
|
||||
interfaceCtx->unk_1FA = 1;
|
||||
@@ -4040,28 +3982,8 @@ void Interface_DrawItemButtons(PlayState* play) {
|
||||
gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 0);
|
||||
gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
|
||||
PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
|
||||
|
||||
//There is probably a more elegant way to do it.
|
||||
char* doAction = actionsTbl[3];
|
||||
char newName[512];
|
||||
if (gSaveContext.language != LANGUAGE_ENG) {
|
||||
size_t length = strlen(doAction);
|
||||
strcpy(newName, doAction);
|
||||
if (gSaveContext.language == LANGUAGE_FRA) {
|
||||
newName[length - 6] = 'F';
|
||||
newName[length - 5] = 'R';
|
||||
newName[length - 4] = 'A';
|
||||
} else if (gSaveContext.language == LANGUAGE_GER) {
|
||||
newName[length - 6] = 'G';
|
||||
newName[length - 5] = 'E';
|
||||
newName[length - 4] = 'R';
|
||||
}
|
||||
doAction = newName;
|
||||
}
|
||||
|
||||
memcpy(interfaceCtx->doActionSegment + DO_ACTION_TEX_SIZE() * 2, GetResourceDataByName(doAction, false), DO_ACTION_TEX_SIZE());
|
||||
|
||||
gDPLoadTextureBlock_4b(OVERLAY_DISP++, interfaceCtx->doActionSegment + DO_ACTION_TEX_SIZE() * 2, G_IM_FMT_IA,
|
||||
Interface_LoadActionLabel(interfaceCtx, 3, 2);
|
||||
gDPLoadTextureBlock_4b(OVERLAY_DISP++, interfaceCtx->doActionSegment[2], G_IM_FMT_IA,
|
||||
DO_ACTION_TEX_WIDTH(), DO_ACTION_TEX_HEIGHT(), 0, G_TX_NOMIRROR | G_TX_WRAP,
|
||||
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
|
||||
|
||||
@@ -4076,7 +3998,7 @@ void Interface_DrawItemButtons(PlayState* play) {
|
||||
gSPMatrix(OVERLAY_DISP++, MATRIX_NEWMTX(play->state.gfxCtx),
|
||||
G_MTX_MODELVIEW | G_MTX_LOAD);
|
||||
gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[4], 4, 0);
|
||||
Interface_DrawActionLabel(play->state.gfxCtx, interfaceCtx->doActionSegment + DO_ACTION_TEX_SIZE() * 2);
|
||||
Interface_DrawActionLabel(play->state.gfxCtx, interfaceCtx->doActionSegment[2]);
|
||||
gDPPipeSync(OVERLAY_DISP++);
|
||||
}
|
||||
}
|
||||
@@ -4900,10 +4822,6 @@ void Interface_Draw(PlayState* play) {
|
||||
|
||||
OPEN_DISPS(play->state.gfxCtx);
|
||||
|
||||
// Invalidate Do Action textures as they may have changed
|
||||
gSPInvalidateTexCache(OVERLAY_DISP++, interfaceCtx->doActionSegment);
|
||||
gSPInvalidateTexCache(OVERLAY_DISP++, interfaceCtx->doActionSegment + DO_ACTION_TEX_SIZE());
|
||||
|
||||
gSPSegment(OVERLAY_DISP++, 0x02, interfaceCtx->parameterSegment);
|
||||
gSPSegment(OVERLAY_DISP++, 0x07, interfaceCtx->doActionSegment);
|
||||
gSPSegment(OVERLAY_DISP++, 0x08, interfaceCtx->iconItemSegment);
|
||||
@@ -5211,7 +5129,7 @@ void Interface_Draw(PlayState* play) {
|
||||
PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
|
||||
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->bAlpha);
|
||||
|
||||
gDPLoadTextureBlock_4b(OVERLAY_DISP++, interfaceCtx->doActionSegment + DO_ACTION_TEX_SIZE(), G_IM_FMT_IA,
|
||||
gDPLoadTextureBlock_4b(OVERLAY_DISP++, interfaceCtx->doActionSegment[1], G_IM_FMT_IA,
|
||||
DO_ACTION_TEX_WIDTH(), DO_ACTION_TEX_HEIGHT(), 0, G_TX_NOMIRROR | G_TX_WRAP,
|
||||
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
|
||||
|
||||
@@ -5301,7 +5219,7 @@ void Interface_Draw(PlayState* play) {
|
||||
|
||||
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, dPadColor.r, dPadColor.g, dPadColor.b, dpadAlpha);
|
||||
if (fullUi) {
|
||||
gDPLoadTextureBlock(OVERLAY_DISP++, GetResourceDataByName("__OTR__textures/parameter_static/gDPad", false),
|
||||
gDPLoadTextureBlock(OVERLAY_DISP++, "__OTR__textures/parameter_static/gDPad",
|
||||
G_IM_FMT_IA, G_IM_SIZ_16b, 32, 32, 0, G_TX_NOMIRROR | G_TX_WRAP,
|
||||
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
|
||||
gSPWideTextureRectangle(OVERLAY_DISP++, DpadPosX << 2, DpadPosY << 2,
|
||||
@@ -5417,9 +5335,9 @@ void Interface_Draw(PlayState* play) {
|
||||
gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[4], 4, 0);
|
||||
|
||||
if ((interfaceCtx->unk_1EC < 2) || (interfaceCtx->unk_1EC == 3)) {
|
||||
Interface_DrawActionLabel(play->state.gfxCtx, interfaceCtx->doActionSegment);
|
||||
Interface_DrawActionLabel(play->state.gfxCtx, interfaceCtx->doActionSegment[0]);
|
||||
} else {
|
||||
Interface_DrawActionLabel(play->state.gfxCtx, interfaceCtx->doActionSegment + DO_ACTION_TEX_SIZE());
|
||||
Interface_DrawActionLabel(play->state.gfxCtx, interfaceCtx->doActionSegment[1]);
|
||||
}
|
||||
|
||||
gDPPipeSync(OVERLAY_DISP++);
|
||||
|
||||
@@ -682,6 +682,12 @@ void Play_Init(GameState* thisx) {
|
||||
DmaMgr_DmaRomToRam(0x03FEB000, D_8012D1F0, sizeof(D_801614D0));
|
||||
}
|
||||
#endif
|
||||
|
||||
if (CVarGetInteger("gIvanCoopModeEnabled", 0)) {
|
||||
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_PARTNER, GET_PLAYER(play)->actor.world.pos.x,
|
||||
GET_PLAYER(play)->actor.world.pos.y + Player_GetHeight(GET_PLAYER(play)) + 5.0f,
|
||||
GET_PLAYER(play)->actor.world.pos.z, 0, 0, 0, 1, true);
|
||||
}
|
||||
}
|
||||
|
||||
void Play_Update(PlayState* play) {
|
||||
|
||||
@@ -330,6 +330,12 @@ void Player_SetBootData(PlayState* play, Player* this) {
|
||||
}
|
||||
}
|
||||
|
||||
// Custom method used to determine if we're using a custom model for link
|
||||
uint8_t Player_IsCustomLinkModel() {
|
||||
return (LINK_IS_ADULT && GetResourceIsCustomByName(gLinkAdultSkel, true)) ||
|
||||
(LINK_IS_CHILD && GetResourceIsCustomByName(gLinkChildSkel, true));
|
||||
}
|
||||
|
||||
s32 Player_InBlockingCsMode(PlayState* play, Player* this) {
|
||||
return (this->stateFlags1 & 0x20000080) || (this->csMode != 0) || (play->sceneLoadFlag == 0x14) ||
|
||||
(this->stateFlags1 & 1) || (this->stateFlags3 & 0x80) ||
|
||||
@@ -788,6 +794,11 @@ void func_8008F470(PlayState* play, void** skeleton, Vec3s* jointTable, s32 dLis
|
||||
|
||||
gDPSetEnvColor(POLY_OPA_DISP++, color->r, color->g, color->b, 0);
|
||||
|
||||
// If we have a custom link model, always use the most detailed LOD
|
||||
if (Player_IsCustomLinkModel()) {
|
||||
lod = 0;
|
||||
}
|
||||
|
||||
sDListsLodOffset = lod * 2;
|
||||
|
||||
SkelAnime_DrawFlexLod(play, skeleton, jointTable, dListCount, overrideLimbDraw, postLimbDraw, data, lod);
|
||||
@@ -1024,7 +1035,8 @@ s32 func_8008FCC8(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s
|
||||
s32 func_80090014(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, void* thisx) {
|
||||
Player* this = (Player*)thisx;
|
||||
|
||||
if (!func_8008FCC8(play, limbIndex, dList, pos, rot, thisx)) {
|
||||
if (!func_8008FCC8(play, limbIndex, dList, pos, rot, thisx))
|
||||
{
|
||||
if (limbIndex == PLAYER_LIMB_L_HAND) {
|
||||
Gfx** dLists = this->leftHandDLists;
|
||||
|
||||
@@ -1072,7 +1084,12 @@ s32 func_80090014(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s
|
||||
|
||||
|
||||
} else if (limbIndex == PLAYER_LIMB_WAIST) {
|
||||
*dList = ResourceMgr_LoadGfxByName(this->waistDLists[sDListsLodOffset]);
|
||||
|
||||
if (!Player_IsCustomLinkModel()) {
|
||||
*dList = ResourceMgr_LoadGfxByName(
|
||||
this->waistDLists[sDListsLodOffset]); // NOTE: This needs to be disabled when using custom
|
||||
// characters - they're not going to have LODs anyways...
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1678,6 +1695,10 @@ s32 func_80091880(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s
|
||||
}
|
||||
} else if (limbIndex == PLAYER_LIMB_WAIST) {
|
||||
type = gPlayerModelTypes[modelGroup][4];
|
||||
|
||||
if (Player_IsCustomLinkModel()) {
|
||||
return 0;
|
||||
}
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
#ifdef WIN32
|
||||
#include <vcruntime_string.h>
|
||||
#endif
|
||||
|
||||
#include "global.h"
|
||||
#include "vt.h"
|
||||
#include "soh/Enhancements/randomizer/randomizer_entrance.h"
|
||||
@@ -222,42 +226,29 @@ void func_80095D04(PlayState* play, Room* room, u32 flags) {
|
||||
|
||||
s32 swapAndConvertJPEG(void* data) {
|
||||
OSTime time;
|
||||
if (BE32SWAP(*(u32*)data) == JPEG_MARKER) {
|
||||
size_t size = 320 * 240 * 2;
|
||||
|
||||
if (BE32SWAP(*(u32*)data) == JPEG_MARKER)
|
||||
{
|
||||
char* decodedJpeg = ResourceMgr_LoadJPEG(data, 320 * 240 * 2);
|
||||
//char* decodedJpeg = ResourceMgr_LoadJPEG(data, 480 * 240 * 2);
|
||||
char *decodedJpeg = ResourceMgr_LoadJPEG(data, size);
|
||||
|
||||
osSyncPrintf("JPEGデータを展開します\n"); // "Expanding jpeg data"
|
||||
osSyncPrintf("JPEGデータアドレス %08x\n", data); // "Jpeg data address %08x"
|
||||
// "Work buffer address (Z buffer) %08x"
|
||||
osSyncPrintf("ワークバッファアドレス(Zバッファ)%08x\n", gZBuffer);
|
||||
osSyncPrintf("Expanding jpeg data\n");
|
||||
osSyncPrintf("Work buffer address (Z buffer) %08x\n", gZBuffer);
|
||||
|
||||
time = osGetTime();
|
||||
|
||||
//if (!Jpeg_Decode(data, gZBuffer, gGfxSPTaskOutputBuffer, sizeof(gGfxSPTaskOutputBuffer)))
|
||||
if (1)
|
||||
{
|
||||
memcpy(data, decodedJpeg, 320 * 240 * 2);
|
||||
//memcpy(data, decodedJpeg, 480 * 240 * 2);
|
||||
time = osGetTime() - time;
|
||||
memcpy(data, decodedJpeg, size);
|
||||
time = osGetTime() - time;
|
||||
|
||||
// "Success... I think. time = %6.3f ms"
|
||||
osSyncPrintf("成功…だと思う。 time = %6.3f ms \n", OS_CYCLES_TO_USEC(time) / 1000.0f);
|
||||
// "Writing back to original address from work buffer."
|
||||
osSyncPrintf("ワークバッファから元のアドレスに書き戻します。\n");
|
||||
// "If the original buffer size isn't at least 150kb, it will be out of control."
|
||||
osSyncPrintf("元のバッファのサイズが150キロバイト無いと暴走するでしょう。\n");
|
||||
|
||||
//bcopy(gZBuffer, data, sizeof(gZBuffer));
|
||||
} else {
|
||||
osSyncPrintf("失敗!なんで〜\n"); // "Failure! Why is it 〜"
|
||||
}
|
||||
osSyncPrintf("Success... I think. time = %6.3f ms", OS_CYCLES_TO_USEC(time) / 1000.0f);
|
||||
osSyncPrintf("Writing back to original address from work buffer.");
|
||||
osSyncPrintf("If the original buffer size isn't at least 150kb, it will be out of control.");
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void func_8009638C(Gfx** displayList, void* source, void* tlut, u16 width, u16 height, u8 fmt, u8 siz, u16 mode0,
|
||||
u16 tlutCount, f32 frameX, f32 frameY) {
|
||||
Gfx* displayListHead;
|
||||
@@ -265,7 +256,6 @@ void func_8009638C(Gfx** displayList, void* source, void* tlut, u16 width, u16 h
|
||||
s32 temp;
|
||||
|
||||
displayListHead = *displayList;
|
||||
swapAndConvertJPEG(SEGMENTED_TO_VIRTUAL(source));
|
||||
|
||||
bg = (uObjBg*)(displayListHead + 1);
|
||||
gSPBranchList(displayListHead, (u8*)bg + sizeof(uObjBg));
|
||||
@@ -413,7 +403,7 @@ BgImage* func_80096A74(PolygonType1* polygon1, PlayState* play) {
|
||||
// camera (such as din's fire) on scenes with prerendered backgrounds
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
// jfifid
|
||||
camId2 = func_80041C10(&play->colCtx, camId, BGCHECK_SCENE)[2].y;
|
||||
if (camId2 >= 0) {
|
||||
|
||||
@@ -1077,7 +1077,7 @@ void SkelAnime_InitLink(PlayState* play, SkelAnime* skelAnime, FlexSkeletonHeade
|
||||
LinkAnimationHeader* animation, s32 flags, Vec3s* jointTable, Vec3s* morphTable,
|
||||
s32 limbBufCount) {
|
||||
if (ResourceMgr_OTRSigCheck(skeletonHeaderSeg) != 0)
|
||||
skeletonHeaderSeg = ResourceMgr_LoadSkeletonByName(skeletonHeaderSeg);
|
||||
skeletonHeaderSeg = ResourceMgr_LoadSkeletonByName(skeletonHeaderSeg, skelAnime);
|
||||
|
||||
FlexSkeletonHeader* skeletonHeader = SEGMENTED_TO_VIRTUAL(skeletonHeaderSeg);
|
||||
s32 headerJointCount = skeletonHeader->sh.limbCount;
|
||||
@@ -1429,7 +1429,7 @@ s32 LinkAnimation_OnFrame(SkelAnime* skelAnime, f32 frame) {
|
||||
s32 SkelAnime_Init(PlayState* play, SkelAnime* skelAnime, SkeletonHeader* skeletonHeaderSeg,
|
||||
AnimationHeader* animation, Vec3s* jointTable, Vec3s* morphTable, s32 limbCount) {
|
||||
if (ResourceMgr_OTRSigCheck(skeletonHeaderSeg))
|
||||
skeletonHeaderSeg = ResourceMgr_LoadSkeletonByName(skeletonHeaderSeg);
|
||||
skeletonHeaderSeg = ResourceMgr_LoadSkeletonByName(skeletonHeaderSeg, skelAnime);
|
||||
|
||||
SkeletonHeader* skeletonHeader = SEGMENTED_TO_VIRTUAL(skeletonHeaderSeg);
|
||||
|
||||
@@ -1462,7 +1462,7 @@ s32 SkelAnime_Init(PlayState* play, SkelAnime* skelAnime, SkeletonHeader* skelet
|
||||
s32 SkelAnime_InitFlex(PlayState* play, SkelAnime* skelAnime, FlexSkeletonHeader* skeletonHeaderSeg,
|
||||
AnimationHeader* animation, Vec3s* jointTable, Vec3s* morphTable, s32 limbCount) {
|
||||
if (ResourceMgr_OTRSigCheck(skeletonHeaderSeg) != 0)
|
||||
skeletonHeaderSeg = ResourceMgr_LoadSkeletonByName(skeletonHeaderSeg);
|
||||
skeletonHeaderSeg = ResourceMgr_LoadSkeletonByName(skeletonHeaderSeg, skelAnime);
|
||||
|
||||
FlexSkeletonHeader* skeletonHeader = SEGMENTED_TO_VIRTUAL(skeletonHeaderSeg);
|
||||
|
||||
@@ -1921,6 +1921,8 @@ void SkelAnime_Free(SkelAnime* skelAnime, PlayState* play) {
|
||||
} else {
|
||||
osSyncPrintf("morf_joint あきまへん!!\n"); // "morf_joint is freed !!"
|
||||
}
|
||||
|
||||
ResourceMgr_UnregisterSkeleton(skelAnime);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -38,7 +38,7 @@ void Skin_InitAnimatedLimb(PlayState* play, Skin* skin, s32 limbIndex) {
|
||||
*/
|
||||
void Skin_Init(PlayState* play, Skin* skin, SkeletonHeader* skeletonHeader, AnimationHeader* animationHeader) {
|
||||
if (ResourceMgr_OTRSigCheck(skeletonHeader))
|
||||
skeletonHeader = ResourceMgr_LoadSkeletonByName(skeletonHeader);
|
||||
skeletonHeader = ResourceMgr_LoadSkeletonByName(skeletonHeader, NULL);
|
||||
|
||||
s32 limbCount;
|
||||
s32 i;
|
||||
|
||||
Reference in New Issue
Block a user