// // Generated By: dol2asm // Translation Unit: J2DScreen // #include "JSystem/J2DGraph/J2DScreen.h" #include "JSystem/JGeometry.h" #include "dol2asm.h" #include "dolphin/types.h" #include "JSystem/JSupport/JSUMemoryStream.h" #include "JSystem/J2DGraph/J2DTextBoxEx.h" #include "JSystem/J2DGraph/J2DWindowEx.h" #include "JSystem/J2DGraph/J2DPictureEx.h" #include "JSystem/J2DGraph/J2DOrthoGraph.h" #include "JSystem/J2DGraph/J2DMaterialFactory.h" // // Forward References: // extern "C" void __ct__9J2DScreenFv(); extern "C" void __dt__9J2DScreenFv(); extern "C" void clean__9J2DScreenFv(); extern "C" void setPriority__9J2DScreenFPCcUlP10JKRArchive(); extern "C" void setPriority__9J2DScreenFP20JSURandomInputStreamUlP10JKRArchive(); extern "C" void private_set__9J2DScreenFP20JSURandomInputStreamUlP10JKRArchive(); extern "C" void checkSignature__9J2DScreenFP20JSURandomInputStream(); extern "C" void getScreenInformation__9J2DScreenFP20JSURandomInputStream(); extern "C" void makeHierarchyPanes__9J2DScreenFP7J2DPaneP20JSURandomInputStreamUlP10JKRArchive(); extern "C" void createPane__9J2DScreenFRC18J2DScrnBlockHeaderP20JSURandomInputStreamP7J2DPaneUlP10JKRArchive(); extern "C" void draw__9J2DScreenFffPC14J2DGrafContext(); extern "C" void search__9J2DScreenFUx(); extern "C" void searchUserInfo__9J2DScreenFUx(); extern "C" void drawSelf__9J2DScreenFffPA3_A4_f(); extern "C" void getResReference__9J2DScreenFP20JSURandomInputStreamUl(); extern "C" void createMaterial__9J2DScreenFP20JSURandomInputStreamUlP10JKRArchive(); extern "C" void isUsed__9J2DScreenFPC7ResTIMG(); extern "C" void isUsed__9J2DScreenFPC7ResFONT(); extern "C" void getNameResource__9J2DScreenFPCc(); extern "C" void animation__9J2DScreenFv(); extern "C" void setAnimation__9J2DScreenFP11J2DAnmColor(); extern "C" void setAnimation__9J2DScreenFP19J2DAnmTextureSRTKey(); extern "C" void setAnimation__9J2DScreenFP16J2DAnmTexPattern(); extern "C" void setAnimation__9J2DScreenFP15J2DAnmTevRegKey(); extern "C" void setAnimation__9J2DScreenFP14J2DAnmVtxColor(); extern "C" void setAnimation__9J2DScreenFP20J2DAnmVisibilityFull(); extern "C" void createPane__9J2DScreenFRC18J2DScrnBlockHeaderP20JSURandomInputStreamP7J2DPaneUl(); extern "C" s32 getTypeID__9J2DScreenCFv(); extern "C" void calcMtx__9J2DScreenFv(); extern "C" void setAnimation__9J2DScreenFP10J2DAnmBase(); extern "C" void setAnimationVF__9J2DScreenFP20J2DAnmVisibilityFull(); extern "C" void setAnimationVC__9J2DScreenFP14J2DAnmVtxColor(); extern "C" u8 mDataManage__9J2DScreen[4 + 4 /* padding */]; // // External References: // extern "C" void setAlpha__7J2DPaneFUc(); extern "C" void clearAnmTransform__9J2DScreenFv(); extern "C" void makeMatrix__7J2DPaneFff(); extern "C" void setAnimation__9J2DScreenFP15J2DAnmTransform(); extern "C" void* __nw__FUl(); extern "C" void* __nwa__FUl(); extern "C" void* __nwa__FUli(); extern "C" void __dl__FPv(); extern "C" void __dla__FPv(); extern "C" void getGlbResource__13JKRFileLoaderFPCcP13JKRFileLoader(); extern "C" void __dt__14JSUInputStreamFv(); extern "C" void read__14JSUInputStreamFPvl(); extern "C" void peek__20JSURandomInputStreamFPvl(); extern "C" void seek__20JSURandomInputStreamFl17JSUStreamSeekFrom(); extern "C" void setBuffer__20JSUMemoryInputStreamFPCvl(); extern "C" void __ct__10JUTNameTabFPC7ResNTAB(); extern "C" void __ct__13J2DOrthoGraphFffffff(); extern "C" void setPort__13J2DOrthoGraphFv(); extern "C" void __ct__11J2DMaterialFv(); extern "C" void __dt__11J2DMaterialFv(); extern "C" void setAnimation__11J2DMaterialFP11J2DAnmColor(); extern "C" void setAnimation__11J2DMaterialFP19J2DAnmTextureSRTKey(); extern "C" void setAnimation__11J2DMaterialFP16J2DAnmTexPattern(); extern "C" void setAnimation__11J2DMaterialFP15J2DAnmTevRegKey(); extern "C" void animation__11J2DMaterialFv(); extern "C" void __ct__18J2DMaterialFactoryFRC16J2DMaterialBlock(); extern "C" void create__18J2DMaterialFactoryCFP11J2DMaterialiUlP15J2DResReferenceP15J2DResReferenceP10JKRArchive(); extern "C" void func_802F5D40(); extern "C" void __ct__7J2DPaneFP7J2DPaneP20JSURandomInputStreamUc(); extern "C" void __dt__7J2DPaneFv(); extern "C" void draw__7J2DPaneFffPC14J2DGrafContextbb(); extern "C" void func_802F6D18(); extern "C" void move__7J2DPaneFff(); extern "C" void add__7J2DPaneFff(); extern "C" void resize__7J2DPaneFff(); extern "C" void search__7J2DPaneFUx(); extern "C" void searchUserInfo__7J2DPaneFUx(); extern "C" void isUsed__7J2DPaneFPC7ResTIMG(); extern "C" void isUsed__7J2DPaneFPC7ResFONT(); extern "C" void makeMatrix__7J2DPaneFffff(); extern "C" void setCullBack__7J2DPaneF11_GXCullMode(); extern "C" void setAnimation__7J2DPaneFP10J2DAnmBase(); extern "C" void animationTransform__7J2DPaneFPC15J2DAnmTransform(); extern "C" void setVisibileAnimation__7J2DPaneFP20J2DAnmVisibilityFull(); extern "C" void setVtxColorAnimation__7J2DPaneFP14J2DAnmVtxColor(); extern "C" void animationPane__7J2DPaneFPC15J2DAnmTransform(); extern "C" void rewriteAlpha__7J2DPaneFv(); extern "C" void setCullBack__7J2DPaneFb(); extern "C" void setConnectParent__7J2DPaneFb(); extern "C" void update__7J2DPaneFv(); extern "C" void drawSelf__7J2DPaneFff(); extern "C" void __ct__9J2DWindowFP7J2DPaneP20JSURandomInputStreamP10JKRArchive(); extern "C" void __ct__9J2DWindowFP7J2DPaneP20JSURandomInputStreamP11J2DMaterial(); extern "C" void __ct__10J2DPictureFP7J2DPaneP20JSURandomInputStreamP10JKRArchive(); extern "C" void __ct__10J2DPictureFP7J2DPaneP20JSURandomInputStreamP11J2DMaterial(); extern "C" void __ct__10J2DTextBoxFP7J2DPaneP20JSURandomInputStreamP10JKRArchive(); extern "C" void __ct__10J2DTextBoxFP7J2DPaneP20JSURandomInputStreamUlP11J2DMaterial(); extern "C" void __ct__11J2DWindowExFP7J2DPaneP20JSURandomInputStreamUlP11J2DMaterial(); extern "C" void __ct__12J2DPictureExFP7J2DPaneP20JSURandomInputStreamUlP11J2DMaterial(); extern "C" void __ct__12J2DTextBoxExFP7J2DPaneP20JSURandomInputStreamUlP11J2DMaterial(); extern "C" void get__13J2DDataManageFPCc(); extern "C" void __destroy_new_array(); extern "C" void __construct_new_array(); extern "C" void _savegpr_25(); extern "C" void _savegpr_26(); extern "C" void _savegpr_27(); extern "C" void _savegpr_28(); extern "C" void _restgpr_25(); extern "C" void _restgpr_26(); extern "C" void _restgpr_27(); extern "C" void _restgpr_28(); extern "C" extern void* __vt__10JSUIosBase[3]; extern "C" extern void* __vt__20JSURandomInputStream[9]; extern "C" extern void* __vt__14JSUInputStream[6 + 1 /* padding */]; extern "C" extern void* __vt__20JSUMemoryInputStream[9 + 1 /* padding */]; extern "C" extern void* __vt__14J2DGrafContext[10]; extern "C" extern void* __vt__13J2DOrthoGraph[10]; // // Declarations: // /* ############################################################################################## */ /* 803CD068-803CD108 02A188 009C+04 2/2 0/0 0/0 .data __vt__9J2DScreen */ SECTION_DATA extern void* __vt__9J2DScreen[39 + 1 /* padding */] = { (void*)NULL /* RTTI */, (void*)NULL, (void*)__dt__9J2DScreenFv, (void*)getTypeID__9J2DScreenCFv, (void*)move__7J2DPaneFff, (void*)add__7J2DPaneFff, (void*)resize__7J2DPaneFff, (void*)setCullBack__7J2DPaneFb, (void*)setCullBack__7J2DPaneF11_GXCullMode, (void*)setAlpha__7J2DPaneFUc, (void*)setConnectParent__7J2DPaneFb, (void*)calcMtx__9J2DScreenFv, (void*)update__7J2DPaneFv, (void*)drawSelf__7J2DPaneFff, (void*)drawSelf__9J2DScreenFffPA3_A4_f, (void*)search__9J2DScreenFUx, (void*)searchUserInfo__9J2DScreenFUx, (void*)makeMatrix__7J2DPaneFff, (void*)makeMatrix__7J2DPaneFffff, (void*)isUsed__9J2DScreenFPC7ResTIMG, (void*)isUsed__9J2DScreenFPC7ResFONT, (void*)clearAnmTransform__9J2DScreenFv, (void*)rewriteAlpha__7J2DPaneFv, (void*)setAnimation__9J2DScreenFP10J2DAnmBase, (void*)setAnimation__9J2DScreenFP15J2DAnmTransform, (void*)setAnimation__9J2DScreenFP11J2DAnmColor, (void*)setAnimation__9J2DScreenFP16J2DAnmTexPattern, (void*)setAnimation__9J2DScreenFP19J2DAnmTextureSRTKey, (void*)setAnimation__9J2DScreenFP15J2DAnmTevRegKey, (void*)setAnimation__9J2DScreenFP20J2DAnmVisibilityFull, (void*)setAnimation__9J2DScreenFP14J2DAnmVtxColor, (void*)animationTransform__7J2DPaneFPC15J2DAnmTransform, (void*)setVisibileAnimation__7J2DPaneFP20J2DAnmVisibilityFull, (void*)setAnimationVF__9J2DScreenFP20J2DAnmVisibilityFull, (void*)setVtxColorAnimation__7J2DPaneFP14J2DAnmVtxColor, (void*)setAnimationVC__9J2DScreenFP14J2DAnmVtxColor, (void*)animationPane__7J2DPaneFPC15J2DAnmTransform, (void*)createPane__9J2DScreenFRC18J2DScrnBlockHeaderP20JSURandomInputStreamP7J2DPaneUl, (void*) createPane__9J2DScreenFRC18J2DScrnBlockHeaderP20JSURandomInputStreamP7J2DPaneUlP10JKRArchive, /* padding */ NULL, }; /* 80456220-80456224 004820 0004+00 4/4 0/0 0/0 .sdata2 @1561 */ SECTION_SDATA2 static u8 lit_1561[4] = { 0x00, 0x00, 0x00, 0x00, }; /* 80456224-80456228 004824 0004+00 2/2 0/0 0/0 .sdata2 @1562 */ SECTION_SDATA2 static f32 lit_1562 = 640.0f; /* 80456228-80456230 004828 0004+04 2/2 0/0 0/0 .sdata2 @1563 */ SECTION_SDATA2 static f32 lit_1563[1 + 1 /* padding */] = { 480.0f, /* padding */ 0.0f, }; /* 802F8498-802F8540 2F2DD8 00A8+00 0/0 59/59 4/4 .text __ct__9J2DScreenFv */ // almost #ifdef NONMATCHING J2DScreen::J2DScreen() : J2DPane(NULL, true, 'root', JGeometry::TBox2(0.0f, 0.0f, 0.0f, 0.0f)), mColor() { _4 = -1; mScissor = false; mMaterialNum = 0; mMaterials = NULL; mTexRes = NULL; mFontRes = NULL; mNameTable = NULL; } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm J2DScreen::J2DScreen() { nofralloc #include "asm/JSystem/J2DGraph/J2DScreen/__ct__9J2DScreenFv.s" } #pragma pop #endif /* 802F8540-802F85A8 2F2E80 0068+00 1/0 0/0 0/0 .text __dt__9J2DScreenFv */ J2DScreen::~J2DScreen() { clean(); } /* 802F85A8-802F8648 2F2EE8 00A0+00 3/3 0/0 0/0 .text clean__9J2DScreenFv */ void J2DScreen::clean() { delete[] mMaterials; mMaterialNum = 0; mMaterials = NULL; delete[] mTexRes; mTexRes = NULL; delete[] mFontRes; mFontRes = NULL; if (mNameTable != NULL) { delete[] mNameTable->getResNameTable(); delete mNameTable; mNameTable = NULL; } } /* 802F8648-802F8748 2F2F88 0100+00 0/0 58/58 4/4 .text setPriority__9J2DScreenFPCcUlP10JKRArchive */ #ifdef NONMATCHING bool J2DScreen::setPriority(char const* resName, u32 param_1, JKRArchive* archive) { if (archive == NULL) { return false; } void* res = JKRFileLoader::getGlbResource(resName, archive); if (res != NULL) { u32 size = archive->getExpandedResSize(res); JSUMemoryInputStream stream(res, size); return setPriority(&stream, param_1, archive); } return false; } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm bool J2DScreen::setPriority(char const* param_0, u32 param_1, JKRArchive* param_2) { nofralloc #include "asm/JSystem/J2DGraph/J2DScreen/setPriority__9J2DScreenFPCcUlP10JKRArchive.s" } #pragma pop #endif /* 802F8748-802F8778 2F3088 0030+00 1/1 1/1 0/0 .text * setPriority__9J2DScreenFP20JSURandomInputStreamUlP10JKRArchive */ bool J2DScreen::setPriority(JSURandomInputStream* stream, u32 param_1, JKRArchive* archive) { if (archive == NULL) { return false; } else { return private_set(stream, param_1, archive); } } /* 802F8778-802F8834 2F30B8 00BC+00 1/1 0/0 0/0 .text * private_set__9J2DScreenFP20JSURandomInputStreamUlP10JKRArchive */ bool J2DScreen::private_set(JSURandomInputStream* stream, u32 param_1, JKRArchive* archive) { if (!checkSignature(stream)) { return false; } if (!getScreenInformation(stream)) { return false; } bool make_end = makeHierarchyPanes(this, stream, param_1, archive) != 2; if (!(param_1 & 0x1F0000)) { clean(); } if (make_end) { return stream->isGood(); } return false; } /* 802F8834-802F8894 2F3174 0060+00 1/1 0/0 0/0 .text * checkSignature__9J2DScreenFP20JSURandomInputStream */ bool J2DScreen::checkSignature(JSURandomInputStream* stream) { J2DScrnHeader header; stream->read(&header, 32); if (header.mTag != 'SCRN' || (header.mType != 'blo1' && header.mType != 'blo2')) { return false; } else { return true; } } /* 802F8894-802F8990 2F31D4 00FC+00 1/1 0/0 0/0 .text * getScreenInformation__9J2DScreenFP20JSURandomInputStream */ bool J2DScreen::getScreenInformation(JSURandomInputStream* stream) { J2DScrnInfoHeader info; stream->read(&info, sizeof(J2DScrnInfoHeader)); if (info.mTag != 'INF1') { return false; } f32 tmp_0 = FLOAT_LABEL(lit_1561); JGeometry::TBox2 dimensions(tmp_0, tmp_0, info.mWidth, info.mHeight); place(dimensions); JUtility::TColor color(info.mColor); mColor = color; if (info.mSize > 0x10) { stream->skip(info.mSize - 0x10); } return true; } /* 802F8990-802F8B98 2F32D0 0208+00 1/1 0/0 0/0 .text * makeHierarchyPanes__9J2DScreenFP7J2DPaneP20JSURandomInputStreamUlP10JKRArchive */ // goto can probably be replaced s32 J2DScreen::makeHierarchyPanes(J2DPane* basePane, JSURandomInputStream* stream, u32 param_2, JKRArchive* archive) { J2DScrnBlockHeader header; J2DPane* next_pane = basePane; do { loop: stream->peek(&header, sizeof(J2DScrnBlockHeader)); switch (header.mTag) { case 'EXT1': stream->seek(header.mSize, JSUStreamSeekFrom_CUR); return 1; case 'BGN1': stream->seek(header.mSize, JSUStreamSeekFrom_CUR); int ret = makeHierarchyPanes(next_pane, stream, param_2, archive); if (ret == 0) { goto loop; } return ret; case 'END1': stream->seek(header.mSize, JSUStreamSeekFrom_CUR); return 0; case 'TEX1': J2DResReference* texRes = getResReference(stream, param_2); mTexRes = texRes; if (texRes != NULL) { goto loop; } return 2; case 'FNT1': J2DResReference* fntRes = getResReference(stream, param_2); mFontRes = fntRes; if (fntRes != NULL) { goto loop; } return 2; case 'MAT1': if (createMaterial(stream, param_2, archive)) { goto loop; } return 2; } if (archive == NULL) { next_pane = createPane(header, stream, basePane, param_2); } else { next_pane = createPane(header, stream, basePane, param_2, archive); } } while (next_pane != NULL); return 2; } /* 802F8B98-802F8ED4 2F34D8 033C+00 1/0 0/0 0/0 .text * createPane__9J2DScreenFRC18J2DScrnBlockHeaderP20JSURandomInputStreamP7J2DPaneUlP10JKRArchive */ J2DPane* J2DScreen::createPane(J2DScrnBlockHeader const& header, JSURandomInputStream* stream, J2DPane* basePane, u32 param_3, JKRArchive* archive) { J2DPane* newPane; switch (header.mTag) { case 'PAN1': newPane = new J2DPane(basePane, stream, 0); break; case 'WIN1': newPane = new J2DWindow(basePane, stream, archive); break; case 'PIC1': newPane = new J2DPicture(basePane, stream, archive); break; case 'TBX1': newPane = new J2DTextBox(basePane, stream, archive); break; case 'PAN2': newPane = new J2DPane(basePane, stream, 1); break; case 'WIN2': if (param_3 & 0x1F0000) { newPane = new J2DWindowEx(basePane, stream, param_3, mMaterials); break; } newPane = new J2DWindow(basePane, stream, mMaterials); break; case 'PIC2': if (param_3 & 0x1F0000) { newPane = new J2DPictureEx(basePane, stream, param_3, mMaterials); break; } newPane = new J2DPicture(basePane, stream, mMaterials); break; case 'TBX2': if (param_3 & 0x1F0000) { newPane = new J2DTextBoxEx(basePane, stream, param_3, mMaterials); break; } newPane = new J2DTextBox(basePane, stream, param_3, mMaterials); break; default: s32 position = stream->getPosition(); s32 size = header.mSize; s32 start = size + position; newPane = new J2DPane(basePane, stream, 0); stream->seek(start, JSUStreamSeekFrom_SET); break; } return newPane; } /* ############################################################################################## */ /* 80456238-8045623C 004838 0004+00 1/1 0/0 0/0 .sdata2 @1829 */ SECTION_SDATA2 static f32 lit_1829 = -1.0f; /* 8045623C-80456240 00483C 0004+00 1/1 0/0 0/0 .sdata2 @1830 */ SECTION_SDATA2 static f32 lit_1830 = 1.0f; /* 802F8ED4-802F90A0 2F3814 01CC+00 0/0 51/51 4/4 .text draw__9J2DScreenFffPC14J2DGrafContext */ // matches with literals #ifdef NONMATCHING void J2DScreen::draw(f32 param_0, f32 param_1, J2DGrafContext const* grafCtx) { u32 x, y, width, height; if (mScissor) { GXGetScissor(&x, &y, &width, &height); } if (grafCtx != NULL) { J2DPane::draw(param_0, param_1, grafCtx, mScissor, true); } else { J2DOrthoGraph ortho(0.0f, 0.0f, 640.0f, 480.0f, -1.0f, 1.0f); ortho.setPort(); J2DPane::draw(param_0, param_1, &ortho, mScissor, true); } if (mScissor) { GXSetScissor(x, y, width, height); } GXSetNumIndStages(0); for (int i = 0; i < 0x10; i++) { GXSetTevDirect((GXTevStageID)i); } GXSetNumTevStages(1); GXSetTevOp(GX_TEVSTAGE0, GX_PASSCLR); GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); GXSetVtxDesc(GX_VA_TEX0, GX_NONE); GXSetCullMode(GX_CULL_NONE); GXSetNumTexGens(0); GXSetChanCtrl(GX_COLOR0A0, GX_DISABLE, GX_SRC_REG, GX_SRC_VTX, GX_LIGHT_NULL, GX_DF_NONE, GX_AF_NONE); for (int i = 0; i < 4; i++) { GXSetTevSwapModeTable((GXTevSwapSel)i, GX_CH_RED, GX_CH_GREEN, GX_CH_BLUE, GX_CH_ALPHA); } } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void J2DScreen::draw(f32 param_0, f32 param_1, J2DGrafContext const* param_2) { nofralloc #include "asm/JSystem/J2DGraph/J2DScreen/draw__9J2DScreenFffPC14J2DGrafContext.s" } #pragma pop #endif /* 802F90A0-802F90E0 2F39E0 0040+00 1/0 0/0 0/0 .text search__9J2DScreenFUx */ J2DPane* J2DScreen::search(u64 tag) { if (tag == 0) { return NULL; } return J2DPane::search(tag); } /* 802F90E0-802F9120 2F3A20 0040+00 1/0 0/0 0/0 .text searchUserInfo__9J2DScreenFUx */ J2DPane* J2DScreen::searchUserInfo(u64 tag) { if (tag == 0) { return NULL; } return J2DPane::searchUserInfo(tag); } /* 802F9120-802F9280 2F3A60 0160+00 1/0 0/0 0/0 .text drawSelf__9J2DScreenFffPA3_A4_f */ // close. issues with color #ifdef NONMATCHING void J2DScreen::drawSelf(f32 param_0, f32 param_1, Mtx* param_2) { JUtility::TColor color(mColor); u8 alpha = (color.a * mAlpha) / 255; if (alpha != 0) { JUtility::TColor color2((u32)alpha); color = color2; GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_SET); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); GXBegin(GX_QUADS, GX_VTXFMT0, 4); GXPosition3f32(0.0f, 0.0f, 0.0f); GXColor1u32(color); GXPosition3f32(getWidth(), 0.0f, 0.0f); GXColor1u32(color); GXPosition3f32(getWidth(), getHeight(), 0.0f); GXColor1u32(color); GXPosition3f32(0.0f, getHeight(), 0.0f); GXColor1u32(color); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_S16, 0); GXEnd(); } } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void J2DScreen::drawSelf(f32 param_0, f32 param_1, Mtx* param_2) { nofralloc #include "asm/JSystem/J2DGraph/J2DScreen/drawSelf__9J2DScreenFffPA3_A4_f.s" } #pragma pop #endif /* 802F9280-802F937C 2F3BC0 00FC+00 1/1 0/0 0/0 .text * getResReference__9J2DScreenFP20JSURandomInputStreamUl */ // small regalloc #ifdef NONMATCHING J2DResReference* J2DScreen::getResReference(JSURandomInputStream* stream, u32 param_1) { s32 position = stream->getPosition(); stream->skip(4); s32 start, end; start = stream->readS32(); stream->skip(4); end = stream->readS32(); stream->seek(position + end, JSUStreamSeekFrom_SET); s32 size = end - start; char* buffer; if (param_1 & 0x1F0000) { buffer = new char[size]; } else { buffer = new (-4) char[size]; } if (buffer != NULL) { stream->read(buffer, size); } return (J2DResReference*)buffer; } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm J2DResReference* J2DScreen::getResReference(JSURandomInputStream* param_0, u32 param_1) { nofralloc #include "asm/JSystem/J2DGraph/J2DScreen/getResReference__9J2DScreenFP20JSURandomInputStreamUl.s" } #pragma pop #endif /* 802F937C-802F9600 2F3CBC 0284+00 1/1 0/0 0/0 .text * createMaterial__9J2DScreenFP20JSURandomInputStreamUlP10JKRArchive */ // nametab section has issues #ifdef NONMATCHING bool J2DScreen::createMaterial(JSURandomInputStream* stream, u32 param_1, JKRArchive* archive) { s32 position = stream->getPosition(); J2DScrnBlockHeader header; stream->read(&header, 8); mMaterialNum = stream->readU16(); stream->skip(2); if (param_1 & 0x1F0000) { mMaterials = new J2DMaterial[mMaterialNum]; } else { mMaterials = new (-4) J2DMaterial[mMaterialNum]; } u8* buffer = new (-4) u8[header.mSize]; if (mMaterials != NULL && buffer != NULL) { stream->seek(position, JSUStreamSeekFrom_SET); stream->read(buffer, header.mSize); J2DMaterialFactory factory(*(J2DMaterialBlock*)buffer); for (u16 i = 0; i < mMaterialNum; i++) { factory.create(&mMaterials[i], i, param_1, mTexRes, mFontRes, archive); } if (param_1 & 0x1F0000) { u32 offset = buffer[0x14] << 0x18 | buffer[0x15] << 0x10 | buffer[0x16] << 8 | buffer[0x17]; char* sec = (char*)buffer + offset; u16* sec_s = (u16*)sec + *(u16*)sec; u16 num = sec_s[1]; while (sec[num] != 0) { num++; } num++; ResNTAB* nametab = new ResNTAB[num]; if (nametab != NULL) { for (u16 i = 0; i < num; i++) { nametab->mEntries[i].mKeyCode = sec[i]; } mNameTable = new JUTNameTab(nametab); if (mNameTable == NULL) { delete[] nametab; } else { delete[] buffer; return true; } } } } delete[] buffer; clean(); return false; } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm bool J2DScreen::createMaterial(JSURandomInputStream* param_0, u32 param_1, JKRArchive* param_2) { nofralloc #include "asm/JSystem/J2DGraph/J2DScreen/createMaterial__9J2DScreenFP20JSURandomInputStreamUlP10JKRArchive.s" } #pragma pop #endif /* 802F9600-802F9620 2F3F40 0020+00 1/0 0/0 0/0 .text isUsed__9J2DScreenFPC7ResTIMG */ bool J2DScreen::isUsed(ResTIMG const* img) { return J2DPane::isUsed(img); } /* 802F9620-802F9640 2F3F60 0020+00 1/0 0/0 0/0 .text isUsed__9J2DScreenFPC7ResFONT */ bool J2DScreen::isUsed(ResFONT const* font) { return J2DPane::isUsed(font); } /* ############################################################################################## */ /* 80451590-80451598 000A90 0004+04 1/1 3/3 0/0 .sbss mDataManage__9J2DScreen */ J2DDataManage* J2DScreen::mDataManage; /* 802F9640-802F9690 2F3F80 0050+00 0/0 6/6 0/0 .text getNameResource__9J2DScreenFPCc */ void* J2DScreen::getNameResource(char const* resName) { void* res = JKRFileLoader::getGlbResource(resName, NULL); if (res == NULL && mDataManage != NULL) { res = mDataManage->get(resName); } return res; } /* 802F9690-802F9704 2F3FD0 0074+00 0/0 30/30 3/3 .text animation__9J2DScreenFv */ void J2DScreen::animation() { animationPane(mTransform); for (u16 i = 0; i < mMaterialNum; i++) { mMaterials[i].animation(); } } /* 802F9704-802F9798 2F4044 0094+00 1/0 0/0 0/0 .text setAnimation__9J2DScreenFP11J2DAnmColor */ void J2DScreen::setAnimation(J2DAnmColor* anmColor) { anmColor->searchUpdateMaterialID(this); u16 matNum = anmColor->getUpdateMaterialNum(); for (u16 i = 0; i < matNum; i++) { u16 matID = anmColor->getUpdateMaterialID(i); if (matID < mMaterialNum) { mMaterials[matID].setAnimation(anmColor); } } } /* 802F9798-802F9838 2F40D8 00A0+00 1/0 0/0 0/0 .text * setAnimation__9J2DScreenFP19J2DAnmTextureSRTKey */ void J2DScreen::setAnimation(J2DAnmTextureSRTKey* anmSRTKey) { anmSRTKey->searchUpdateMaterialID(this); u16 matNum = anmSRTKey->getUpdateMaterialNum(); for (u16 i = 0; i < matNum; i++) { u16 matID = anmSRTKey->getUpdateMaterialID(i); if (matID < mMaterialNum) { mMaterials[matID].setAnimation(anmSRTKey); } } } /* 802F9838-802F98CC 2F4178 0094+00 1/0 0/0 0/0 .text setAnimation__9J2DScreenFP16J2DAnmTexPattern */ void J2DScreen::setAnimation(J2DAnmTexPattern* anmPattern) { anmPattern->searchUpdateMaterialID(this); u16 matNum = anmPattern->getUpdateMaterialNum(); for (u16 i = 0; i < matNum; i++) { u16 matID = anmPattern->getUpdateMaterialID(i); if (matID < mMaterialNum) { mMaterials[matID].setAnimation(anmPattern); } } } /* 802F98CC-802F99A8 2F420C 00DC+00 1/0 0/0 0/0 .text setAnimation__9J2DScreenFP15J2DAnmTevRegKey */ void J2DScreen::setAnimation(J2DAnmTevRegKey* anmRegKey) { anmRegKey->searchUpdateMaterialID(this); u16 cMatNum = anmRegKey->getCRegUpdateMaterialNum(); for (u16 i = 0; i < cMatNum; i++) { u16 matID = anmRegKey->getCRegUpdateMaterialID(i); if (matID < mMaterialNum) { mMaterials[matID].setAnimation(anmRegKey); } } u16 kMatNum = anmRegKey->getKRegUpdateMaterialNum(); for (u16 i = 0; i < kMatNum; i++) { u16 matID = anmRegKey->getKRegUpdateMaterialID(i); if (matID < mMaterialNum) { mMaterials[matID].setAnimation(anmRegKey); } } } /* 802F99A8-802F99C8 2F42E8 0020+00 1/0 0/0 0/0 .text setAnimation__9J2DScreenFP14J2DAnmVtxColor */ void J2DScreen::setAnimation(J2DAnmVtxColor* anmVtxColor) { J2DPane::setVtxColorAnimation(anmVtxColor); } /* 802F99C8-802F99E8 2F4308 0020+00 1/0 0/0 0/0 .text * setAnimation__9J2DScreenFP20J2DAnmVisibilityFull */ void J2DScreen::setAnimation(J2DAnmVisibilityFull* anmVisibility) { J2DPane::setVisibileAnimation(anmVisibility); } /* 802F99E8-802F9A18 2F4328 0030+00 1/0 0/0 0/0 .text * createPane__9J2DScreenFRC18J2DScrnBlockHeaderP20JSURandomInputStreamP7J2DPaneUl */ J2DPane* J2DScreen::createPane(J2DScrnBlockHeader const& header, JSURandomInputStream* stream, J2DPane* basePane, u32 param_3) { return createPane(header, stream, basePane, param_3, NULL); } /* 802F9A18-802F9A20 2F4358 0008+00 1/0 0/0 0/0 .text getTypeID__9J2DScreenCFv */ s32 J2DScreen::getTypeID() const { return 8; } /* 802F9A20-802F9A54 2F4360 0034+00 1/0 0/0 0/0 .text calcMtx__9J2DScreenFv */ void J2DScreen::calcMtx() { makeMatrix(mTranslateX, mTranslateY); } /* 802F9A54-802F9A74 2F4394 0020+00 1/0 0/0 0/0 .text setAnimation__9J2DScreenFP10J2DAnmBase */ void J2DScreen::setAnimation(J2DAnmBase* anm) { J2DPane::setAnimation(anm); } /* 802F9A74-802F9A78 2F43B4 0004+00 1/0 0/0 0/0 .text * setAnimationVF__9J2DScreenFP20J2DAnmVisibilityFull */ void J2DScreen::setAnimationVF(J2DAnmVisibilityFull* param_0) { /* empty function */ } /* 802F9A78-802F9A7C 2F43B8 0004+00 1/0 0/0 0/0 .text setAnimationVC__9J2DScreenFP14J2DAnmVtxColor */ void J2DScreen::setAnimationVC(J2DAnmVtxColor* param_0) { /* empty function */ }