diff options
| author | TakaRikka <38417346+TakaRikka@users.noreply.github.com> | 2022-01-25 12:24:14 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-01-25 21:24:14 +0100 |
| commit | 612f26c132280da43ecfa5fa8c8cc32966f06eb6 (patch) | |
| tree | ac20d071712cf830ec526222c98d340d90721f77 /src | |
| parent | 6f4d068f1d7c5a9f25f1920e64e5b10dc29aea07 (diff) | |
d_kankyo_wether / d_eye_hl (#178)
* d_eye_hl / d_kankyo_wether wip
* more d_kankyo_wether + format
* remove asm
* some d_kankyo wip
* fix dccs vtable
* some m_Do_graphic / d_meter2_draw work
Diffstat (limited to 'src')
| -rw-r--r-- | src/DynamicLink.cpp | 335 | ||||
| -rw-r--r-- | src/d/a/d_a_alink.cpp | 7 | ||||
| -rw-r--r-- | src/d/bg/d_bg_s_movebg_actor.cpp | 4 | ||||
| -rw-r--r-- | src/d/cc/d_cc_s.cpp | 194 | ||||
| -rw-r--r-- | src/d/com/d_com_inf_game.cpp | 12 | ||||
| -rw-r--r-- | src/d/d_bomb.cpp | 7 | ||||
| -rw-r--r-- | src/d/d_error_msg.cpp | 2 | ||||
| -rw-r--r-- | src/d/d_eye_hl.cpp | 119 | ||||
| -rw-r--r-- | src/d/d_kyeff.cpp | 11 | ||||
| -rw-r--r-- | src/d/kankyo/d_kankyo.cpp | 797 | ||||
| -rw-r--r-- | src/d/kankyo/d_kankyo_data.cpp | 179 | ||||
| -rw-r--r-- | src/d/kankyo/d_kankyo_wether.cpp | 1946 | ||||
| -rw-r--r-- | src/d/map/d_map_path.cpp | 110 | ||||
| -rw-r--r-- | src/d/menu/d_menu_letter.cpp | 4 | ||||
| -rw-r--r-- | src/d/menu/d_menu_window.cpp | 1 | ||||
| -rw-r--r-- | src/d/meter/d_meter2_draw.cpp | 723 | ||||
| -rw-r--r-- | src/d/meter/d_meter_HIO.cpp | 16 | ||||
| -rw-r--r-- | src/d/msg/d_msg_object.cpp | 4 | ||||
| -rw-r--r-- | src/d/pane/d_pane_class_alpha.cpp | 2 | ||||
| -rw-r--r-- | src/d/particle/d_particle.cpp | 10 | ||||
| -rw-r--r-- | src/m_Do/m_Do_ext.cpp | 9 | ||||
| -rw-r--r-- | src/m_Do/m_Do_graphic.cpp | 476 | ||||
| -rw-r--r-- | src/m_Do/m_Do_machine.cpp | 4 | ||||
| -rw-r--r-- | src/m_Do/m_Do_mtx.cpp | 81 |
24 files changed, 2745 insertions, 2308 deletions
diff --git a/src/DynamicLink.cpp b/src/DynamicLink.cpp index 8c505b9a12..e86cd9ad3d 100644 --- a/src/DynamicLink.cpp +++ b/src/DynamicLink.cpp @@ -4,13 +4,13 @@ // #include "DynamicLink.h" +#include "JSystem/JKernel/JKRDvdRipper.h" +#include "JSystem/JUtility/JUTConsole.h" +#include "MSL_C.PPCEABI.bare.H/MSL_Common/Src/printf.h" #include "dol2asm.h" -#include "dolphin/types.h" #include "dolphin/os/OS.h" -#include "JSystem/JUtility/JUTConsole.h" +#include "dolphin/types.h" #include "m_Do/m_Do_ext.h" -#include "MSL_C.PPCEABI.bare.H/MSL_Common/Src/printf.h" -#include "JSystem/JKernel/JKRDvdRipper.h" // // Forward References: @@ -39,8 +39,8 @@ extern "C" void getModuleTypeString__20DynamicModuleControlCFv(); extern "C" void ModuleProlog(); extern "C" void ModuleEpilog(); extern "C" void ModuleUnresolved(); -extern "C" void ModuleConstructorsX(void(**ctors)()); -extern "C" void ModuleDestructorsX(void(**dtors)()); +extern "C" void ModuleConstructorsX(void (**ctors)()); +extern "C" void ModuleDestructorsX(void (**dtors)()); extern "C" bool do_link__24DynamicModuleControlBaseFv(); extern "C" bool do_load__24DynamicModuleControlBaseFv(); extern "C" bool do_unload__24DynamicModuleControlBaseFv(); @@ -103,16 +103,16 @@ DynamicModuleControlBase* DynamicModuleControlBase::mLast; */ DynamicModuleControlBase::~DynamicModuleControlBase() { force_unlink(); - if (mPrev!=NULL) { + if (mPrev != NULL) { mPrev->mNext = mNext; } - if (mNext!=NULL) { + if (mNext != NULL) { mNext->mPrev = mPrev; } - if (mFirst==this) { + if (mFirst == this) { mFirst = mNext; } - if (mLast==this) { + if (mLast == this) { mLast = mPrev; } mNext = NULL; @@ -125,11 +125,11 @@ DynamicModuleControlBase::DynamicModuleControlBase() { mLinkCount = 0; mDoLinkCount = 0; mNext = NULL; - if (mFirst==NULL) { + if (mFirst == NULL) { mFirst = this; } mPrev = mLast; - if (mPrev!=NULL) { + if (mPrev != NULL) { mPrev->mNext = this; } mLast = this; @@ -138,16 +138,16 @@ DynamicModuleControlBase::DynamicModuleControlBase() { /* 802622D0-80262364 25CC10 0094+00 0/0 2/2 0/0 .text link__24DynamicModuleControlBaseFv */ bool DynamicModuleControlBase::link() { - if (mLinkCount==0) { + if (mLinkCount == 0) { do_load(); - if (do_link()==false) { + if (do_link() == false) { return false; } - if (mDoLinkCount<0xFFFF) { + if (mDoLinkCount < 0xFFFF) { mDoLinkCount++; } } - if(mLinkCount<0xFFFF) { + if (mLinkCount < 0xFFFF) { mLinkCount++; } return true; @@ -155,21 +155,22 @@ bool DynamicModuleControlBase::link() { /* 80262364-802623EC 25CCA4 0088+00 0/0 1/1 0/0 .text unlink__24DynamicModuleControlBaseFv */ bool DynamicModuleControlBase::unlink() { - if(mLinkCount!=0) { + if (mLinkCount != 0) { mLinkCount--; - if(mLinkCount==0) { + if (mLinkCount == 0) { do_unlink(); do_unload(); } - }else{ - OSReport_Warning("%08x DynamicModuleControlBase::unlink() mLinkCount id already zero.\n",this); + } else { + OSReport_Warning("%08x DynamicModuleControlBase::unlink() mLinkCount id already zero.\n", + this); } return true; } /* 802623EC-8026242C 25CD2C 0040+00 0/0 1/1 0/0 .text load_async__24DynamicModuleControlBaseFv */ bool DynamicModuleControlBase::load_async() { - if (mLinkCount==0) { + if (mLinkCount == 0) { return do_load_async(); } return true; @@ -178,7 +179,7 @@ bool DynamicModuleControlBase::load_async() { /* 8026242C-80262470 25CD6C 0044+00 1/1 0/0 0/0 .text force_unlink__24DynamicModuleControlBaseFv */ bool DynamicModuleControlBase::force_unlink() { - if (mLinkCount!=0) { + if (mLinkCount != 0) { mLinkCount = 0; do_unlink(); } @@ -191,43 +192,45 @@ void DynamicModuleControlBase::dump() { int totalSize = 0; JUTReportConsole_f("\nDynamicModuleControlBase::dump()\n"); JUTReportConsole_f("Do Lnk Size Name\n"); - //lbl_80262608 - while (current!=NULL) { - //lbl_802624B8 + // lbl_80262608 + while (current != NULL) { + // lbl_802624B8 u16 doLinkCount = current->mDoLinkCount; u16 linkCount = current->mLinkCount; - if (doLinkCount!=0||linkCount!=0) { - //lbl_802624D0 + if (doLinkCount != 0 || linkCount != 0) { + // lbl_802624D0 u32 size = current->getModuleSize(); const char* name = current->getModuleName(); - if(size<0xFFFFFFFF) { - name = (name!=NULL) ? name : "(Null)"; - //lbl_80262524 + if (size < 0xFFFFFFFF) { + name = (name != NULL) ? name : "(Null)"; + // lbl_80262524 const char* type = current->getModuleTypeString(); - JUTReportConsole_f("%3d%3d%5.1f %05x %-4s %-24s ",doLinkCount,linkCount,size*(1.0f/1024.0f),size,type,name); - totalSize=totalSize+size; - }else{ - //lbl_80262588 - name = (name!=NULL) ? name : "(Null)"; - //lbl_802625A4 + JUTReportConsole_f("%3d%3d%5.1f %05x %-4s %-24s ", doLinkCount, linkCount, + size * (1.0f / 1024.0f), size, type, name); + totalSize = totalSize + size; + } else { + // lbl_80262588 + name = (name != NULL) ? name : "(Null)"; + // lbl_802625A4 const char* type = current->getModuleTypeString(); - JUTReportConsole_f("%3d%3d ???? ????? %-4s %-24s ",doLinkCount,linkCount,type,name); + JUTReportConsole_f("%3d%3d ???? ????? %-4s %-24s ", doLinkCount, linkCount, type, + name); } - //lbl_802625DC + // lbl_802625DC current->dump2(); JUTReportConsole_f("\n"); } - //lbl_80262604 + // lbl_80262604 current = getNextClass(); } - //lbl_80262608 - JUTReportConsole_f("TotalSize %6.2f %06x\n\n",(1.0f/1024.0f)*totalSize,totalSize); + // lbl_80262608 + JUTReportConsole_f("TotalSize %6.2f %06x\n\n", (1.0f / 1024.0f) * totalSize, totalSize); } #else /* ############################################################################################## */ /* 80455008-80455010 003608 0004+04 1/1 0/0 0/0 .sdata2 @3772 */ SECTION_SDATA2 static f32 lit_3772[1 + 1 /* padding */] = { - 0.0009765625f, // 1/1024 + 0.0009765625f, // 1/1024 /* padding */ 0.0f, }; @@ -291,10 +294,13 @@ SECTION_DEAD static char const* const stringBase_8039A57B = "Base"; /* 802626D0-8026275C 25D010 008C+00 1/1 0/0 0/0 .text mountCallback__20DynamicModuleControlFPv */ JKRArchive* DynamicModuleControl::mountCallback(void* param_0) { JKRExpHeap* heap = mDoExt_getArchiveHeap(); - sFileCache = JKRFileCache::mount("/rel/Final/Release",heap,NULL); - sArchive = JKRArchive::mount("RELS.arc",JKRArchive::MOUNT_COMP,heap,JKRArchive::MOUNT_DIRECTION_HEAD); + sFileCache = JKRFileCache::mount("/rel/Final/Release", heap, NULL); + sArchive = JKRArchive::mount("RELS.arc", JKRArchive::MOUNT_COMP, heap, + JKRArchive::MOUNT_DIRECTION_HEAD); if (sArchive == NULL) { - OSReport_Warning("マウント失敗ですが単にアーカイブを作ってないだけなら遅いだけです %s\n","RELS.arc"); + // "Mount failure, but if the archive isn't created, it was too slow %s\n" + OSReport_Warning("マウント失敗ですが単にアーカイブを作ってないだけなら遅いだけです %s\n", + "RELS.arc"); } return sArchive; } @@ -318,9 +324,9 @@ void* DynamicModuleControl::callback(void* moduleControlPtr) { /* 802627C0-802627E8 25D100 0028+00 1/1 0/0 0/0 .text calcSum2__FPCUsUl */ static u32 calcSum2(u16 const* data, u32 size) { u32 sum = 0; - while (size>0) { + while (size > 0) { sum = sum + *data; - size=size-2; + size = size - 2; data++; } return sum; @@ -328,83 +334,93 @@ static u32 calcSum2(u16 const* data, u32 size) { #ifdef NONMATCHING bool DynamicModuleControl::do_load() { - if (mModule!=NULL) { + if (mModule != NULL) { return true; } JKRExpHeap* heap = mDoExt_getArchiveHeap(); s32 i = 0; - while(true) { - if(mModule != NULL) { - JKRHeap::free(mModule,NULL); + while (true) { + if (mModule != NULL) { + JKRHeap::free(mModule, NULL); mModule = NULL; } char buffer[64]; - snprintf(buffer,64,"%s.rel",mName); - if(mModule==NULL&&sArchive!=NULL) { - if(mModule==NULL) { - mModule = (OSModuleInfo*)JKRArchive::getGlbResource(0x4D4D454D/*MMEM*/,buffer,sArchive); - if(mModule!=NULL) { + snprintf(buffer, 64, "%s.rel", mName); + if (mModule == NULL && sArchive != NULL) { + if (mModule == NULL) { + mModule = (OSModuleInfo*)JKRArchive::getGlbResource('MMEM', buffer, sArchive); + if (mModule != NULL) { mResourceType = 1; } } - if(mModule==NULL) { - mModule = (OSModuleInfo*)JKRArchive::getGlbResource(0x414D454D/*AMEM*/,buffer,sArchive); - if(mModule!=NULL) { + if (mModule == NULL) { + mModule = (OSModuleInfo*)JKRArchive::getGlbResource('AMEM', buffer, sArchive); + if (mModule != NULL) { mResourceType = 2; } } - if(mModule==NULL) { - mModule = (OSModuleInfo*)JKRArchive::getGlbResource(0x444D454D/*DMEM*/,buffer,sArchive); - if(mModule!=NULL) { + if (mModule == NULL) { + mModule = (OSModuleInfo*)JKRArchive::getGlbResource('DMEM', buffer, sArchive); + if (mModule != NULL) { mResourceType = 3; } } } - if(mModule!=NULL) { + if (mModule != NULL) { mSize = sArchive->getExpandedResSize(mModule); - JKRFileLoader::detachResource(mModule,NULL); - }else if(mModule==NULL){ - snprintf(buffer,64,"/rel/Final/Release/%s.rel",mName); - mModule = (OSModuleInfo*)JKRDvdRipper::loadToMainRAM(buffer,NULL,EXPAND_SWITCH_UNKNOWN1,0,heap,JKRDvdRipper::ALLOC_DIRECTION_FORWARD,0,NULL,NULL); - if(mModule!=NULL) { + JKRFileLoader::detachResource(mModule, NULL); + } else if (mModule == NULL) { + snprintf(buffer, 64, "/rel/Final/Release/%s.rel", mName); + mModule = (OSModuleInfo*)JKRDvdRipper::loadToMainRAM( + buffer, NULL, EXPAND_SWITCH_UNKNOWN1, 0, heap, + JKRDvdRipper::ALLOC_DIRECTION_FORWARD, 0, NULL, NULL); + if (mModule != NULL) { mSize = 0; mResourceType = 7; } } - if(mModule==NULL&&sFileCache!=NULL) { - mModule = (OSModuleInfo*)sFileCache->getResource(0x72656C73/*rels*/,buffer); - if(mModule!=NULL) { + if (mModule == NULL && sFileCache != NULL) { + mModule = (OSModuleInfo*)sFileCache->getResource('rels', buffer); + if (mModule != NULL) { mSize = 0; mResourceType = 11; - JKRFileLoader::detachResource(mModule,NULL); + JKRFileLoader::detachResource(mModule, NULL); } } - if(mModule==NULL) { - OSReport_Error("\x44\x79\x6E\x61\x6D\x69\x63\x4D\x6F\x64\x75\x6C\x65\x43\x6F\x6E\x74\x72\x6F\x6C\x3A\x3A\x64\x6F\x5F\x6C\x6F\x61\x64\x28\x29\x20\x83\x8A\x83\x5C\x81\x5B\x83\x58\x93\xC7\x82\xDD\x8D\x9E\x82\xDD\x8E\xB8\x94\x73\x20\x5B\x25\x73\x5D\x0A",mName); + if (mModule == NULL) { + // "DynamicModuleControl::do_load() Resource load failure [%s]\n" + OSReport_Error( + "\x44\x79\x6E\x61\x6D\x69\x63\x4D\x6F\x64\x75\x6C\x65\x43\x6F\x6E\x74\x72\x6F\x6C" + "\x3A\x3A\x64\x6F\x5F\x6C\x6F\x61\x64\x28\x29\x20\x83\x8A\x83\x5C\x81\x5B\x83\x58" + "\x93\xC7\x82\xDD\x8D\x9E\x82\xDD\x8E\xB8\x94\x73\x20\x5B\x25\x73\x5D\x0A", + mName); return false; } - if(mSize>0) { - u32 sum = calcSum2((u16*)mModule,mSize); - if(unk_33==0) { - mChecksum=sum; + if (mSize > 0) { + u32 sum = calcSum2((u16*)mModule, mSize); + if (unk_33 == 0) { + mChecksum = sum; unk_33++; - }else{ - u32 newsum = sum&0xFFFF; - if(newsum!=mChecksum) { - OSReport_Error("DynamicModuleControl::do_load() チェックサムエラー %04x %04x[%s]\n",newsum,mChecksum,mName); + } else { + u32 newsum = sum & 0xFFFF; + if (newsum != mChecksum) { + OSReport_Error( + // "DynamicModuleControl::do_load() Checksum Error %04x %04x[%s]\n" + "DynamicModuleControl::do_load() チェックサムエラー %04x %04x[%s]\n", + newsum, mChecksum, mName); unk_33 = 0; i++; - if(i>=3) { + if (i >= 3) { return false; } } } - if(unk_33<0xFF) { + if (unk_33 < 0xFF) { unk_33++; return true; } } - if(unk_33<0xFF) { + if (unk_33 < 0xFF) { unk_33++; return true; } @@ -443,20 +459,23 @@ asm bool DynamicModuleControl::do_load() { /* 80262AFC-80262BC4 25D43C 00C8+00 1/0 0/0 0/0 .text do_load_async__20DynamicModuleControlFv */ bool DynamicModuleControl::do_load_async() { - if (mAsyncLoadCallback==NULL) { - if(mModule!=NULL) { + if (mAsyncLoadCallback == NULL) { + if (mModule != NULL) { return true; } - mAsyncLoadCallback = mDoDvdThd_callback_c::create(DynamicModuleControl::callback,this); - if(mAsyncLoadCallback==NULL) { - OSReport_Error("DynamicModuleControl::do_load_async() 非同期読み込みコールバック登録失敗 [%s]\n",mName); + mAsyncLoadCallback = mDoDvdThd_callback_c::create(DynamicModuleControl::callback, this); + if (mAsyncLoadCallback == NULL) { + OSReport_Error( + // "DynamicModuleControl::do_load_async() async load callback entry failure [%s]\n" + "DynamicModuleControl::do_load_async() 非同期読み込みコールバック登録失敗 [%s]\n", + mName); } } - if (mAsyncLoadCallback!=NULL&&mAsyncLoadCallback->sync()) { + if (mAsyncLoadCallback != NULL && mAsyncLoadCallback->sync()) { mAsyncLoadCallback->destroy(); mAsyncLoadCallback = NULL; return true; - }else{ + } else { return false; } } @@ -464,7 +483,7 @@ bool DynamicModuleControl::do_load_async() { /* 80262BC4-80262C0C 25D504 0048+00 1/0 0/0 0/0 .text do_unload__20DynamicModuleControlFv */ bool DynamicModuleControl::do_unload() { - if (mModule!=NULL){ + if (mModule != NULL) { JKRFree(mModule); mModule = NULL; } @@ -473,79 +492,87 @@ bool DynamicModuleControl::do_unload() { /* 80262C0C-80262C5C 25D54C 0050+00 1/0 0/0 0/0 .text dump2__20DynamicModuleControlFv */ void DynamicModuleControl::dump2() { - if (mModule!=NULL) { + if (mModule != NULL) { OSSectionInfo* section = (OSSectionInfo*)mModule->info.sectionInfoOffset; - OSSectionInfo* section2 = section+1; + OSSectionInfo* section2 = section + 1; u32 offset = section2->mOffset & ~(1); - OSReport("%08x-%08x %08x %08x",mModule,offset,offset+section2->mSize); + OSReport("%08x-%08x %08x %08x", mModule, offset, offset + section2->mSize); } } #ifdef NONMATCHING BOOL DynamicModuleControl::do_link() { OSGetTime(); - if(mModule==NULL) { + if (mModule == NULL) { do_load(); } - if(mModule!=NULL) { + if (mModule != NULL) { ASSERT(mModule->info.sectionInfoOffset < 0x80000000); ASSERT((u32)mModule + mModule->fixSize < 0x82000000); OSGetTime(); OSGetTime(); - if(mModule->mModuleVersion>=3) { + if (mModule->mModuleVersion >= 3) { u32 unk = mModule->fixSize; - u32 unk3 = (unk+0x1f) & ~0x1f; - u32 unk2 = (u32)mModule+unk3; - s32 size = JKRHeap::getSize(mModule,NULL); - if(size<0) { - void* bss = JKRHeap::alloc(mModule->mBssSize,0x20,NULL); - if (bss==NULL) { + u32 unk3 = (unk + 0x1f) & ~0x1f; + u32 unk2 = (u32)mModule + unk3; + s32 size = JKRHeap::getSize(mModule, NULL); + if (size < 0) { + void* bss = JKRHeap::alloc(mModule->mBssSize, 0x20, NULL); + if (bss == NULL) { + // "BSS Memory allocation failed\n" OSReport_Error("BSSメモリ確保失敗\n"); goto end; - }else{ + } else { mBss = bss; BOOL linkResult = OSLink(mModule); - if(linkResult==FALSE) { + if (linkResult == FALSE) { + // "link failed\n" OSReport_Error("リンク失敗\n"); goto end; } } - }else{ - if(mModule->mBssSize+unk<size) { - BOOL linkResult = OSLinkFixed(mModule,unk2); - if(linkResult==FALSE) { + } else { + if (mModule->mBssSize + unk < size) { + BOOL linkResult = OSLinkFixed(mModule, unk2); + if (linkResult == FALSE) { + // "link failed\n" OSReport_Error("リンク失敗\n"); goto end; - }else{ - s32 result = JKRHeap::resize(mModule,mModule->mBssSize+unk,NULL); - if (result<0) { + } else { + s32 result = JKRHeap::resize(mModule, mModule->mBssSize + unk, NULL); + if (result < 0) { + // "Module size (resize) failed\n" OSReport_Error("モジュールリサイズ(縮小)失敗\n"); } } - }else{ //lbl_80262DB0 - s32 result = JKRHeap::resize(mModule,mModule->mBssSize+unk,NULL); - if (result>0) { - BOOL linkResult = OSLinkFixed(mModule,unk2); - if(linkResult==FALSE) { + } else { // lbl_80262DB0 + s32 result = JKRHeap::resize(mModule, mModule->mBssSize + unk, NULL); + if (result > 0) { + BOOL linkResult = OSLinkFixed(mModule, unk2); + if (linkResult == FALSE) { + // "link failed\n" OSReport_Error("リンク失敗\n"); goto end; } - }else{ //lbl_80262DF0 - void* bss = JKRHeap::alloc(mModule->mBssSize,0x20,NULL); - if (bss==NULL) { - OSReport_Error("BSSメモリ確保失敗 [%x]\n",mModule->mBssSize); + } else { // lbl_80262DF0 + void* bss = JKRHeap::alloc(mModule->mBssSize, 0x20, NULL); + if (bss == NULL) { + // "BSS Memory allocation failure [%x]\n" + OSReport_Error("BSSメモリ確保失敗 [%x]\n", mModule->mBssSize); goto end; - }else{ //lbl_80262E2C + } else { // lbl_80262E2C mBss = bss; - BOOL linkResult = OSLinkFixed(mModule,(u32)bss); - if (linkResult==FALSE) { + BOOL linkResult = OSLinkFixed(mModule, (u32)bss); + if (linkResult == FALSE) { + // "link failed\n" OSReport_Error("リンク失敗\n"); goto end; } - //lbl_80262E58 - s32 result = JKRHeap::resize(mModule,unk3,NULL); - if (result<0) { + // lbl_80262E58 + s32 result = JKRHeap::resize(mModule, unk3, NULL); + if (result < 0) { + // "Module size (resize) failed\n" OSReport_Error("モジュールリサイズ(縮小)失敗\n"); } } @@ -553,7 +580,7 @@ BOOL DynamicModuleControl::do_link() { } } } - //lbl_80262E84 + // lbl_80262E84 OSGetTime(); sAllocBytes = sAllocBytes + getModuleSize(); OSGetTime(); @@ -562,14 +589,14 @@ BOOL DynamicModuleControl::do_link() { return TRUE; } -end: //lbl_80262ECC +end: // lbl_80262ECC unk_33 = 0; - if(mBss!=NULL) { - JKRHeap::free(mBss,NULL); + if (mBss != NULL) { + JKRHeap::free(mBss, NULL); mBss = NULL; } - if(mModule!=NULL) { - JKRHeap::free(mModule,NULL); + if (mModule != NULL) { + JKRHeap::free(mModule, NULL); mModule = NULL; } return FALSE; @@ -603,28 +630,29 @@ bool DynamicModuleControl::do_unlink() { OSTime time2 = OSGetTime(); BOOL unklink = OSUnlink(mModule); OSTime time3 = OSGetTime(); - if (unklink==FALSE) { - OSReport_Error("アンリンク失敗 mModule=%08x mBss=%08x\n",mModule,mBss); + if (unklink == FALSE) { + // "Unlink failed mModule=%08x mBss=%08x\n" + OSReport_Error("アンリンク失敗 mModule=%08x mBss=%08x\n", mModule, mBss); return false; } sAllocBytes = sAllocBytes - getModuleSize(); - if (mBss!=NULL) { + if (mBss != NULL) { JKRFree(mBss); mBss = NULL; } do_unload(); return true; -} +} /* 80263000-80263070 25D940 0070+00 1/0 0/0 0/0 .text getModuleSize__20DynamicModuleControlCFv */ int DynamicModuleControl::getModuleSize() const { - if (mModule!=NULL){ - u32 size = JKRGetMemBlockSize(NULL,mModule); - if (mBss!=NULL) { - JKRGetMemBlockSize(NULL,mBss); + if (mModule != NULL) { + u32 size = JKRGetMemBlockSize(NULL, mModule); + if (mBss != NULL) { + JKRGetMemBlockSize(NULL, mBss); } - return size+mModule->mBssSize; - }else{ + return size + mModule->mBssSize; + } else { return 0; } } @@ -632,8 +660,8 @@ int DynamicModuleControl::getModuleSize() const { /* 80263070-80263088 25D9B0 0018+00 1/0 0/0 0/0 .text * getModuleTypeString__20DynamicModuleControlCFv */ const char* DynamicModuleControl::getModuleTypeString() const { - static const char* strings[4] = {"????","MEM","ARAM","DVD"}; - return strings[mResourceType&3]; + static const char* strings[4] = {"????", "MEM", "ARAM", "DVD"}; + return strings[mResourceType & 3]; } /* 803C34C0-803C34F4 0205E0 0034+00 1/1 2/2 0/0 .data __vt__20DynamicModuleControl */ @@ -665,28 +693,29 @@ extern "C" void ModuleEpilog() { /* 80263090-8026314C 25D9D0 00BC+00 0/0 0/0 757/757 .text ModuleUnresolved */ extern "C" void ModuleUnresolved() { + // "\nError: Unlinked function was called.\n" OSReport_Error("\nError: リンクされていない関数が呼び出されました.\n"); OSReport_Error("Address: Back Chain LR Save\n"); u32 i = 0; u32* stackPtr = (u32*)OSGetStackPointer(); - while((stackPtr != NULL) && ((u32)stackPtr != 0xFFFFFFFF) && (i++ < 0x10)) { - OSReport_Error("0x%08x: 0x%08x 0x%08x\n",stackPtr,*stackPtr,*(stackPtr+1)); + while ((stackPtr != NULL) && ((u32)stackPtr != 0xFFFFFFFF) && (i++ < 0x10)) { + OSReport_Error("0x%08x: 0x%08x 0x%08x\n", stackPtr, *stackPtr, *(stackPtr + 1)); stackPtr = (u32*)*stackPtr; } OSReport_Error("\n"); } /* 8026314C-80263190 25DA8C 0044+00 0/0 0/0 757/757 .text ModuleConstructorsX */ -extern "C" void ModuleConstructorsX(void(**ctors)()) { - while (*ctors!=0) { +extern "C" void ModuleConstructorsX(void (**ctors)()) { + while (*ctors != 0) { (**ctors)(); ctors++; } } /* 80263190-802631D4 25DAD0 0044+00 0/0 0/0 757/757 .text ModuleDestructorsX */ -extern "C" void ModuleDestructorsX(void(**dtors)()) { - while (*dtors!=0) { +extern "C" void ModuleDestructorsX(void (**dtors)()) { + while (*dtors != 0) { (**dtors)(); dtors++; } diff --git a/src/d/a/d_a_alink.cpp b/src/d/a/d_a_alink.cpp index 8c397548c8..3ede1b76e1 100644 --- a/src/d/a/d_a_alink.cpp +++ b/src/d/a/d_a_alink.cpp @@ -3324,7 +3324,6 @@ extern "C" u8 BaseY__4cXyz[12]; extern "C" u8 BaseZ__4cXyz[12]; extern "C" u8 mCurrentMtx__6J3DSys[48]; extern "C" u8 sincosTable___5JMath[65536]; -extern "C" extern u32 g_whiteColor; extern "C" u16 m_branchId__7dDemo_c[1 + 3 /* padding */]; extern "C" extern u8 data_80450B38[4]; extern "C" f32 mGroundY__11fopAcM_gc_c; @@ -3582,10 +3581,10 @@ void daAlink_c::setMatrixWorldAxisRot(MtxP param_0, s16 param_1, s16 param_2, s1 mDoMtx_stack_c::YrotM(-mCollisionRot.y); concatMagneBootInvMtx(); mDoMtx_stack_c::transM(-tmp.x, -tmp.y, -tmp.z); - PSMTXConcat(*mDoMtx_stack_c::get(), param_0, *mDoMtx_stack_c::get()); - PSMTXCopy(*mDoMtx_stack_c::get(), param_0); + PSMTXConcat(mDoMtx_stack_c::get(), param_0, mDoMtx_stack_c::get()); + PSMTXCopy(mDoMtx_stack_c::get(), param_0); if (param_4 != 0) { - PSMTXCopy(*mDoMtx_stack_c::get(), J3DSys::mCurrentMtx); + PSMTXCopy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx); } } diff --git a/src/d/bg/d_bg_s_movebg_actor.cpp b/src/d/bg/d_bg_s_movebg_actor.cpp index 35c3973ec6..a0b0b529c9 100644 --- a/src/d/bg/d_bg_s_movebg_actor.cpp +++ b/src/d/bg/d_bg_s_movebg_actor.cpp @@ -172,7 +172,7 @@ int dBgS_MoveBgActor::MoveBGCreate(char const* p_name, int dzb_id, MoveBGActor_S mDoMtx_stack_c::transS(mCurrent.mPosition.x, mCurrent.mPosition.y, mCurrent.mPosition.z); mDoMtx_stack_c::YrotM(mCollisionRot.y); mDoMtx_stack_c::scaleM(mScale.x, mScale.y, mScale.z); - PSMTXCopy(*mDoMtx_stack_c::get(), field_0x56c); + PSMTXCopy(mDoMtx_stack_c::get(), field_0x56c); } else { PSMTXCopy(*param_4, field_0x56c); } @@ -222,7 +222,7 @@ bool dBgS_MoveBgActor::MoveBGExecute() { mDoMtx_stack_c::transS(mCurrent.mPosition.x, mCurrent.mPosition.y, mCurrent.mPosition.z); mDoMtx_stack_c::YrotM(mCollisionRot.y); mDoMtx_stack_c::scaleM(mScale.x, mScale.y, mScale.z); - PSMTXCopy(*mDoMtx_stack_c::get(), field_0x56c); + PSMTXCopy(mDoMtx_stack_c::get(), field_0x56c); } else { PSMTXCopy(*tmp, field_0x56c); } diff --git a/src/d/cc/d_cc_s.cpp b/src/d/cc/d_cc_s.cpp index d19fc7b5c2..8bd4540176 100644 --- a/src/d/cc/d_cc_s.cpp +++ b/src/d/cc/d_cc_s.cpp @@ -3,7 +3,8 @@ // Translation Unit: d/cc/d_cc_s // -//#include "d/cc/d_cc_s.h" +#include "d/cc/d_cc_s.h" +#include "d/com/d_com_inf_game.h" #include "dol2asm.h" #include "dolphin/types.h" @@ -11,139 +12,12 @@ // Types: // -struct csXyz {}; - struct mDoMtx_stack_c { /* 8000CF0C */ void ZXYrotS(csXyz const&); static u8 now[48]; }; -struct fopAc_ac_c {}; - -struct cXyz { - static u8 BaseZ[12]; -}; - -struct dPa_control_c { - /* 8004C218 */ void setHitMark(u16, fopAc_ac_c*, cXyz const*, csXyz const*, cXyz const*, u32); -}; - -struct dJntCol_c { - /* 80036C44 */ void getHitmarkPosAndAngle(cXyz const*, csXyz const*, cXyz*, csXyz*, int) const; -}; - -struct dCcD_GObjInf { - /* 800843DC */ void ChkAtNoGuard(); -}; - -struct cCcD_GObjInf {}; - -struct cCcD_ShapeAttr { - struct Shape {}; -}; - -struct cCcD_Stts { - /* 80263934 */ void PlusCcMove(f32, f32, f32); - /* 80263970 */ void PlusDmg(int); -}; - -struct cCcD_GStts {}; - -struct cCcD_Obj { - /* 80263A48 */ void GetAc(); -}; - -struct dCcD_GStts {}; - -struct dCcS { - /* 8002FF40 */ ~dCcS(); - /* 80085ED4 */ void Ct(); - /* 80085F08 */ void Dt(); - /* 80085F28 */ void ChkShieldFrontRange(cCcD_Obj*, cCcD_Obj*, int, cXyz const*); - /* 800860F8 */ void ChkShield(cCcD_Obj*, cCcD_Obj*, dCcD_GObjInf*, dCcD_GObjInf*, cXyz const*); - /* 800861B0 */ void CalcTgPlusDmg(cCcD_Obj*, cCcD_Obj*, cCcD_Stts*, cCcD_Stts*); - /* 800861B4 */ void ChkAtTgHitAfterCross(bool, bool, cCcD_GObjInf const*, cCcD_GObjInf const*, - cCcD_Stts*, cCcD_Stts*, cCcD_GStts*, cCcD_GStts*); - /* 80086240 */ void SetCoGObjInf(bool, bool, cCcD_GObjInf*, cCcD_GObjInf*, cCcD_Stts*, - cCcD_Stts*, cCcD_GStts*, cCcD_GStts*); - /* 80086360 */ void GetRank(u8); - /* 80086404 */ bool ChkNoHitGCo(cCcD_Obj*, cCcD_Obj*); - /* 8008640C */ void SetPosCorrect(cCcD_Obj*, cXyz*, cCcD_Obj*, cXyz*, f32); - /* 80086754 */ void CalcParticleAngle(dCcD_GObjInf*, cCcD_Stts*, cCcD_Stts*, csXyz*); - /* 8008685C */ void ProcAtTgHitmark(bool, bool, cCcD_Obj*, cCcD_Obj*, dCcD_GObjInf*, - dCcD_GObjInf*, cCcD_Stts*, cCcD_Stts*, dCcD_GStts*, - dCcD_GStts*, cXyz*, bool); - /* 80086AC0 */ void SetAtTgGObjInf(bool, bool, cCcD_Obj*, cCcD_Obj*, cCcD_GObjInf*, - cCcD_GObjInf*, cCcD_Stts*, cCcD_Stts*, cCcD_GStts*, - cCcD_GStts*, cXyz*); - /* 80086D8C */ void ChkCamera(cXyz&, cXyz&, f32, fopAc_ac_c*, fopAc_ac_c*, fopAc_ac_c*); - /* 80086FBC */ void chkCameraPoint(cXyz const&, cCcD_ShapeAttr::Shape*, fopAc_ac_c*, - fopAc_ac_c*); - /* 800872A8 */ void MoveAfterCheck(); - /* 800872AC */ void DrawAfter(); - /* 800872B0 */ void Move(); - /* 800872D0 */ void Draw(); - /* 8008730C */ void MassClear(); - /* 80087330 */ void ChkAtTgMtrlHit(u8, u8); - /* 8008734C */ void ChkNoHitGAtTg(cCcD_GObjInf const*, cCcD_GObjInf const*, cCcD_GStts*, - cCcD_GStts*); - - static u8 m_mtrl_hit_tbl[64]; -}; - -struct dCcMassS_Mng { - /* 800855E4 */ void Ct(); - /* 80085CF0 */ void Clear(); -}; - -struct dCcD_GAtTgCoCommonBase { - /* 80083678 */ void SetHitApid(unsigned int); - /* 80083718 */ void SetEffCounterTimer(); - /* 80083748 */ void ChkEffCounter(); -}; - -struct cM3dGSphS {}; - -struct cM3dGSph { - /* 8026F6A8 */ void Set(cM3dGSphS const&); -}; - -struct cM3dGCps { - /* 8026EF88 */ cM3dGCps(); - /* 8026EFA4 */ ~cM3dGCps(); - /* 8026F000 */ void Set(cXyz const&, cXyz const&, f32); -}; - -struct cM3dGAab {}; - -struct cCcS { - /* 80264A94 */ void Ct(); - /* 80264B60 */ void Dt(); - /* 80265CCC */ void Move(); - /* 80265D30 */ void DrawClear(); - /* 80265DF4 */ void SetCoGCorrectProc(cCcD_Obj*, cCcD_Obj*); -}; - -struct cCcD_SphAttr { - /* 8008721C */ ~cCcD_SphAttr(); - /* 802646E0 */ void CalcAabBox(); -}; - -struct cCcD_DivideInfo { - /* 80263368 */ void Chk(cCcD_DivideInfo const&) const; -}; - -struct cCcD_DivideArea { - /* 802636A0 */ void CalcDivideInfoOverArea(cCcD_DivideInfo*, cM3dGAab const&); -}; - -struct cCcD_CpsAttr { - /* 80263FC4 */ void CalcAabBox(); -}; - -struct Vec {}; - // // Forward References: // @@ -211,13 +85,6 @@ extern "C" void Set__8cM3dGCpsFRC4cXyzRC4cXyzf(); extern "C" void Set__8cM3dGSphFRC9cM3dGSphS(); extern "C" void cLib_distanceAngleS__Fss(); extern "C" void __dl__FPv(); -extern "C" void PSMTXMultVecSR(); -extern "C" void PSVECAdd(); -extern "C" void PSVECSubtract(); -extern "C" void PSVECScale(); -extern "C" void PSVECNormalize(); -extern "C" void PSVECMag(); -extern "C" void PSVECDotProduct(); extern "C" void _savegpr_17(); extern "C" void _savegpr_23(); extern "C" void _savegpr_24(); @@ -237,33 +104,22 @@ extern "C" extern void* __vt__12cCcD_SphAttr[25]; extern "C" extern void* __vt__12cCcD_CpsAttr[25]; extern "C" extern void* __vt__14cCcD_ShapeAttr[22]; extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; extern "C" u8 BaseZ__4cXyz[12]; -extern "C" extern f32 G_CM3D_F_ABS_MIN[1 + 1 /* padding */]; // // Declarations: // /* 80085ED4-80085F08 080814 0034+00 0/0 1/1 0/0 .text Ct__4dCcSFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dCcS::Ct() { - nofralloc -#include "asm/d/cc/d_cc_s/Ct__4dCcSFv.s" +void dCcS::Ct() { + cCcS::Ct(); + mMass_Mng.Ct(); } -#pragma pop /* 80085F08-80085F28 080848 0020+00 0/0 1/1 0/0 .text Dt__4dCcSFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dCcS::Dt() { - nofralloc -#include "asm/d/cc/d_cc_s/Dt__4dCcSFv.s" +void dCcS::Dt() { + cCcS::Dt(); } -#pragma pop /* ############################################################################################## */ /* 80452778-8045277C 000D78 0004+00 3/3 0/0 0/0 .sdata2 @3705 */ @@ -311,7 +167,7 @@ void dCcS::CalcTgPlusDmg(cCcD_Obj* param_0, cCcD_Obj* param_1, cCcD_Stts* param_ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dCcS::ChkAtTgHitAfterCross(bool param_0, bool param_1, cCcD_GObjInf const* param_2, +asm bool dCcS::ChkAtTgHitAfterCross(bool param_0, bool param_1, cCcD_GObjInf const* param_2, cCcD_GObjInf const* param_3, cCcD_Stts* param_4, cCcD_Stts* param_5, cCcD_GStts* param_6, cCcD_GStts* param_7) { nofralloc @@ -581,7 +437,8 @@ asm void dCcS::chkCameraPoint(cXyz const& param_0, cCcD_ShapeAttr::Shape* param_ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm cCcD_SphAttr::~cCcD_SphAttr() { +// asm cCcD_SphAttr::~cCcD_SphAttr() { +extern "C" asm void __dt__12cCcD_SphAttrFv() { nofralloc #include "asm/d/cc/d_cc_s/__dt__12cCcD_SphAttrFv.s" } @@ -598,34 +455,21 @@ void dCcS::DrawAfter() { } /* 800872B0-800872D0 081BF0 0020+00 0/0 1/1 0/0 .text Move__4dCcSFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dCcS::Move() { - nofralloc -#include "asm/d/cc/d_cc_s/Move__4dCcSFv.s" +void dCcS::Move() { + cCcS::Move(); } -#pragma pop /* 800872D0-8008730C 081C10 003C+00 0/0 1/1 0/0 .text Draw__4dCcSFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dCcS::Draw() { - nofralloc -#include "asm/d/cc/d_cc_s/Draw__4dCcSFv.s" +void dCcS::Draw() { + DrawAfter(); + DrawClear(); + mMass_Mng.Clear(); } -#pragma pop /* 8008730C-80087330 081C4C 0024+00 0/0 0/0 1/1 .text MassClear__4dCcSFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dCcS::MassClear() { - nofralloc -#include "asm/d/cc/d_cc_s/MassClear__4dCcSFv.s" +void dCcS::MassClear() { + mMass_Mng.Clear(); } -#pragma pop /* ############################################################################################## */ /* 803AC3A4-803AC3E4 0094C4 0040+00 1/1 0/0 0/0 .data m_mtrl_hit_tbl__4dCcS */ @@ -651,7 +495,7 @@ asm void dCcS::ChkAtTgMtrlHit(u8 param_0, u8 param_1) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dCcS::ChkNoHitGAtTg(cCcD_GObjInf const* param_0, cCcD_GObjInf const* param_1, +asm bool dCcS::ChkNoHitGAtTg(cCcD_GObjInf const* param_0, cCcD_GObjInf const* param_1, cCcD_GStts* param_2, cCcD_GStts* param_3) { nofralloc #include "asm/d/cc/d_cc_s/ChkNoHitGAtTg__4dCcSFPC12cCcD_GObjInfPC12cCcD_GObjInfP10cCcD_GSttsP10cCcD_GStts.s" diff --git a/src/d/com/d_com_inf_game.cpp b/src/d/com/d_com_inf_game.cpp index be22bb8621..79a3114d6f 100644 --- a/src/d/com/d_com_inf_game.cpp +++ b/src/d/com/d_com_inf_game.cpp @@ -230,7 +230,6 @@ extern "C" void __dt__8cM3dGCylFv(); extern "C" void __dt__8cM3dGAabFv(); extern "C" void __dt__15cCcD_DivideInfoFv(); extern "C" extern char const* const d_com_d_com_inf_game__stringBase0; -extern "C" extern u32 g_whiteColor; extern "C" extern u32 g_saftyWhiteColor; // @@ -1327,7 +1326,7 @@ dTimer_c* dComIfG_play_c::getTimerPtr() { } void dComIfG_inf_c::ct() { - field_0x1ddf8 = 0xFF; + mFadeBrightness = 255; play.ct(); mWorldDark = 0; field_0x1ddfa = -1; @@ -1348,12 +1347,7 @@ SECTION_DEAD static char const* const stringBase_80379043 = "F_SP102"; #pragma pop /* 80450600-80450604 000080 0004+00 0/0 18/18 2/2 .sdata g_clearColor */ -SECTION_SDATA extern u8 g_clearColor[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; +SECTION_SDATA extern GXColor g_clearColor = {0, 0, 0, 0}; /* 80450604-80450608 000084 0004+00 1/1 10/10 15/15 .sdata g_blackColor */ SECTION_SDATA extern GXColor g_blackColor = {0, 0, 0, 255}; @@ -2591,7 +2585,7 @@ asm void dComIfGs_staffroll_next_go_check() { /* ############################################################################################## */ /* 80450608-8045060C 000088 0004+00 0/0 6/6 11/11 .sdata g_whiteColor */ -SECTION_SDATA extern u32 g_whiteColor = 0xFFFFFFFF; +SECTION_SDATA extern GXColor g_whiteColor = {255, 255, 255, 255}; /* 8045060C-80450610 00008C 0004+00 0/0 3/3 3/3 .sdata g_saftyWhiteColor */ SECTION_SDATA extern u32 g_saftyWhiteColor = 0xA0A0A0FF; diff --git a/src/d/d_bomb.cpp b/src/d/d_bomb.cpp index f025c00205..adf55dc467 100644 --- a/src/d/d_bomb.cpp +++ b/src/d/d_bomb.cpp @@ -4,6 +4,7 @@ // #include "d/d_bomb.h" +#include "d/d_procname.h" #include "dol2asm.h" #include "dolphin/types.h" #include "f_op/f_op_actor_mng.h" @@ -14,13 +15,13 @@ bool dBomb_c::checkStateCarry() { } bool dBomb_c::checkFlowerBombWait(fopAc_ac_c* param_1) { - return (fopAcM_GetName(&mActor) == 0x221 && fopAcM_GetParam(&mActor) == 4); + return (fopAcM_GetName(&mActor) == PROC_NBOMB && fopAcM_GetParam(&mActor) == 4); } bool dBomb_c::checkWaterBomb(fopAc_ac_c* param_1) { - return (fopAcM_GetName(&mActor) == 0x221 && daNbomb_c::checkWaterBomb()); + return (fopAcM_GetName(&mActor) == PROC_NBOMB && daNbomb_c::checkWaterBomb()); } bool dBomb_c::checkInsectBombMove(fopAc_ac_c* param_1) { - return (fopAcM_GetName(&mActor) == 0x221 && fopAcM_GetParam(&mActor) == 7); + return (fopAcM_GetName(&mActor) == PROC_NBOMB && fopAcM_GetParam(&mActor) == 7); }
\ No newline at end of file diff --git a/src/d/d_error_msg.cpp b/src/d/d_error_msg.cpp index f6817d78eb..92b3bb011a 100644 --- a/src/d/d_error_msg.cpp +++ b/src/d/d_error_msg.cpp @@ -184,7 +184,7 @@ extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; /* ############################################################################################## */ /* 8037B140-8037B180 0077A0 0040+00 1/1 0/0 0/0 .rodata black_tex */ -SECTION_RODATA static u8 const black_tex[64] = { +SECTION_RODATA static u8 const black_tex[64] ALIGN_DECL(32) = { 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, diff --git a/src/d/d_eye_hl.cpp b/src/d/d_eye_hl.cpp index 693147dc5a..394740abb3 100644 --- a/src/d/d_eye_hl.cpp +++ b/src/d/d_eye_hl.cpp @@ -4,7 +4,10 @@ // #include "d/d_eye_hl.h" +#include "MSL_C.PPCEABI.bare.H/MSL_Common/Src/string.h" +#include "d/com/d_com_inf_game.h" #include "dol2asm.h" +#include "dolphin/os/OS.h" #include "dolphin/types.h" // @@ -26,52 +29,45 @@ extern "C" extern u8 struct_80450FBC[4]; // External References: // -extern "C" void OSReport_Error(); extern "C" void getName__10JUTNameTabCFUs(); extern "C" void _savegpr_27(); extern "C" void _restgpr_27(); -extern "C" void strcmp(); -extern "C" extern u8 g_dComIfG_gameInfo[122384]; extern "C" extern u8 g_envHIO[68]; // // Declarations: // -/* ############################################################################################## */ -/* 8037B100-8037B100 007760 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_8037B100 = - "目のハイライトテクスチャーがありません!\n"; -/* @stringBase0 padding */ -SECTION_DEAD static char const* const pad_8037B12A = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; -#pragma pop - /* 8009C964-8009CA28 0972A4 00C4+00 0/0 2/2 0/0 .text entry__8dEyeHL_cFP12J3DModelDataPCc */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dEyeHL_c::entry(J3DModelData* param_0, char const* param_1) { - nofralloc -#include "asm/d/d_eye_hl/entry__8dEyeHL_cFP12J3DModelDataPCc.s" +void dEyeHL_c::entry(J3DModelData* p_mData, char const* name) { + J3DTexture* tex = p_mData->getTexture(); + JUTNameTab* tex_nametab = p_mData->getTextureName(); + + if (tex != NULL && tex_nametab != NULL) { + for (u16 i = 0; i < tex->getNum(); i++) { + const char* tex_name = tex_nametab->getName(i); + + if (tex_name != NULL && !strcmp(tex_name, name)) { + m_timg = tex->getResTIMG(i); + m_lodBias = m_timg->LODBias; + dEyeHL_mng_c::entry(this); + return; + } + } + } + // "Eye Highlight Texture doesn't exist!\n" + OSReport_Error("目のハイライトテクスチャーがありません!\n"); } -#pragma pop /* 8009CA28-8009CA48 097368 0020+00 0/0 3/3 0/0 .text remove__8dEyeHL_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dEyeHL_c::remove() { - nofralloc -#include "asm/d/d_eye_hl/remove__8dEyeHL_cFv.s" +void dEyeHL_c::remove() { + dEyeHL_mng_c::remove(this); } -#pragma pop /* ############################################################################################## */ /* 80450FA8-80450FB0 0004A8 0004+04 3/3 0/0 0/0 .sbss m_obj__12dEyeHL_mng_c */ -u8 dEyeHL_mng_c::m_obj[4 + 4 /* padding */]; +dEyeHL_mng_c* dEyeHL_mng_c::m_obj; /* 80452C10-80452C14 001210 0004+00 1/1 0/0 0/0 .sdata2 @3862 */ SECTION_SDATA2 static f32 lit_3862 = 2.0f; @@ -79,7 +75,30 @@ SECTION_SDATA2 static f32 lit_3862 = 2.0f; /* 80452C14-80452C18 001214 0004+00 1/1 0/0 0/0 .sdata2 @3863 */ SECTION_SDATA2 static f32 lit_3863 = 45.0f; +inline BOOL dComIfGp_event_runCheck() { + return g_dComIfG_gameInfo.play.getEvent().runCheck(); +} + /* 8009CA48-8009CB14 097388 00CC+00 0/0 1/1 0/0 .text update__12dEyeHL_mng_cFv */ +// small issue with cLib_minMaxLimit +#ifdef NONMATCHING +void dEyeHL_mng_c::update() { + dEyeHL_mng_c* obj = m_obj; + + if (g_envHIO[0x10] == 0 || !dComIfGp_event_runCheck()) { + for (; obj != NULL; obj = obj->m_next) { + obj->m_timg->LODBias = obj->m_lodBias; + } + } else { + s16 tmp = 2.0f * (dComIfGd_getView()->field_0xd0 - 45.0f); + for (; obj != NULL; obj = obj->m_next) { + ResTIMG* timg = obj->m_timg; + timg->LODBias = obj->m_lodBias + tmp; + timg->LODBias = cLib_minMaxLimit(timg->LODBias, (s16)-400, (s16)399); + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -88,27 +107,41 @@ asm void dEyeHL_mng_c::update() { #include "asm/d/d_eye_hl/update__12dEyeHL_mng_cFv.s" } #pragma pop +#endif /* 8009CB14-8009CB34 097454 0020+00 1/1 0/0 0/0 .text entry__12dEyeHL_mng_cFP8dEyeHL_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dEyeHL_mng_c::entry(dEyeHL_c* param_0) { - nofralloc -#include "asm/d/d_eye_hl/entry__12dEyeHL_mng_cFP8dEyeHL_c.s" +void dEyeHL_mng_c::entry(dEyeHL_c* i_obj) { + if (m_obj != NULL) { + m_obj->m_pre = i_obj; + } + i_obj->m_next = m_obj; + m_obj = i_obj; } -#pragma pop /* 8009CB34-8009CB88 097474 0054+00 1/1 0/0 0/0 .text remove__12dEyeHL_mng_cFP8dEyeHL_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dEyeHL_mng_c::remove(dEyeHL_c* param_0) { - nofralloc -#include "asm/d/d_eye_hl/remove__12dEyeHL_mng_cFP8dEyeHL_c.s" +void dEyeHL_mng_c::remove(dEyeHL_c* i_obj) { + if (i_obj->m_timg != NULL) { + dEyeHL_mng_c* prev = i_obj->m_pre; + dEyeHL_mng_c* next = i_obj->m_next; + + if (next != NULL) { + next->m_pre = prev; + } + + if (prev == NULL) { + m_obj = next; + } else { + prev->m_next = next; + next = m_obj; + } + + i_obj->m_timg->LODBias = i_obj->m_lodBias; + i_obj->m_timg = NULL; + i_obj->m_pre = NULL; + i_obj->m_next = NULL; + } } -#pragma pop /* ############################################################################################## */ /* 80450FB0-80450FB8 -00001 0008+00 0/0 2/2 0/0 .sbss None */ @@ -116,7 +149,7 @@ asm void dEyeHL_mng_c::remove(dEyeHL_c* param_0) { /* 80450FB1 0001+00 data_80450FB1 None */ /* 80450FB2 0006+00 data_80450FB2 None */ extern u8 struct_80450FB0[8]; -u8 struct_80450FB0[8]; +u8 struct_80450FB0[8] ALIGN_DECL(8); /* 80450FB8-80450FBC -00001 0004+00 0/0 1/1 0/0 .sbss None */ /* 80450FB8 0001+00 data_80450FB8 None */ diff --git a/src/d/d_kyeff.cpp b/src/d/d_kyeff.cpp index 16837abee3..d4946a6fcf 100644 --- a/src/d/d_kyeff.cpp +++ b/src/d/d_kyeff.cpp @@ -8,6 +8,8 @@ #include "dol2asm.h" #include "dolphin/types.h" +#include "d/com/d_com_inf_game.h" + // // Types: // @@ -42,12 +44,8 @@ extern "C" void dKyw_wether_move_draw__Fv(); extern "C" void dKyw_wether_draw__Fv(); extern "C" void dKy_FiveSenses_fullthrottle_dark__Fv(); extern "C" void framework__10Z2EnvSeMgrFv(); -extern "C" void OSGetTime(); -extern "C" void OSTicksToCalendarTime(); -extern "C" void strcmp(); extern "C" extern void* g_fopKy_Method[5 + 1 /* padding */]; extern "C" extern void* g_fpcLf_Method[5 + 1 /* padding */]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; extern "C" extern u8 g_env_light[4880]; extern "C" extern u8 g_mEnvSeMgr[780]; @@ -55,6 +53,11 @@ extern "C" extern u8 g_mEnvSeMgr[780]; // Declarations: // +/* 801ADD00-801ADD38 1A8640 0038+00 2/2 0/0 0/0 .text dKankyo_DayProc__Fv */ +void dKankyo_DayProc() { + dComIfGs_offTmpBit(dSv_event_tmp_flag_c::tempBitLabels[91]); +} + static bool dKyeff_Draw(dKyeff_c* ptr) { dKyw_wether_draw(); return true; diff --git a/src/d/kankyo/d_kankyo.cpp b/src/d/kankyo/d_kankyo.cpp index bc55d5987b..051381c62b 100644 --- a/src/d/kankyo/d_kankyo.cpp +++ b/src/d/kankyo/d_kankyo.cpp @@ -4,10 +4,14 @@ // #include "d/kankyo/d_kankyo.h" +#include "MSL_C.PPCEABI.bare.H/MSL_Common/Src/mem.h" +#include "Z2AudioLib/Z2EnvSeMgr.h" #include "d/com/d_com_inf_game.h" #include "d/kankyo/d_kankyo_data.h" +#include "d/msg/d_msg_object.h" #include "dol2asm.h" #include "dolphin/types.h" +#include "m_Do/m_Do_audio.h" // // Types: @@ -21,28 +25,6 @@ struct mDoMtx_stack_c { struct color_RGB_class {}; -struct Z2SeMgr { - /* 802AB984 */ void seStart(JAISoundID, Vec const*, u32, s8, f32, f32, f32, f32, u8); -}; - -struct Z2SceneMgr { - /* 802BA120 */ void load2ndDynamicWave(); -}; - -struct Z2EnvSeMgr { - /* 802C611C */ Z2EnvSeMgr(); - /* 802C6540 */ ~Z2EnvSeMgr(); - /* 802C6998 */ void resetScene(); -}; - -struct Z2AudioMgr { - static u8 mAudioMgrPtr[4 + 4 /* padding */]; -}; - -struct JMath { - static u8 sincosTable_[65536]; -}; - // // Forward References: // @@ -359,7 +341,6 @@ extern "C" void _restgpr_26(); extern "C" void _restgpr_27(); extern "C" void _restgpr_28(); extern "C" void _restgpr_29(); -extern "C" void memcmp(); extern "C" u8 const tempBitLabels__20dSv_event_tmp_flag_c[370 + 2 /* padding */]; extern "C" extern void* __vt__12J3DFrameCtrl[3]; extern "C" extern void* g_fopKy_Method[5 + 1 /* padding */]; @@ -382,78 +363,172 @@ inline BOOL dComIfGs_isEventBit(u16 id) { } /* 8019C388-8019C3A4 196CC8 001C+00 2/2 0/0 0/0 .text dKy_WolfPowerup_AmbCol__FP11_GXColorS10 */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dKy_WolfPowerup_AmbCol(_GXColorS10* param_0) { - nofralloc -#include "asm/d/kankyo/d_kankyo/dKy_WolfPowerup_AmbCol__FP11_GXColorS10.s" +static void dKy_WolfPowerup_AmbCol(GXColorS10* in_col_p) { + in_col_p->r = 40; + in_col_p->g = 52; + in_col_p->b = 49; } -#pragma pop - -/* ############################################################################################## */ -/* 80394C6C-80394C6C 0212CC 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80394C6C = "F_SP115"; -SECTION_DEAD static char const* const stringBase_80394C74 = "F_SP113"; -SECTION_DEAD static char const* const stringBase_80394C7C = "D_SB10"; -SECTION_DEAD static char const* const stringBase_80394C83 = "F_SP112"; -SECTION_DEAD static char const* const stringBase_80394C8B = "F_SP126"; -SECTION_DEAD static char const* const stringBase_80394C93 = "F_SP114"; -SECTION_DEAD static char const* const stringBase_80394C9B = "D_MN05"; -SECTION_DEAD static char const* const stringBase_80394CA2 = "D_MN04"; -SECTION_DEAD static char const* const stringBase_80394CA9 = "D_SB04"; -SECTION_DEAD static char const* const stringBase_80394CB0 = "D_SB05"; -SECTION_DEAD static char const* const stringBase_80394CB7 = "D_SB06"; -SECTION_DEAD static char const* const stringBase_80394CBE = "D_SB07"; -SECTION_DEAD static char const* const stringBase_80394CC5 = "D_SB08"; -SECTION_DEAD static char const* const stringBase_80394CCC = "D_SB09"; -SECTION_DEAD static char const* const stringBase_80394CD3 = "D_MN10A"; -SECTION_DEAD static char const* const stringBase_80394CDB = "D_MN07A"; -SECTION_DEAD static char const* const stringBase_80394CE3 = "D_MN10B"; -SECTION_DEAD static char const* const stringBase_80394CEB = "D_MN10"; -SECTION_DEAD static char const* const stringBase_80394CF2 = "D_MN11A"; -SECTION_DEAD static char const* const stringBase_80394CFA = "D_MN11"; -SECTION_DEAD static char const* const stringBase_80394D01 = "D_MN11B"; -SECTION_DEAD static char const* const stringBase_80394D09 = "D_SB00"; -SECTION_DEAD static char const* const stringBase_80394D10 = "D_MN09B"; -SECTION_DEAD static char const* const stringBase_80394D18 = "D_MN09C"; -SECTION_DEAD static char const* const stringBase_80394D20 = "F_SP116"; -SECTION_DEAD static char const* const stringBase_80394D28 = "D_MN06"; -SECTION_DEAD static char const* const stringBase_80394D2F = "D_MN07"; -SECTION_DEAD static char const* const stringBase_80394D36 = "D_MN09A"; -SECTION_DEAD static char const* const stringBase_80394D3E = "D_SB01"; -SECTION_DEAD static char const* const stringBase_80394D45 = "R_SP300"; -SECTION_DEAD static char const* const stringBase_80394D4D = "R_SP301"; -SECTION_DEAD static char const* const stringBase_80394D55 = "D_MN01"; -SECTION_DEAD static char const* const stringBase_80394D5C = "D_MN01B"; -SECTION_DEAD static char const* const stringBase_80394D64 = "D_MN01A"; -SECTION_DEAD static char const* const stringBase_80394D6C = "D_MN08"; -SECTION_DEAD static char const* const stringBase_80394D73 = "D_SB02"; -SECTION_DEAD static char const* const stringBase_80394D7A = "D_SB03"; -SECTION_DEAD static char const* const stringBase_80394D81 = "R_SP01"; -SECTION_DEAD static char const* const stringBase_80394D88 = "R_SP108"; -SECTION_DEAD static char const* const stringBase_80394D90 = "R_SP209"; -SECTION_DEAD static char const* const stringBase_80394D98 = "R_SP116"; -SECTION_DEAD static char const* const stringBase_80394DA0 = "R_SP161"; -SECTION_DEAD static char const* const stringBase_80394DA8 = "F_SP110"; -SECTION_DEAD static char const* const stringBase_80394DB0 = "R_SP107"; -SECTION_DEAD static char const* const stringBase_80394DB8 = "R_SP128"; -SECTION_DEAD static char const* const stringBase_80394DC0 = "R_SP160"; -SECTION_DEAD static char const* const stringBase_80394DC8 = "R_SP127"; -SECTION_DEAD static char const* const stringBase_80394DD0 = "R_SP109"; -#pragma pop /* 8019C3A4-8019CB0C 196CE4 0768+00 2/2 0/0 0/0 .text dKy_sense_pat_get__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dKy_sense_pat_get() { - nofralloc -#include "asm/d/kankyo/d_kankyo/dKy_sense_pat_get__Fv.s" +static s32 dKy_sense_pat_get() { + s32 pat = 0; + if (dKy_Outdoor_check()) { + pat = 1; + } else { + pat = 5; + } + + // Stage is Lake Hylia + if (!strcmp(dComIfGp_getStartStageName(), "F_SP115")) { + pat = 9; + + // Room is Lake + if (dComIfGp_roomControl_getStayNo() == 0 && dComIfGs_isSaveSwitch(0x11) && + !dComIfGs_isSaveSwitch(0x75)) { + pat = 2; + } + + if (dComIfGs_sense_type_change_Get() > 0) { + pat = 13; + } + } + // Stage is Zora's Domain + else if (!strcmp(dComIfGp_getStartStageName(), "F_SP113")) { + if (dComIfGs_sense_type_change_Get() > 0) { + pat = 13; + } else { + pat = 1; + } + } + // Stage is Faron Woods Cave + else if (!strcmp(dComIfGp_getStartStageName(), "D_SB10")) { + pat = 1; + } + // Stage is Zora's River + else if (!strcmp(dComIfGp_getStartStageName(), "F_SP112")) { + pat = 3; + } + // Stage is Upper Zora's River + else if (!strcmp(dComIfGp_getStartStageName(), "F_SP126")) { + pat = 6; + } + // Stage is Snowpeak + else if (!strcmp(dComIfGp_getStartStageName(), "F_SP114")) { + pat = 4; + } + // Stage is Forest Temple or Goron Mines or Goron Stockcave or Grotto + else if (!memcmp(dComIfGp_getStartStageName(), "D_MN05", 6) || + !memcmp(dComIfGp_getStartStageName(), "D_MN04", 6) || + !memcmp(dComIfGp_getStartStageName(), "D_SB04", 6) || + !memcmp(dComIfGp_getStartStageName(), "D_SB05", 6) || + !memcmp(dComIfGp_getStartStageName(), "D_SB06", 6) || + !memcmp(dComIfGp_getStartStageName(), "D_SB07", 6) || + !memcmp(dComIfGp_getStartStageName(), "D_SB08", 6) || + !memcmp(dComIfGp_getStartStageName(), "D_SB09", 6)) { + pat = 5; + } + // Stage is Stallord arena or Argorok arena + else if (!strcmp(dComIfGp_getStartStageName(), "D_MN10A") || + !strcmp(dComIfGp_getStartStageName(), "D_MN07A")) { + pat = 14; + } + // Stage is Death Sword arena + else if (!strcmp(dComIfGp_getStartStageName(), "D_MN10B")) { + pat = 15; + } + // Stage is Arbiter's Grounds + else if (!strcmp(dComIfGp_getStartStageName(), "D_MN10")) { + pat = 8; + // Room is Central Poe room + if (dComIfGp_roomControl_getStayNo() == 2) { + pat = 14; + // Room is 2nd Poe room or 4th Poe room + } else if (dComIfGp_roomControl_getStayNo() == 3 || dComIfGp_roomControl_getStayNo() == 8) { + pat = 6; + } + } + // Stage is Blizzeta arena + else if (!strcmp(dComIfGp_getStartStageName(), "D_MN11A")) { + pat = 4; + } + // Stage is Snowpeak Ruins or Darkhammer or Ice Puzzle cave + else if (!strcmp(dComIfGp_getStartStageName(), "D_MN11") || + !strcmp(dComIfGp_getStartStageName(), "D_MN11B") || + !memcmp(dComIfGp_getStartStageName(), "D_SB00", 6)) { + pat = 7; + + // Stage is Snowpeak Ruins and Room is Courtyard + if (!strcmp(dComIfGp_getStartStageName(), "D_MN11") && + dComIfGp_roomControl_getStayNo() == 4) { + pat = 4; + } + } + // Stage is Ganondorf Field or Ganondorf Defeated or Castle Town + else if (!strcmp(dComIfGp_getStartStageName(), "D_MN09B") || + !strcmp(dComIfGp_getStartStageName(), "D_MN09C") || + !strcmp(dComIfGp_getStartStageName(), "F_SP116")) { + pat = 1; + } + // Stage is Temple of Time or City in the Sky or Hyrule Castle Throne Room or + // Cave of Ordeals or Cloud Sea or Hyrule Castle cutscenes or Lakebed Temple or Deku Toad + else if (!memcmp(dComIfGp_getStartStageName(), "D_MN06", 6) || + !strcmp(dComIfGp_getStartStageName(), "D_MN07") || + !strcmp(dComIfGp_getStartStageName(), "D_MN09A") || + !memcmp(dComIfGp_getStartStageName(), "D_SB01", 6) || + !strcmp(dComIfGp_getStartStageName(), "R_SP300") || + !strcmp(dComIfGp_getStartStageName(), "R_SP301") || + !strcmp(dComIfGp_getStartStageName(), "D_MN01") || + !strcmp(dComIfGp_getStartStageName(), "D_MN01B")) { + pat = 8; + } + // Stage is Morpheel arena + else if (!strcmp(dComIfGp_getStartStageName(), "D_MN01A")) { + pat = 14; + } + // Stage is Palace of Twilight + else if (!memcmp(dComIfGp_getStartStageName(), "D_MN08", 6)) { + pat = 9; + } + // Stage is Gorge Cave or Lake Hylia Cave + else if (!memcmp(dComIfGp_getStartStageName(), "D_SB02", 6) || + !memcmp(dComIfGp_getStartStageName(), "D_SB03", 6)) { + pat = 10; + } + // Stage is Ordon Village Interiors or Faron Woods Interiors or + // Kakariko Graveyard or Telma's Bar or STAR game or Death Mountain or + // Hyrule Castle sewers + else if (!strcmp(dComIfGp_getStartStageName(), "R_SP01") || + !strcmp(dComIfGp_getStartStageName(), "R_SP108") || + !strcmp(dComIfGp_getStartStageName(), "R_SP209") || + !strcmp(dComIfGp_getStartStageName(), "R_SP116") || + !strcmp(dComIfGp_getStartStageName(), "R_SP161") || + !strcmp(dComIfGp_getStartStageName(), "F_SP110") || + !strcmp(dComIfGp_getStartStageName(), "R_SP107")) { + pat = 11; + + // Stage is Ordon Village and Room is Sera's Shop + if (!strcmp(dComIfGp_getStartStageName(), "R_SP01") && + dComIfGp_roomControl_getStayNo() == 1) { + pat = 12; + } + } + // Stage is Hidden Village interiors or Castle Town interiors or Fishing Pond interiors + else if (!strcmp(dComIfGp_getStartStageName(), "R_SP128") || + !strcmp(dComIfGp_getStartStageName(), "R_SP160") || + !strcmp(dComIfGp_getStartStageName(), "R_SP127")) { + pat = 12; + } + // Stage is Kakariko Village interiors + else if (!strcmp(dComIfGp_getStartStageName(), "R_SP109")) { + pat = 12; + + // Room is Sanctuary or Inn + if (dComIfGp_roomControl_getStayNo() == 0 || dComIfGp_roomControl_getStayNo() == 2) { + pat = 11; + } + } + return pat; } -#pragma pop /* ############################################################################################## */ /* 803BBDB8-803BBDC4 018ED8 000C+00 1/1 0/0 0/0 .data cNullVec__6Z2Calc */ @@ -481,39 +556,86 @@ SECTION_DATA static u8 lightStatusBase[232] = { }; /* 803BBEAC-803BBEBC 018FCC 0010+00 4/4 0/0 0/0 .data lightMaskData */ -SECTION_DATA static u8 lightMaskData[16] = { - 0x00, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, -}; - -/* 803BBEBC-803BBEFC -00001 0040+00 1/1 0/0 0/0 .data @4322 */ -SECTION_DATA static void* lit_4322[16] = { - (void*)(((char*)dKy_WolfPowerup_BgAmbCol__FP11_GXColorS10) + 0x1BC), - (void*)(((char*)dKy_WolfPowerup_BgAmbCol__FP11_GXColorS10) + 0x38), - (void*)(((char*)dKy_WolfPowerup_BgAmbCol__FP11_GXColorS10) + 0x54), - (void*)(((char*)dKy_WolfPowerup_BgAmbCol__FP11_GXColorS10) + 0x70), - (void*)(((char*)dKy_WolfPowerup_BgAmbCol__FP11_GXColorS10) + 0x8C), - (void*)(((char*)dKy_WolfPowerup_BgAmbCol__FP11_GXColorS10) + 0xA8), - (void*)(((char*)dKy_WolfPowerup_BgAmbCol__FP11_GXColorS10) + 0xC4), - (void*)(((char*)dKy_WolfPowerup_BgAmbCol__FP11_GXColorS10) + 0xE0), - (void*)(((char*)dKy_WolfPowerup_BgAmbCol__FP11_GXColorS10) + 0xFC), - (void*)(((char*)dKy_WolfPowerup_BgAmbCol__FP11_GXColorS10) + 0x118), - (void*)(((char*)dKy_WolfPowerup_BgAmbCol__FP11_GXColorS10) + 0x150), - (void*)(((char*)dKy_WolfPowerup_BgAmbCol__FP11_GXColorS10) + 0x134), - (void*)(((char*)dKy_WolfPowerup_BgAmbCol__FP11_GXColorS10) + 0x134), - (void*)(((char*)dKy_WolfPowerup_BgAmbCol__FP11_GXColorS10) + 0x16C), - (void*)(((char*)dKy_WolfPowerup_BgAmbCol__FP11_GXColorS10) + 0x188), - (void*)(((char*)dKy_WolfPowerup_BgAmbCol__FP11_GXColorS10) + 0x1A4), +SECTION_DATA static u16 lightMaskData[8] = { + 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, }; /* 8019CB0C-8019CCDC 19744C 01D0+00 3/2 0/0 0/0 .text dKy_WolfPowerup_BgAmbCol__FP11_GXColorS10 */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dKy_WolfPowerup_BgAmbCol(_GXColorS10* param_0) { - nofralloc -#include "asm/d/kankyo/d_kankyo/dKy_WolfPowerup_BgAmbCol__FP11_GXColorS10.s" +static void dKy_WolfPowerup_BgAmbCol(GXColorS10* in_col_p) { + switch (dKy_sense_pat_get()) { + case 1: + in_col_p->r = 33; + in_col_p->g = 48; + in_col_p->b = 44; + break; + case 2: + in_col_p->r = 33; + in_col_p->g = 48; + in_col_p->b = 44; + break; + case 3: + in_col_p->r = 40; + in_col_p->g = 53; + in_col_p->b = 49; + break; + case 4: + in_col_p->r = 32; + in_col_p->g = 46; + in_col_p->b = 40; + break; + case 5: + in_col_p->r = 45; + in_col_p->g = 64; + in_col_p->b = 58; + break; + case 6: + in_col_p->r = 33; + in_col_p->g = 48; + in_col_p->b = 44; + break; + case 7: + in_col_p->r = 38; + in_col_p->g = 53; + in_col_p->b = 49; + break; + case 8: + in_col_p->r = 33; + in_col_p->g = 48; + in_col_p->b = 44; + break; + case 9: + in_col_p->r = 40; + in_col_p->g = 59; + in_col_p->b = 53; + break; + case 11: + case 12: + in_col_p->r = 45; + in_col_p->g = 64; + in_col_p->b = 58; + break; + case 10: + in_col_p->r = 40; + in_col_p->g = 60; + in_col_p->b = 58; + break; + case 13: + in_col_p->r = 33; + in_col_p->g = 48; + in_col_p->b = 44; + break; + case 14: + in_col_p->r = 33; + in_col_p->g = 48; + in_col_p->b = 44; + break; + case 15: + in_col_p->r = 30; + in_col_p->g = 48; + in_col_p->b = 59; + break; + } } -#pragma pop /* ############################################################################################## */ /* 803BBEFC-803BBF3C -00001 0040+00 1/1 0/0 0/0 .data @4364 */ @@ -639,7 +761,6 @@ static asm void dKy_pos2_get_angle(cXyz* param_0, cXyz* param_1, s16* param_2, s static u8 lit_4112[12]; /* 8042CA54-8042DD64 059774 1310+00 116/118 128/128 649/649 .bss g_env_light */ -extern u8 g_env_light[4880]; u8 g_env_light[4880]; /* 80453C28-80453C2C 002228 0004+00 1/1 0/0 0/0 .sdata2 @4441 */ @@ -818,21 +939,16 @@ static asm void float_kankyo_color_ratio_set(f32 param_0, f32 param_1, f32 param #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void get_parcent(f32 param_0, f32 param_1, f32 param_2) { +static asm f32 get_parcent(f32 param_0, f32 param_1, f32 param_2) { nofralloc #include "asm/d/kankyo/d_kankyo/get_parcent__Ffff.s" } #pragma pop /* 8019D8AC-8019D8CC 1981EC 0020+00 0/0 1/1 1/1 .text dKy_get_parcent__Ffff */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKy_get_parcent(f32 param_0, f32 param_1, f32 param_2) { - nofralloc -#include "asm/d/kankyo/d_kankyo/dKy_get_parcent__Ffff.s" +f32 dKy_get_parcent(f32 param_0, f32 param_1, f32 param_2) { + return get_parcent(param_0, param_1, param_2); } -#pragma pop /* ############################################################################################## */ /* 80453C64-80453C68 002264 0004+00 4/4 0/0 0/0 .sdata2 @4730 */ @@ -856,14 +972,9 @@ static asm void dKy_FiveSenses_fullthrottle_dark_static1() { #pragma pop /* 8019DD4C-8019DD6C 19868C 0020+00 0/0 1/1 0/0 .text dKy_FiveSenses_fullthrottle_dark__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKy_FiveSenses_fullthrottle_dark() { - nofralloc -#include "asm/d/kankyo/d_kankyo/dKy_FiveSenses_fullthrottle_dark__Fv.s" +void dKy_FiveSenses_fullthrottle_dark() { + dKy_FiveSenses_fullthrottle_dark_static1(); } -#pragma pop /* ############################################################################################## */ /* 80394C6C-80394C6C 0212CC 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ @@ -907,14 +1018,10 @@ static asm void dKy_eflight_influence_id(cXyz param_0, int param_1) { #pragma pop /* 8019E404-8019E430 198D44 002C+00 1/1 0/0 0/0 .text dKy_light_influence_col__Fi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dKy_light_influence_col(int param_0) { - nofralloc -#include "asm/d/kankyo/d_kankyo/dKy_light_influence_col__Fi.s" +static GXColorS10 dKy_light_influence_col(int param_0) { + dScnKy_env_light_c* env_light = ((dScnKy_env_light_c*)g_env_light); + return env_light->mPointLight[param_0 >= 0 ? param_0 : 0]->mColor; } -#pragma pop /* ############################################################################################## */ /* 80453C80-80453C88 002280 0008+00 14/14 0/0 0/0 .sdata2 @4964 */ @@ -931,24 +1038,16 @@ asm void dKy_light_influence_col(_GXColor* param_0, f32 param_1) { #pragma pop /* 8019E520-8019E548 198E60 0028+00 1/1 0/0 0/0 .text dKy_light_influence_power__Fi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dKy_light_influence_power(int param_0) { - nofralloc -#include "asm/d/kankyo/d_kankyo/dKy_light_influence_power__Fi.s" +static f32 dKy_light_influence_power(int param_0) { + dScnKy_env_light_c* env_light = ((dScnKy_env_light_c*)g_env_light); + return env_light->mPointLight[param_0 >= 0 ? param_0 : 0]->mPow; } -#pragma pop /* 8019E548-8019E570 198E88 0028+00 1/1 0/0 0/0 .text dKy_light_influence_yuragi__Fi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dKy_light_influence_yuragi(int param_0) { - nofralloc -#include "asm/d/kankyo/d_kankyo/dKy_light_influence_yuragi__Fi.s" +static f32 dKy_light_influence_yuragi(int param_0) { + dScnKy_env_light_c* env_light = ((dScnKy_env_light_c*)g_env_light); + return env_light->mPointLight[param_0 >= 0 ? param_0 : 0]->mFluctuation; } -#pragma pop /* 8019E570-8019E694 198EB0 0124+00 1/1 0/0 0/0 .text dKy_light_influence_distance__F4cXyzi */ #pragma push @@ -965,24 +1064,28 @@ static asm void dKy_light_influence_distance(cXyz param_0, int param_1) { SECTION_SDATA2 static f32 lit_5077 = 99999.8984375f; /* 8019E694-8019E708 198FD4 0074+00 2/2 0/0 0/0 .text plight_init__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void plight_init() { - nofralloc -#include "asm/d/kankyo/d_kankyo/plight_init__Fv.s" +static void plight_init() { + (*(dScnKy_env_light_c*)g_env_light).field_0x38[0].mPow = lit_5077; + + for (int i = 0; i < 100; i++) { + (*(dScnKy_env_light_c*)g_env_light).mPointLight[i] = NULL; + } + + for (int i = 0; i < 5; i++) { + (*(dScnKy_env_light_c*)g_env_light).mEfPLight[i] = NULL; + (*(dScnKy_env_light_c*)g_env_light).field_0x72c[i] = NULL; + } + + (*(dScnKy_env_light_c*)g_env_light).field_0x12a4 = -1; + (*(dScnKy_env_light_c*)g_env_light).field_0x12a8 = -1; } -#pragma pop /* 8019E708-8019E734 199048 002C+00 1/1 0/0 0/0 .text darkmist_init__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void darkmist_init() { - nofralloc -#include "asm/d/kankyo/d_kankyo/darkmist_init__Fv.s" +static void darkmist_init() { + for (int i = 0; i < 10; i++) { + (*(dScnKy_env_light_c*)g_env_light).mDalkmistInf[i] = NULL; + } } -#pragma pop /* ############################################################################################## */ /* 80453C8C-80453C90 00228C 0004+00 6/6 0/0 0/0 .sdata2 @5106 */ @@ -1047,32 +1150,54 @@ static asm void dungeonlight_init() { } #pragma pop -/* ############################################################################################## */ -/* 80394C6C-80394C6C 0212CC 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80394DDF = "Always"; -#pragma pop - /* 8019EAA0-8019EBD0 1993E0 0130+00 1/1 0/0 0/0 .text undwater_init__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void undwater_init() { - nofralloc -#include "asm/d/kankyo/d_kankyo/undwater_init__Fv.s" +static void undwater_init() { + J3DModelData* modelData2 = (J3DModelData*)dComIfG_getObjectRes("Always", 0x1D); + (*(dScnKy_env_light_c*)g_env_light).field_0xf38 = + mDoExt_createSolidHeapFromGameToCurrent(0x600, 0x20); + + if ((*(dScnKy_env_light_c*)g_env_light).field_0xf38 != NULL) { + (*(dScnKy_env_light_c*)g_env_light).field_0xf30 = + mDoExt_J3DModel__create(modelData2, 0x80000, 0x11020202); + + if ((*(dScnKy_env_light_c*)g_env_light).field_0xf30 != NULL) { + (*(dScnKy_env_light_c*)g_env_light).field_0x105c = new mDoExt_btkAnm(); + + if ((*(dScnKy_env_light_c*)g_env_light).field_0x105c != NULL) { + J3DAnmTextureSRTKey* key = + (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("Always", 0x3C); + (*(dScnKy_env_light_c*)g_env_light) + .field_0x105c->init(modelData2, key, 1, 2, lit_4505, 0, -1); + } + } + mDoExt_restoreCurrentHeap(); + mDoExt_adjustSolidHeap((*(dScnKy_env_light_c*)g_env_light).field_0xf38); + } } -#pragma pop /* 8019EBD0-8019EC98 199510 00C8+00 1/1 0/0 0/0 .text dKy_light_size_get__FPCc */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dKy_light_size_get(char const* param_0) { - nofralloc -#include "asm/d/kankyo/d_kankyo/dKy_light_size_get__FPCc.s" +static void dKy_light_size_get(char const* stage) { + dKydata_lightsizeInfo_c* lightTbl = dKyd_light_size_tbl_getp(); + dKydata_lightsizeInfo_c* lightTwTbl = dKyd_light_tw_size_tbl_getp(); + + if (!dKy_darkworld_check()) { + for (int i = 0; i < 36; i++) { + if (!strcmp(stage, lightTbl->stageName)) { + (*(dScnKy_env_light_c*)g_env_light).field_0x1309 = lightTbl->size; + return; + } + lightTbl++; + } + } else { + for (int i = 0; i < 9; i++) { + if (!strcmp(stage, lightTwTbl->stageName)) { + (*(dScnKy_env_light_c*)g_env_light).field_0x1309 = lightTwTbl->size; + return; + } + lightTwTbl++; + } + } } -#pragma pop /* ############################################################################################## */ /* 80394C6C-80394C6C 0212CC 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ @@ -1370,34 +1495,15 @@ SECTION_DATA extern void* __vt__18dScnKy_env_light_c[3 + 4 /* padding */] = { }; /* 8019F2E8-8019F400 199C28 0118+00 1/1 0/0 0/0 .text __ct__18dScnKy_env_light_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm dScnKy_env_light_c::dScnKy_env_light_c() { - nofralloc -#include "asm/d/kankyo/d_kankyo/__ct__18dScnKy_env_light_cFv.s" +dScnKy_env_light_c::dScnKy_env_light_c() { + dKy_clear_game_init(); } -#pragma pop /* 8019F400-8019F438 199D40 0038+00 1/1 0/0 0/0 .text __ct__19GB_MAPLE_COL_CHANGEFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm GB_MAPLE_COL_CHANGE::GB_MAPLE_COL_CHANGE() { - nofralloc -#include "asm/d/kankyo/d_kankyo/__ct__19GB_MAPLE_COL_CHANGEFv.s" -} -#pragma pop +GB_MAPLE_COL_CHANGE::GB_MAPLE_COL_CHANGE() {} /* 8019F438-8019F474 199D78 003C+00 2/2 0/0 0/0 .text __dt__10BOSS_LIGHTFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm BOSS_LIGHT::~BOSS_LIGHT() { - nofralloc -#include "asm/d/kankyo/d_kankyo/__dt__10BOSS_LIGHTFv.s" -} -#pragma pop +BOSS_LIGHT::~BOSS_LIGHT() {} /* 8019F474-8019F478 199DB4 0004+00 1/1 0/0 0/0 .text __ct__10BOSS_LIGHTFv */ BOSS_LIGHT::BOSS_LIGHT() { @@ -1405,14 +1511,7 @@ BOSS_LIGHT::BOSS_LIGHT() { } /* 8019F478-8019F4B4 199DB8 003C+00 2/2 0/0 0/0 .text __dt__13DUNGEON_LIGHTFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm DUNGEON_LIGHT::~DUNGEON_LIGHT() { - nofralloc -#include "asm/d/kankyo/d_kankyo/__dt__13DUNGEON_LIGHTFv.s" -} -#pragma pop +DUNGEON_LIGHT::~DUNGEON_LIGHT() {} /* 8019F4B4-8019F4B8 199DF4 0004+00 1/1 0/0 0/0 .text __ct__13DUNGEON_LIGHTFv */ DUNGEON_LIGHT::DUNGEON_LIGHT() { @@ -1420,14 +1519,7 @@ DUNGEON_LIGHT::DUNGEON_LIGHT() { } /* 8019F4B8-8019F4F4 199DF8 003C+00 2/2 0/0 0/0 .text __dt__15WIND_INF_ENTITYFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm WIND_INF_ENTITY::~WIND_INF_ENTITY() { - nofralloc -#include "asm/d/kankyo/d_kankyo/__dt__15WIND_INF_ENTITYFv.s" -} -#pragma pop +WIND_INF_ENTITY::~WIND_INF_ENTITY() {} /* 8019F4F4-8019F4F8 199E34 0004+00 1/1 0/0 0/0 .text __ct__15WIND_INF_ENTITYFv */ WIND_INF_ENTITY::WIND_INF_ENTITY() { @@ -1449,8 +1541,72 @@ SECTION_SDATA2 static f32 lit_5555 = 150.0f; /* 80453CC4-80453CC8 0022C4 0004+00 1/1 0/0 0/0 .sdata2 @5556 */ SECTION_SDATA2 static f32 lit_5556 = 195.0f; +inline BOOL dComIfGp_event_runCheck() { + return g_dComIfG_gameInfo.play.getEvent().runCheck(); +} + /* 8019F4FC-8019F780 199E3C 0284+00 1/1 0/0 0/0 .text setDaytime__18dScnKy_env_light_cFv */ +// matches with literals +#ifdef NONMATCHING +void dScnKy_env_light_c::setDaytime() { + mDate = dComIfGs_getDate(); + mDaytime = dComIfGs_getTime(); + + if (field_0x12fb == 0) { + if (!dKy_darkworld_check()) { + if (!dComIfGp_event_runCheck()) { + fopAc_ac_c* ac = dMsgObject_c::getActor(); + bool tmp = true; + + if (ac != NULL && ac->mEvtInfo.mCommand >= 2) { + tmp = false; + } + + if (dComIfGp_roomControl_getTimePass() && !field_0x130a && tmp) { + mDaytime += mTimeSpeed; + + // Stage is Fishing Pond or Hena's Hut + if (!strcmp(dComIfGp_getStartStageName(), "F_SP127") || + !strcmp(dComIfGp_getStartStageName(), "R_SP127")) { + f32 current_time = mDaytime; + if (current_time >= 300.0f || current_time <= 60.0f) { + mDaytime += mTimeSpeed; + mDaytime += mTimeSpeed; + } else if (current_time >= 150.0f && current_time <= 195.0f) { + mDaytime = current_time + mTimeSpeed; + } + } + + if ((u32)mDaytime >= 360.0f) { + mDaytime = 0.0f; + mDate++; + dKankyo_DayProc(); + } + } + } + } else { + mDarkDaytime += mTimeSpeed; + if ((u32)mDarkDaytime >= 360.0f) { + mDarktimeWeek++; + mDarkDaytime = 0.0f; + } + mDaytime = 0.0f; + } + } + + if (mDaytime >= 360.0f) { + mDaytime = 0.0f; + } + + dComIfGs_setTime(mDaytime); + mDoAud_setHour(dKy_getdaytime_hour()); + mDoAud_setMinute(dKy_getdaytime_minute()); + mDoAud_setWeekday(dKy_get_dayofweek()); + dComIfGs_setDate(mDate); + (*(dScnKy_env_light_c*)g_env_light).field_0x12fb = 0; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -1459,12 +1615,13 @@ asm void dScnKy_env_light_c::setDaytime() { #include "asm/d/kankyo/d_kankyo/setDaytime__18dScnKy_env_light_cFv.s" } #pragma pop +#endif /* 8019F780-8019F788 19A0C0 0008+00 1/1 0/0 0/0 .text GetTimePass__20dStage_roomControl_cFv */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm s8 dStage_roomControl_c::GetTimePass() { +asm s32 dStage_roomControl_c::GetTimePass() { nofralloc #include "asm/d/kankyo/d_kankyo/GetTimePass__20dStage_roomControl_cFv.s" } @@ -1513,44 +1670,43 @@ f32 dScnKy_env_light_c::getDaytime() { } /* 8019FA10-8019FA3C 19A350 002C+00 2/2 2/2 32/32 .text dKy_getdaytime_hour__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKy_getdaytime_hour() { - nofralloc -#include "asm/d/kankyo/d_kankyo/dKy_getdaytime_hour__Fv.s" +s32 dKy_getdaytime_hour() { + return dComIfGs_getTime() / lit_5347; } -#pragma pop /* 8019FA3C-8019FAB8 19A37C 007C+00 1/1 1/1 26/26 .text dKy_getdaytime_minute__Fv */ +// just small regalloc +#ifdef NONMATCHING +s32 dKy_getdaytime_minute() { + f32 tmp = ((s32)(dComIfGs_getTime() * lit_4850) % 15000000); + return tmp / lit_4850 / lit_5347 * lit_5554; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dKy_getdaytime_minute() { +asm s32 dKy_getdaytime_minute() { nofralloc #include "asm/d/kankyo/d_kankyo/dKy_getdaytime_minute__Fv.s" } #pragma pop +#endif /* 8019FAB8-8019FAF4 19A3F8 003C+00 0/0 3/3 6/6 .text dKy_daynight_check__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKy_daynight_check() { - nofralloc -#include "asm/d/kankyo/d_kankyo/dKy_daynight_check__Fv.s" +s32 dKy_daynight_check() { + s32 hour = dKy_getdaytime_hour(); + + if (hour >= 6 && hour < 19) { + return 0; // day time + } else { + return 1; // night time + } } -#pragma pop /* 8019FAF4-8019FB30 19A434 003C+00 0/0 0/0 22/22 .text dKy_getDarktime_hour__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKy_getDarktime_hour() { - nofralloc -#include "asm/d/kankyo/d_kankyo/dKy_getDarktime_hour__Fv.s" +s32 dKy_getDarktime_hour() { + return (*(dScnKy_env_light_c*)g_env_light).getDarkDaytime() / lit_5347; } -#pragma pop /* 8019FB30-8019FBBC 19A470 008C+00 0/0 0/0 19/19 .text dKy_getDarktime_minute__Fv */ #pragma push @@ -1563,24 +1719,14 @@ asm void dKy_getDarktime_minute() { #pragma pop /* 8019FBBC-8019FBCC 19A4FC 0010+00 0/0 0/0 8/8 .text dKy_getDarktime_week__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKy_getDarktime_week() { - nofralloc -#include "asm/d/kankyo/d_kankyo/dKy_getDarktime_week__Fv.s" +s32 dKy_getDarktime_week() { + return (*(dScnKy_env_light_c*)g_env_light).mDarktimeWeek; } -#pragma pop /* 8019FBCC-8019FBD4 19A50C 0008+00 2/2 0/0 0/0 .text getDarkDaytime__18dScnKy_env_light_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dScnKy_env_light_c::getDarkDaytime() { - nofralloc -#include "asm/d/kankyo/d_kankyo/getDarkDaytime__18dScnKy_env_light_cFv.s" +f32 dScnKy_env_light_c::getDarkDaytime() { + return mDarkDaytime; } -#pragma pop /* ############################################################################################## */ /* 80394C6C-80394C6C 0212CC 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ @@ -1939,14 +2085,14 @@ asm void dScnKy_env_light_c::CalcTevColor() { #pragma pop /* 801A4F24-801A4F64 19F864 0040+00 1/1 0/0 0/0 .text Sndpos__18dScnKy_env_light_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dScnKy_env_light_c::Sndpos() { - nofralloc -#include "asm/d/kankyo/d_kankyo/Sndpos__18dScnKy_env_light_cFv.s" +void dScnKy_env_light_c::Sndpos() { + if (mSound.field_0x10 != 0) { + mSound.field_0x10--; + if (mSound.field_0x10 == 0) { + dKy_Sound_init(); + } + } } -#pragma pop /* 801A4F64-801A516C 19F8A4 0208+00 1/1 0/0 0/0 .text Eflight_flush_proc__18dScnKy_env_light_cFv */ @@ -1999,14 +2145,12 @@ asm void dScnKy_env_light_c::exeKankyo() { /* 801A56DC-801A572C 1A001C 0050+00 1/1 0/0 0/0 .text drawKankyo__18dScnKy_env_light_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dScnKy_env_light_c::drawKankyo() { - nofralloc -#include "asm/d/kankyo/d_kankyo/drawKankyo__18dScnKy_env_light_cFv.s" +void dScnKy_env_light_c::drawKankyo() { + setSunpos(); + SetBaseLight(); + setLight(); + dKy_setLight_nowroom((*(dScnKy_env_light_c*)g_env_light).mNowRoom); } -#pragma pop /* ############################################################################################## */ /* 8042E7BC-8042E7C8 05B4DC 000C+00 0/1 0/0 0/0 .bss @7485 */ @@ -2162,14 +2306,11 @@ static asm void dKy_setLight_nowroom_common(char param_0, f32 param_1) { #pragma pop /* 801A6C20-801A6C58 1A1560 0038+00 2/2 1/1 0/0 .text dKy_setLight_nowroom__Fc */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKy_setLight_nowroom(char param_0) { - nofralloc -#include "asm/d/kankyo/d_kankyo/dKy_setLight_nowroom__Fc.s" +void dKy_setLight_nowroom(char param_0) { + if (dComIfGp_getCamera(0) != NULL) { + dKy_setLight_nowroom_common(param_0, lit_4505); + } } -#pragma pop /* 801A6C58-801A6D4C 1A1598 00F4+00 0/0 1/1 2/2 .text dKy_setLight_nowroom_grass__Fcf */ #pragma push @@ -2210,14 +2351,9 @@ asm void dKy_setLight_nowroom_actor(dKy_tevstr_c* param_0) { #pragma pop /* 801A75C0-801A75E0 1A1F00 0020+00 0/0 6/6 7/7 .text dKy_setLight_again__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKy_setLight_again() { - nofralloc -#include "asm/d/kankyo/d_kankyo/dKy_setLight_again__Fv.s" +void dKy_setLight_again() { + dKy_GlobalLight_set(); } -#pragma pop /* 801A75E0-801A76D8 1A1F20 00F8+00 0/0 3/3 5/5 .text dKy_Global_amb_set__FP12dKy_tevstr_c */ #pragma push @@ -2230,24 +2366,19 @@ asm void dKy_Global_amb_set(dKy_tevstr_c* param_0) { #pragma pop /* 801A76D8-801A7714 1A2018 003C+00 1/1 0/0 0/0 .text dKy_light_influence_pos__Fi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dKy_light_influence_pos(int param_0) { - nofralloc -#include "asm/d/kankyo/d_kankyo/dKy_light_influence_pos__Fi.s" +static cXyz dKy_light_influence_pos(int param_0) { + if (param_0 < 0) { + param_0 = 0; + } + + dScnKy_env_light_c* env_light = ((dScnKy_env_light_c*)g_env_light); + return env_light->mPointLight[param_0]->mPosition; } -#pragma pop /* 801A7714-801A7738 1A2054 0024+00 0/0 1/1 0/0 .text dKy_plight_near_pos__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKy_plight_near_pos() { - nofralloc -#include "asm/d/kankyo/d_kankyo/dKy_plight_near_pos__Fv.s" +cXyz dKy_plight_near_pos() { + return (*(dScnKy_env_light_c*)g_env_light).mPLightNearPos; } -#pragma pop /* 801A7738-801A7790 1A2078 0058+00 0/0 0/0 1/1 .text * dKy_mock_light_every_set__FP15LIGHT_INFLUENCE */ @@ -2729,7 +2860,7 @@ asm void dKy_itudemo_se() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dKy_get_dayofweek() { +asm s32 dKy_get_dayofweek() { nofralloc #include "asm/d/kankyo/d_kankyo/dKy_get_dayofweek__Fv.s" } @@ -2964,7 +3095,7 @@ asm void dKy_camera_water_in_status_set(u8 param_0) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dKy_camera_water_in_status_check() { +asm BOOL dKy_camera_water_in_status_check() { nofralloc #include "asm/d/kankyo/d_kankyo/dKy_camera_water_in_status_check__Fv.s" } @@ -3127,7 +3258,7 @@ asm void dKy_SunMoon_Light_Check() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void dKy_Outdoor_check() { +static asm int dKy_Outdoor_check() { nofralloc #include "asm/d/kankyo/d_kankyo/dKy_Outdoor_check__Fv.s" } @@ -3189,7 +3320,7 @@ asm bool dKy_darkworld_check() { */ /* 801AC5BC-801AC70C 1A6EFC 0150+00 3/3 0/0 0/0 .text dKy_F_SP121Check__FPCciPUci */ static int dKy_F_SP121Check(char const* stageName, int roomNo, u8* out_darkLv, int tblIndex) { - dKyd_darkworldTblEntry* darkworldTbl = dKyd_darkworld_tbl_getp(); + dKydata_darkworldInfo_c* darkworldTbl = dKyd_darkworld_tbl_getp(); int result = 0; if (out_darkLv != NULL) { @@ -3259,7 +3390,7 @@ static int dKy_F_SP121Check(char const* stageName, int roomNo, u8* out_darkLv, i */ /* 801AC70C-801AC7E0 1A704C 00D4+00 0/0 2/2 0/0 .text dKy_darkworld_stage_check__FPCci */ BOOL dKy_darkworld_stage_check(char const* stageName, int roomNo) { - dKyd_darkworldTblEntry* darkworldTbl = dKyd_darkworld_tbl_getp(); + dKydata_darkworldInfo_c* darkworldTbl = dKyd_darkworld_tbl_getp(); BOOL result = FALSE; u8 darkLv[1]; @@ -3302,7 +3433,7 @@ BOOL dKy_darkworld_stage_check(char const* stageName, int roomNo) { */ /* 801AC7E0-801AC870 1A7120 0090+00 0/0 1/1 0/0 .text dKy_darkworld_spot_check__FPCci */ BOOL dKy_darkworld_spot_check(char const* stageName, int roomNo) { - dKyd_darkworldTblEntry* darkworldTblPtr = dKyd_darkworld_tbl_getp(); + dKydata_darkworldInfo_c* darkworldTblPtr = dKyd_darkworld_tbl_getp(); BOOL result = FALSE; for (int i = 0; i < 34; i++) { @@ -3319,7 +3450,7 @@ BOOL dKy_darkworld_spot_check(char const* stageName, int roomNo) { /* 801AC870-801AC918 1A71B0 00A8+00 0/0 1/1 0/0 .text dKy_darkworld_Area_set__FPCci */ void dKy_darkworld_Area_set(char const* stageName, int roomNo) { - dKyd_darkworldTblEntry* darkworldTblPtr = dKyd_darkworld_tbl_getp(); + dKydata_darkworldInfo_c* darkworldTblPtr = dKyd_darkworld_tbl_getp(); u8 darkLv[1]; for (int i = 0; i < 34; i++) { @@ -3360,34 +3491,19 @@ static asm void dKy_murky_set(J3DMaterial* param_0) { #pragma pop /* 801ACCDC-801ACCF4 1A761C 0018+00 2/2 1/1 0/0 .text dKy_shadow_mode_set__FUc */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKy_shadow_mode_set(u8 param_0) { - nofralloc -#include "asm/d/kankyo/d_kankyo/dKy_shadow_mode_set__FUc.s" +void dKy_shadow_mode_set(u8 mode) { + (*(dScnKy_env_light_c*)g_env_light).mShadowMode |= mode; } -#pragma pop /* 801ACCF4-801ACD0C 1A7634 0018+00 2/2 1/1 0/0 .text dKy_shadow_mode_reset__FUc */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKy_shadow_mode_reset(u8 param_0) { - nofralloc -#include "asm/d/kankyo/d_kankyo/dKy_shadow_mode_reset__FUc.s" +void dKy_shadow_mode_reset(u8 mode) { + (*(dScnKy_env_light_c*)g_env_light).mShadowMode &= ~mode; } -#pragma pop /* 801ACD0C-801ACD24 1A764C 0018+00 3/3 0/0 1/1 .text dKy_shadow_mode_check__FUc */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKy_shadow_mode_check(u8 param_0) { - nofralloc -#include "asm/d/kankyo/d_kankyo/dKy_shadow_mode_check__FUc.s" +u8 dKy_shadow_mode_check(u8 mode) { + return (*(dScnKy_env_light_c*)g_env_light).mShadowMode & mode; } -#pragma pop /* ############################################################################################## */ /* 80394C6C-80394C6C 0212CC 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ @@ -3521,11 +3637,6 @@ asm void __sinit_d_kankyo_cpp() { REGISTER_CTORS(0x801ADCA4, __sinit_d_kankyo_cpp); #pragma pop -/* 801ADD00-801ADD38 1A8640 0038+00 2/2 0/0 0/0 .text dKankyo_DayProc__Fv */ -void dKankyo_DayProc() { - dComIfGs_offTmpBit(dSv_event_tmp_flag_c::tempBitLabels[91]); -} - /* ############################################################################################## */ /* 80451070-80451078 -00001 0008+00 0/0 1/1 0/0 .sbss None */ /* 80451070 0001+00 data_80451070 None */ diff --git a/src/d/kankyo/d_kankyo_data.cpp b/src/d/kankyo/d_kankyo_data.cpp index ab8c0c6f51..131694e9ca 100644 --- a/src/d/kankyo/d_kankyo_data.cpp +++ b/src/d/kankyo/d_kankyo_data.cpp @@ -66,76 +66,101 @@ extern "C" extern u8 g_env_light[4880]; // /* 803A8E98-803A9198 005FB8 0300+00 1/1 0/0 0/0 .data l_kydata_BloomInf_tbl */ -SECTION_DATA static u8 l_kydata_BloomInf_tbl[768] = { - // Each is 0xc long; All u8's - 0x01, 0xFF, 0x40, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, // - 0x00, 0x28, 0x46, 0x87, 0xCF, 0xB1, 0x38, 0xD2, 0xFF, 0xFF, 0xFF, 0x60, // - 0x00, 0x2D, 0x46, 0x73, 0xCF, 0xB1, 0x38, 0xD2, 0xFF, 0xFF, 0xFF, 0x60, // - 0x00, 0x00, 0x40, 0x30, 0x60, 0xBA, 0xEC, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, // - 0x01, 0x40, 0x50, 0x40, 0x86, 0x83, 0x96, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, // - 0x01, 0x64, 0x50, 0x50, 0xFF, 0xD7, 0x96, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, // - 0x01, 0xA0, 0x30, 0xC8, 0x81, 0x77, 0x6F, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, // - 0x01, 0x64, 0x40, 0x60, 0xFF, 0x60, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, // - 0x01, 0x60, 0x5E, 0x60, 0x69, 0x86, 0xA5, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, // - 0x01, 0x40, 0x60, 0x6E, 0x58, 0xA5, 0x8C, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, // - 0x00, 0x23, 0x2F, 0x9B, 0x7D, 0x6E, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, // - 0x01, 0x30, 0x40, 0x80, 0x3C, 0xB7, 0xA0, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, // - 0x01, 0x38, 0x5F, 0x82, 0x7D, 0x87, 0x93, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, // - 0x01, 0x73, 0x6C, 0xFF, 0xED, 0xFF, 0xCA, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, // - 0x01, 0x31, 0x30, 0xC8, 0x97, 0xAB, 0xA0, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, // - 0x00, 0x28, 0x46, 0x78, 0x42, 0x2E, 0x30, 0xFF, 0x80, 0xFF, 0xFF, 0x54, // - 0x00, 0x28, 0x46, 0x87, 0x96, 0xB4, 0x64, 0xD2, 0xFF, 0xFF, 0xFF, 0x54, // - 0x01, 0x28, 0x46, 0x73, 0x78, 0x96, 0xA0, 0x0D, 0x00, 0x00, 0x00, 0x00, // - 0x01, 0x00, 0x7D, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, // - 0x00, 0x62, 0x69, 0x80, 0xB2, 0x5F, 0x00, 0xFF, 0xE4, 0xFF, 0xFF, 0x90, // - 0x01, 0x30, 0x40, 0x59, 0xFF, 0xEF, 0x86, 0xCE, 0xFF, 0xD5, 0x8C, 0xC8, // - 0x01, 0x6E, 0x46, 0x9A, 0xFF, 0xD7, 0x06, 0xE0, 0xFF, 0xDC, 0xA7, 0x49, // - 0x01, 0x40, 0x60, 0x40, 0x6E, 0x80, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, // - 0x00, 0x80, 0x40, 0x80, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0x00, // - 0x00, 0x80, 0x40, 0x80, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0x00, // - 0x01, 0x8C, 0x2D, 0xA0, 0x63, 0x55, 0x49, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, // - 0x01, 0x5F, 0x59, 0x5A, 0x96, 0x91, 0x84, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, // - 0x00, 0x52, 0x64, 0x3C, 0xFF, 0xC2, 0x70, 0xBA, 0xFF, 0xFF, 0xFF, 0x00, // - 0x00, 0x8C, 0x2D, 0xA0, 0x63, 0x55, 0x49, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, // - 0x01, 0x46, 0x5A, 0x41, 0x3C, 0x50, 0x46, 0xFF, 0xFA, 0xFF, 0x9B, 0x78, // - 0x01, 0x2E, 0x60, 0x7D, 0x64, 0x96, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, // - 0x00, 0x00, 0x83, 0xFF, 0x72, 0xD1, 0xFF, 0xFF, 0xFF, 0xE2, 0xFE, 0x7D, // - 0x00, 0x5F, 0x14, 0xB4, 0x50, 0x96, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0x64, // - 0x00, 0x28, 0x46, 0x87, 0x82, 0xC8, 0xFA, 0xD2, 0xFF, 0xFF, 0xFF, 0x32, // - 0x00, 0x20, 0x10, 0x50, 0x64, 0x64, 0x32, 0xFF, 0x96, 0xFF, 0xFF, 0x82, // - 0x00, 0x00, 0x00, 0x30, 0x00, 0xBA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, // - 0x01, 0x40, 0x50, 0x40, 0x86, 0x83, 0x96, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, // - 0x01, 0x64, 0x50, 0x50, 0xFF, 0xD7, 0x96, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, // - 0x01, 0xA0, 0x30, 0xC8, 0x81, 0x77, 0x6F, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, // - 0x01, 0x64, 0x40, 0x60, 0xFF, 0x60, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, // - 0x01, 0x30, 0x30, 0x60, 0x6F, 0x69, 0x52, 0xFF, 0xC0, 0xB9, 0xA1, 0x80, // - 0x01, 0x2D, 0x60, 0x87, 0xFF, 0xE0, 0x46, 0xFF, 0xFF, 0x85, 0x79, 0x60, // - 0x00, 0x00, 0x88, 0x6A, 0x85, 0x3E, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0x11, // - 0x00, 0x2E, 0x41, 0x64, 0xF9, 0xE7, 0x7C, 0xD0, 0xFF, 0xDA, 0x9A, 0xBB, // - 0x00, 0x00, 0xFF, 0xFF, 0xBE, 0xB9, 0xB4, 0xE6, 0xFF, 0xFF, 0xFF, 0x00, // - 0x00, 0x2D, 0x46, 0x50, 0xCF, 0xB1, 0x38, 0xD2, 0xFF, 0xFF, 0xFF, 0x60, // - 0x00, 0xA0, 0x14, 0x32, 0xE6, 0xFF, 0x96, 0xF3, 0xE6, 0xFF, 0x96, 0x6E, // - 0x00, 0x52, 0x64, 0x3C, 0xFF, 0xC2, 0x70, 0xBA, 0xFF, 0xFF, 0xFF, 0x00, // - 0x00, 0x80, 0x40, 0x80, 0xFF, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0xFF, 0x00, // - 0x01, 0x80, 0x40, 0x80, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0x00, // - 0x00, 0x00, 0x7D, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, // - 0x00, 0x62, 0x69, 0x80, 0xB2, 0x5F, 0x00, 0xFF, 0xE4, 0xFF, 0xFF, 0x90, // - 0x01, 0x30, 0x40, 0x59, 0xFF, 0xEF, 0x86, 0xCE, 0xFF, 0xD5, 0x8C, 0xC8, // - 0x01, 0x6E, 0x46, 0x9A, 0xFF, 0xD7, 0x06, 0xE0, 0xFF, 0xDC, 0xA7, 0x49, // - 0x00, 0x80, 0x40, 0x80, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0x00, // - 0x00, 0x80, 0x40, 0x80, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0x00, // - 0x00, 0x80, 0x40, 0x80, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0x00, // - 0x00, 0x80, 0x40, 0x80, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0x00, // - 0x00, 0x80, 0x40, 0x80, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0x00, // - 0x00, 0x80, 0x40, 0x80, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0x00, // - 0x00, 0x80, 0x40, 0x80, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0x00, // - 0x00, 0x80, 0x40, 0x80, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0x00, // - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // +static dKydata_BloomInfo_c l_kydata_BloomInf_tbl[BLOOMINFO_MAX] = { + {BLOOM_SOFT, 0xFF, 0x40, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00}, + {BLOOM_CLEAR, 0x28, 0x46, 0x87, 0xCF, 0xB1, 0x38, 0xD2, 0xFF, 0xFF, 0xFF, 0x60}, // Twilight + {BLOOM_CLEAR, 0x2D, 0x46, 0x73, 0xCF, 0xB1, 0x38, 0xD2, 0xFF, 0xFF, 0xFF, + 0x60}, // Twilight Weak + {BLOOM_CLEAR, 0x00, 0x40, 0x30, 0x60, 0xBA, 0xEC, 0xFF, 0xFF, 0xFF, 0xFF, 0x00}, // Senses + {BLOOM_SOFT, 0x40, 0x50, 0x40, 0x86, 0x83, 0x96, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00}, // Field Normal (Morning 0) + {BLOOM_SOFT, 0x64, 0x50, 0x50, 0xFF, 0xD7, 0x96, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00}, // Field Normal (Morning 1) + {BLOOM_SOFT, 0xA0, 0x30, 0xC8, 0x81, 0x77, 0x6F, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00}, // Field Normal (Afternoon) + {BLOOM_SOFT, 0x64, 0x40, 0x60, 0xFF, 0x60, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00}, // Field Normal (Evening 0) + {BLOOM_SOFT, 0x60, 0x5E, 0x60, 0x69, 0x86, 0xA5, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00}, // Field Normal (Evening 1) + {BLOOM_SOFT, 0x40, 0x60, 0x6E, 0x58, 0xA5, 0x8C, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00}, // Field Normal (Night) + {BLOOM_CLEAR, 0x23, 0x2F, 0x9B, 0x7D, 0x6E, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00}, // Bulblin Camp Fire + {BLOOM_SOFT, 0x30, 0x40, 0x80, 0x3C, 0xB7, 0xA0, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00}, // Palace of Twilight + {BLOOM_SOFT, 0x38, 0x5F, 0x82, 0x7D, 0x87, 0x93, 0xFF, 0xFF, 0xFF, 0xFF, 0x00}, // demo28_03 + {BLOOM_SOFT, 0x73, 0x6C, 0xFF, 0xED, 0xFF, 0xCA, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00}, // Golden Bug Glow + {BLOOM_SOFT, 0x31, 0x30, 0xC8, 0x97, 0xAB, 0xA0, 0xFF, 0xFF, 0xFF, 0xFF, 0x00}, // Cloud Sea + {BLOOM_CLEAR, 0x28, 0x46, 0x78, 0x42, 0x2E, 0x30, 0xFF, 0x80, 0xFF, 0xFF, + 0x54}, // Zora's Domain Outside (Twilight) + {BLOOM_CLEAR, 0x28, 0x46, 0x87, 0x96, 0xB4, 0x64, 0xD2, 0xFF, 0xFF, 0xFF, + 0x54}, // Zora's Domain Inside (Twilight) + {BLOOM_SOFT, 0x28, 0x46, 0x73, 0x78, 0x96, 0xA0, 0x0D, 0x00, 0x00, 0x00, 0x00}, // Senses-like + {BLOOM_SOFT, 0x00, 0x7D, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, + 0xFF}, // Sacred Grove Time Travel + {BLOOM_CLEAR, 0x62, 0x69, 0x80, 0xB2, 0x5F, 0x00, 0xFF, 0xE4, 0xFF, 0xFF, 0x90}, // Sewers + {BLOOM_SOFT, 0x30, 0x40, 0x59, 0xFF, 0xEF, 0x86, 0xCE, 0xFF, 0xD5, 0x8C, + 0xC8}, // Flashback Scene + {BLOOM_SOFT, 0x6E, 0x46, 0x9A, 0xFF, 0xD7, 0x06, 0xE0, 0xFF, 0xDC, 0xA7, + 0x49}, // Twilight Gate + {BLOOM_SOFT, 0x40, 0x60, 0x40, 0x6E, 0x80, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00}, // Underwater (Normal) + {BLOOM_CLEAR, 0x80, 0x40, 0x80, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0x00}, // Empty + {BLOOM_CLEAR, 0x80, 0x40, 0x80, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0x00}, // Empty + {BLOOM_SOFT, 0x8C, 0x2D, 0xA0, 0x63, 0x55, 0x49, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00}, // Dungeon Normal Weak + {BLOOM_SOFT, 0x5F, 0x59, 0x5A, 0x96, 0x91, 0x84, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00}, // Dungeon Normal Strong + {BLOOM_CLEAR, 0x52, 0x64, 0x3C, 0xFF, 0xC2, 0x70, 0xBA, 0xFF, 0xFF, 0xFF, 0x00}, // Lava + {BLOOM_CLEAR, 0x8C, 0x2D, 0xA0, 0x63, 0x55, 0x49, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00}, // Goron Mines - No Lava + {BLOOM_SOFT, 0x46, 0x5A, 0x41, 0x3C, 0x50, 0x46, 0xFF, 0xFA, 0xFF, 0x9B, + 0x78}, // Sacred Grove Past + {BLOOM_SOFT, 0x2E, 0x60, 0x7D, 0x64, 0x96, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x00}, // Castle + {BLOOM_CLEAR, 0x00, 0x83, 0xFF, 0x72, 0xD1, 0xFF, 0xFF, 0xFF, 0xE2, 0xFE, 0x7D}, // Empty + {BLOOM_CLEAR, 0x5F, 0x14, 0xB4, 0x50, 0x96, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0x64}, // Empty + {BLOOM_CLEAR, 0x28, 0x46, 0x87, 0x82, 0xC8, 0xFA, 0xD2, 0xFF, 0xFF, 0xFF, 0x32}, // Empty + {BLOOM_CLEAR, 0x20, 0x10, 0x50, 0x64, 0x64, 0x32, 0xFF, 0x96, 0xFF, 0xFF, 0x82}, // Empty + {BLOOM_CLEAR, 0x00, 0x00, 0x30, 0x00, 0xBA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00}, // Empty + {BLOOM_SOFT, 0x40, 0x50, 0x40, 0x86, 0x83, 0x96, 0xFF, 0xFF, 0xFF, 0xFF, 0x00}, // Empty + {BLOOM_SOFT, 0x64, 0x50, 0x50, 0xFF, 0xD7, 0x96, 0xFF, 0xFF, 0xFF, 0xFF, 0x00}, // Empty + {BLOOM_SOFT, 0xA0, 0x30, 0xC8, 0x81, 0x77, 0x6F, 0xFF, 0xFF, 0xFF, 0xFF, 0x00}, // Empty + {BLOOM_SOFT, 0x64, 0x40, 0x60, 0xFF, 0x60, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00}, // Empty + {BLOOM_SOFT, 0x30, 0x30, 0x60, 0x6F, 0x69, 0x52, 0xFF, 0xC0, 0xB9, 0xA1, + 0x80}, // Demo: Flashback Scene + {BLOOM_SOFT, 0x2D, 0x60, 0x87, 0xFF, 0xE0, 0x46, 0xFF, 0xFF, 0x85, 0x79, + 0x60}, // Demo: Fake Twilight + {BLOOM_CLEAR, 0x00, 0x88, 0x6A, 0x85, 0x3E, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, + 0x11}, // Demo: demo32_03 + {BLOOM_CLEAR, 0x2E, 0x41, 0x64, 0xF9, 0xE7, 0x7C, 0xD0, 0xFF, 0xDA, 0x9A, + 0xBB}, // Demo: Twilight Flashback Scene + {BLOOM_CLEAR, 0x00, 0xFF, 0xFF, 0xBE, 0xB9, 0xB4, 0xE6, 0xFF, 0xFF, 0xFF, + 0x00}, // Demo: demo31_20 + {BLOOM_CLEAR, 0x2D, 0x46, 0x50, 0xCF, 0xB1, 0x38, 0xD2, 0xFF, 0xFF, 0xFF, + 0x60}, // Demo: Lava W + {BLOOM_CLEAR, 0xA0, 0x14, 0x32, 0xE6, 0xFF, 0x96, 0xF3, 0xE6, 0xFF, 0x96, 0x6E}, // Empty + {BLOOM_CLEAR, 0x52, 0x64, 0x3C, 0xFF, 0xC2, 0x70, 0xBA, 0xFF, 0xFF, 0xFF, 0x00}, // Empty + {BLOOM_CLEAR, 0x80, 0x40, 0x80, 0xFF, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0xFF, 0x00}, // Empty + {BLOOM_SOFT, 0x80, 0x40, 0x80, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0x00}, // Empty + {BLOOM_CLEAR, 0x00, 0x7D, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF}, // Empty + {BLOOM_CLEAR, 0x62, 0x69, 0x80, 0xB2, 0x5F, 0x00, 0xFF, 0xE4, 0xFF, 0xFF, 0x90}, // Empty + {BLOOM_SOFT, 0x30, 0x40, 0x59, 0xFF, 0xEF, 0x86, 0xCE, 0xFF, 0xD5, 0x8C, 0xC8}, // Empty + {BLOOM_SOFT, 0x6E, 0x46, 0x9A, 0xFF, 0xD7, 0x06, 0xE0, 0xFF, 0xDC, 0xA7, 0x49}, // Empty + {BLOOM_CLEAR, 0x80, 0x40, 0x80, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0x00}, // Empty + {BLOOM_CLEAR, 0x80, 0x40, 0x80, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0x00}, // Empty + {BLOOM_CLEAR, 0x80, 0x40, 0x80, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0x00}, // Empty + {BLOOM_CLEAR, 0x80, 0x40, 0x80, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0x00}, // Empty + {BLOOM_CLEAR, 0x80, 0x40, 0x80, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0x00}, // Empty + {BLOOM_CLEAR, 0x80, 0x40, 0x80, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0x00}, // Empty + {BLOOM_CLEAR, 0x80, 0x40, 0x80, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0x00}, // Empty + {BLOOM_CLEAR, 0x80, 0x40, 0x80, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0x00}, // Empty + {BLOOM_CLEAR, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // Empty + {BLOOM_CLEAR, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // Empty }; /* 803A9198-803A92A8 -00001 0110+00 1/1 0/0 0/0 .data l_darkworld_tbl */ -static dKyd_darkworldTblEntry l_darkworld_tbl[34] = { +static dKydata_darkworldInfo_c l_darkworld_tbl[34] = { {"R_SP30", UNCLEARABLE}, // UNUSED - Unknown Room {"T_SP05", TEST}, // UNUSED - E3 2005 Warp Test (Old) {"T_SP05A", TEST}, // UNUSED - Ito Warp Test @@ -172,13 +197,8 @@ static dKyd_darkworldTblEntry l_darkworld_tbl[34] = { {"D_SB10", FARON}, // Faron Woods Cave }; -// TODO: wrong type -// Only thing I can easily find: the byte is written to 8042DD4D and it seems to control the Y -// pos(?) (essentially brightness) of the soft spotlight that is on wolf Link during twilight? Will -// need more investigation before can be changed to appropriate type. Leaving this way since the -// stageNames are already converted. /* 803A92A8-803A93C8 -00001 0120+00 1/1 0/0 0/0 .data l_light_size_tbl */ -static dKyd_darkworldTblEntry l_light_size_tbl[36] = { +static dKydata_lightsizeInfo_c l_light_size_tbl[36] = { {"R_SP01", 0}, // Ordon Interiors {"R_SP108", 0}, // Coro's Lantern Shop {"F_SP109", 2}, // Kakariko Village @@ -217,9 +237,8 @@ static dKyd_darkworldTblEntry l_light_size_tbl[36] = { {"D_SB10", 0}, // Faron Woods Cave }; -// TODO: wrong type /* 803A93C8-803A9410 -00001 0048+00 1/1 0/0 0/0 .data l_light_size_tbl_tw */ -static dKyd_darkworldTblEntry l_light_size_tbl_tw[9] = { +static dKydata_lightsizeInfo_c l_light_size_tbl_tw[9] = { {"F_SP109", 2}, // Kakariko Village {"F_SP110", 2}, // Death Mountain {"R_SP209", 2}, // Sanctuary Basement @@ -445,23 +464,23 @@ void* dKyd_maple_col_getp() { } /* 80056A70-80056A7C 0513B0 000C+00 0/0 4/4 0/0 .text dKyd_darkworld_tbl_getp__Fv */ -dKyd_darkworldTblEntry* dKyd_darkworld_tbl_getp() { +dKydata_darkworldInfo_c* dKyd_darkworld_tbl_getp() { return l_darkworld_tbl; } /* 80056A7C-80056A88 0513BC 000C+00 0/0 1/1 0/0 .text dKyd_light_size_tbl_getp__Fv */ -void* dKyd_light_size_tbl_getp() { +dKydata_lightsizeInfo_c* dKyd_light_size_tbl_getp() { return l_light_size_tbl; } /* 80056A88-80056A94 0513C8 000C+00 0/0 1/1 0/0 .text dKyd_light_tw_size_tbl_getp__Fv */ -void* dKyd_light_tw_size_tbl_getp() { +dKydata_lightsizeInfo_c* dKyd_light_tw_size_tbl_getp() { return l_light_size_tbl_tw; } /* 80056A94-80056AA8 0513D4 0014+00 0/0 1/1 0/0 .text dKyd_BloomInf_tbl_getp__Fi */ -void* dKyd_BloomInf_tbl_getp(int tblIdx) { - return &l_kydata_BloomInf_tbl[tblIdx * 0xC]; +dKydata_BloomInfo_c* dKyd_BloomInf_tbl_getp(int tblIdx) { + return &l_kydata_BloomInf_tbl[tblIdx]; } /* 8037A1C0-8037A1C0 006820 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/src/d/kankyo/d_kankyo_wether.cpp b/src/d/kankyo/d_kankyo_wether.cpp index 3a24218a66..4ffcdc2682 100644 --- a/src/d/kankyo/d_kankyo_wether.cpp +++ b/src/d/kankyo/d_kankyo_wether.cpp @@ -4,189 +4,13 @@ // #include "d/kankyo/d_kankyo_wether.h" +#include "Z2AudioLib/Z2EnvSeMgr.h" +#include "d/com/d_com_inf_game.h" +#include "d/kankyo/d_kankyo.h" +#include "d/kankyo/d_kankyo_rain.h" #include "dol2asm.h" #include "dolphin/types.h" - -// -// Types: -// - -struct dStage_roomControl_c { - /* 80024384 */ void getStatusRoomDt(int); -}; - -struct dScnKy_env_light_c { - /* 8019FA08 */ void getDaytime(); -}; - -struct dRes_info_c {}; - -struct dRes_control_c { - /* 8003C2EC */ void getRes(char const*, s32, dRes_info_c*, int); -}; - -struct dPa_levelEcallBack {}; - -struct dKy_tevstr_c {}; - -struct csXyz {}; - -struct _GXColor {}; - -struct Vec {}; - -struct cXyz { - /* 80009184 */ ~cXyz(); - /* 800125DC */ cXyz(); - /* 80266AE4 */ void operator+(Vec const&) const; - /* 80266B84 */ void operator*(f32) const; - /* 80266D30 */ void normZP() const; - /* 8026706C */ bool operator!=(Vec const&) const; - - static f32 Zero[3]; -}; - -struct dPa_control_c { - /* 8004CA90 */ void set(u8, u16, cXyz const*, dKy_tevstr_c const*, csXyz const*, cXyz const*, - u8, dPa_levelEcallBack*, s8, _GXColor const*, _GXColor const*, - cXyz const*, f32); -}; - -struct dKankyo_vrkumo_Packet { - /* 80056F58 */ void draw(); - /* 8005820C */ ~dKankyo_vrkumo_Packet(); -}; - -struct dKankyo_sunlenz_Packet { - /* 80056C98 */ void draw(); - /* 800580A4 */ ~dKankyo_sunlenz_Packet(); -}; - -struct dKankyo_sun_Packet { - /* 80056C60 */ void draw(); - /* 80058128 */ ~dKankyo_sun_Packet(); -}; - -struct dKankyo_star_Packet { - /* 80056E08 */ void draw(); - /* 80057F18 */ ~dKankyo_star_Packet(); -}; - -struct dKankyo_snow_Packet { - /* 80056D98 */ void draw(); - /* 80057F9C */ ~dKankyo_snow_Packet(); -}; - -struct dKankyo_rain_Packet { - /* 80056D10 */ void draw(); - /* 80058020 */ ~dKankyo_rain_Packet(); -}; - -struct dKankyo_odour_Packet { - /* 80056FCC */ void draw(); - /* 80057D8C */ ~dKankyo_odour_Packet(); -}; - -struct dKankyo_mud_Packet { - /* 8005703C */ void draw(); - /* 80057D08 */ ~dKankyo_mud_Packet(); -}; - -struct dKankyo_housi_Packet { - /* 80056EE8 */ void draw(); - /* 80057E94 */ ~dKankyo_housi_Packet(); -}; - -struct dKankyo_evil_Packet { - /* 800570AC */ void draw(); - /* 80057C84 */ ~dKankyo_evil_Packet(); -}; - -struct dKankyo_cloud_Packet { - /* 80056E78 */ void draw(); - /* 80057E10 */ ~dKankyo_cloud_Packet(); -}; - -struct dComIfG_play_c { - /* 8002C97C */ void getLayerNo(int); -}; - -struct JAISoundID {}; - -struct Z2SeMgr { - /* 802AB984 */ void seStart(JAISoundID, Vec const*, u32, s8, f32, f32, f32, f32, u8); -}; - -struct Z2EnvSeMgr { - /* 802C7830 */ void startRainSe(s32, s8); - /* 802C7FBC */ void initStrongWindSe(); - /* 802C7FC8 */ void setWindDirection(Vec*); - /* 802C800C */ void startStrongWindSe(s8); -}; - -struct Z2AudioMgr { - static u8 mAudioMgrPtr[4 + 4 /* padding */]; -}; - -struct WIND_INFLUENCE {}; - -struct VRKUMO_EFF { - /* 80056F18 */ ~VRKUMO_EFF(); - /* 80056F54 */ VRKUMO_EFF(); -}; - -struct STAR_EFF { - /* 80056DC8 */ ~STAR_EFF(); - /* 80056E04 */ STAR_EFF(); -}; - -struct SNOW_EFF { - /* 80056D58 */ ~SNOW_EFF(); - /* 80056D94 */ SNOW_EFF(); -}; - -struct RAIN_EFF { - /* 80056CD0 */ ~RAIN_EFF(); - /* 80056D0C */ RAIN_EFF(); -}; - -struct JMath { - static u8 sincosTable_[65536]; -}; - -struct J3DPacket; -struct J3DDrawBuffer { - /* 8032548C */ void entryImm(J3DPacket*, u16); -}; - -struct J3DPacket { - /* 80312750 */ bool entry(J3DDrawBuffer*); -}; - -struct HOUSI_EFF { - /* 80056EA8 */ ~HOUSI_EFF(); - /* 80056EE4 */ HOUSI_EFF(); -}; - -struct EF_ODOUR_EFF { - /* 80056F8C */ ~EF_ODOUR_EFF(); - /* 80056FC8 */ EF_ODOUR_EFF(); -}; - -struct EF_MUD_EFF { - /* 80056FFC */ ~EF_MUD_EFF(); - /* 80057038 */ EF_MUD_EFF(); -}; - -struct EF_EVIL_EFF { - /* 8005706C */ ~EF_EVIL_EFF(); - /* 800570A8 */ EF_EVIL_EFF(); -}; - -struct CLOUD_EFF { - /* 80056E38 */ ~CLOUD_EFF(); - /* 80056E74 */ CLOUD_EFF(); -}; +#include "m_Do/m_Do_audio.h" // // Forward References: @@ -330,7 +154,8 @@ extern "C" void dKyr_star_init__Fv(); extern "C" void dKyr_star_move__Fv(); extern "C" void cloud_shadow_move__Fv(); extern "C" void vrkumo_move__Fv(); -extern "C" void dKyr_drawSun__FPA4_fP4cXyzR8_GXColorPPUc(); +extern "C" void dKyr_drawSun__FPA4_fP4cXyzR8_GXColorPPUc(f32 (*param_0)[4], cXyz* param_1, + _GXColor& param_2, u8** param_3); extern "C" void dKyr_drawLenzflare__FPA4_fP4cXyzR8_GXColorPPUc(); extern "C" void dKyr_drawRain__FPA4_fPPUc(); extern "C" void dKyr_drawSibuki__FPA4_fPPUc(); @@ -371,8 +196,6 @@ extern "C" void* __nw__FUli(); extern "C" void __dl__FPv(); extern "C" bool entry__9J3DPacketFP13J3DDrawBuffer(); extern "C" void entryImm__13J3DDrawBufferFP9J3DPacketUs(); -extern "C" void PSVECSquareMag(); -extern "C" void PSVECSquareDistance(); extern "C" void __register_global_object(); extern "C" void __destroy_arr(); extern "C" void __construct_array(); @@ -387,16 +210,11 @@ extern "C" void _restgpr_26(); extern "C" void _restgpr_28(); extern "C" void _restgpr_29(); extern "C" void memcmp(); -extern "C" void strcmp(); extern "C" extern void* __vt__9J3DPacket[5]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" extern u8 g_env_light[4880]; -extern "C" extern u8 g_mEnvSeMgr[780]; +extern "C" extern dScnKy_env_light_c g_env_light; +extern "C" extern Z2EnvSeMgr g_mEnvSeMgr; extern "C" f32 Zero__4cXyz[3]; -extern "C" extern u8 j3dSys[284]; extern "C" u8 sincosTable___5JMath[65536]; -extern "C" extern u32 __float_nan; -extern "C" extern u8 struct_80450D64[4]; extern "C" extern u8 data_80450EE0[8]; extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; @@ -404,77 +222,74 @@ extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; // Declarations: // +// move these later +inline void mDoAud_rainPlay(s32 enable) { + g_mEnvSeMgr.startRainSe(enable, 0); +} + +inline void mDoAud_seStart(u32 sfx_id, const Vec* param_1, u32 param_2, s8 param_3) { + Z2AudioMgr::getInterface()->mSeMgr.seStart(sfx_id, param_1, param_2, param_3, 1.0f, 1.0f, -1.0f, + -1.0f, 0); +} + /* 80056AA8-80056AF8 0513E8 0050+00 3/3 0/0 0/0 .text dKyw_setDrawPacketList__FP9J3DPacketi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dKyw_setDrawPacketList(J3DPacket* param_0, int param_1) { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_setDrawPacketList__FP9J3DPacketi.s" +static J3DPacket* dKyw_setDrawPacketList(J3DPacket* p_packet, int param_1) { + if (p_packet == NULL) { + return NULL; + } else { + dComIfGd_getListFilter()->entryImm(p_packet, 0); + return p_packet; + } } -#pragma pop /* 80056AF8-80056B48 051438 0050+00 3/3 0/0 0/0 .text * dKyw_setDrawPacketListIndScreen__FP9J3DPacketi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dKyw_setDrawPacketListIndScreen(J3DPacket* param_0, int param_1) { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_setDrawPacketListIndScreen__FP9J3DPacketi.s" +static J3DPacket* dKyw_setDrawPacketListIndScreen(J3DPacket* p_packet, int param_1) { + if (p_packet == NULL) { + return NULL; + } else { + dComIfGd_getOpaListIndScreen()->entryImm(p_packet, 0); + return p_packet; + } } -#pragma pop /* 80056B48-80056BD8 051488 0090+00 5/5 0/0 0/0 .text dKyw_setDrawPacketListSky__FP9J3DPacketi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dKyw_setDrawPacketListSky(J3DPacket* param_0, int param_1) { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_setDrawPacketListSky__FP9J3DPacketi.s" +static J3DPacket* dKyw_setDrawPacketListSky(J3DPacket* p_packet, int type) { + if (p_packet == NULL) { + return NULL; + } else { + dComIfGd_setListSky(); + j3dSys.getDrawBuffer(type)->entryImm(p_packet, 0); + dComIfGd_setList(); + return p_packet; + } } -#pragma pop /* 80056BD8-80056C60 051518 0088+00 2/2 0/0 0/0 .text dKyw_setDrawPacketListXluBg__FP9J3DPacketi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dKyw_setDrawPacketListXluBg(J3DPacket* param_0, int param_1) { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_setDrawPacketListXluBg__FP9J3DPacketi.s" +static J3DPacket* dKyw_setDrawPacketListXluBg(J3DPacket* p_packet, int type) { + if (p_packet == NULL) { + return NULL; + } else { + dComIfGd_setXluListBG(); + j3dSys.getDrawBuffer(type)->entryImm(p_packet, 0); + dComIfGd_setList(); + return p_packet; + } } -#pragma pop /* 80056C60-80056C98 0515A0 0038+00 1/0 0/0 0/0 .text draw__18dKankyo_sun_PacketFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKankyo_sun_Packet::draw() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/draw__18dKankyo_sun_PacketFv.s" +void dKankyo_sun_Packet::draw() { + dKyr_drawSun(j3dSys.getViewMtx(), &field_0x10[0], mColor, &mpResMoon); } -#pragma pop /* 80056C98-80056CD0 0515D8 0038+00 1/0 0/0 0/0 .text draw__22dKankyo_sunlenz_PacketFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKankyo_sunlenz_Packet::draw() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/draw__22dKankyo_sunlenz_PacketFv.s" +void dKankyo_sunlenz_Packet::draw() { + dKyr_drawLenzflare(j3dSys.getViewMtx(), &field_0x24[0], field_0x10, &mpResBall); } -#pragma pop /* 80056CD0-80056D0C 051610 003C+00 2/2 0/0 0/0 .text __dt__8RAIN_EFFFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm RAIN_EFF::~RAIN_EFF() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/__dt__8RAIN_EFFFv.s" -} -#pragma pop +RAIN_EFF::~RAIN_EFF() {} /* 80056D0C-80056D10 05164C 0004+00 1/1 0/0 0/0 .text __ct__8RAIN_EFFFv */ RAIN_EFF::RAIN_EFF() { @@ -482,24 +297,13 @@ RAIN_EFF::RAIN_EFF() { } /* 80056D10-80056D58 051650 0048+00 1/0 0/0 0/0 .text draw__19dKankyo_rain_PacketFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKankyo_rain_Packet::draw() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/draw__19dKankyo_rain_PacketFv.s" +void dKankyo_rain_Packet::draw() { + dKyr_drawSibuki(j3dSys.getViewMtx(), &field_0x10); + dKyr_drawRain(j3dSys.getViewMtx(), &field_0x10); } -#pragma pop /* 80056D58-80056D94 051698 003C+00 1/1 1/1 0/0 .text __dt__8SNOW_EFFFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm SNOW_EFF::~SNOW_EFF() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/__dt__8SNOW_EFFFv.s" -} -#pragma pop +SNOW_EFF::~SNOW_EFF() {} /* 80056D94-80056D98 0516D4 0004+00 0/0 1/1 0/0 .text __ct__8SNOW_EFFFv */ SNOW_EFF::SNOW_EFF() { @@ -507,24 +311,12 @@ SNOW_EFF::SNOW_EFF() { } /* 80056D98-80056DC8 0516D8 0030+00 1/0 0/0 0/0 .text draw__19dKankyo_snow_PacketFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKankyo_snow_Packet::draw() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/draw__19dKankyo_snow_PacketFv.s" +void dKankyo_snow_Packet::draw() { + dKyr_drawSnow(j3dSys.getViewMtx(), &field_0x10); } -#pragma pop /* 80056DC8-80056E04 051708 003C+00 1/1 1/1 0/0 .text __dt__8STAR_EFFFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm STAR_EFF::~STAR_EFF() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/__dt__8STAR_EFFFv.s" -} -#pragma pop +STAR_EFF::~STAR_EFF() {} /* 80056E04-80056E08 051744 0004+00 0/0 1/1 0/0 .text __ct__8STAR_EFFFv */ STAR_EFF::STAR_EFF() { @@ -532,24 +324,12 @@ STAR_EFF::STAR_EFF() { } /* 80056E08-80056E38 051748 0030+00 1/0 0/0 0/0 .text draw__19dKankyo_star_PacketFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKankyo_star_Packet::draw() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/draw__19dKankyo_star_PacketFv.s" +void dKankyo_star_Packet::draw() { + dKyr_drawStar(j3dSys.getViewMtx(), &field_0x10); } -#pragma pop /* 80056E38-80056E74 051778 003C+00 2/2 0/0 0/0 .text __dt__9CLOUD_EFFFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm CLOUD_EFF::~CLOUD_EFF() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/__dt__9CLOUD_EFFFv.s" -} -#pragma pop +CLOUD_EFF::~CLOUD_EFF() {} /* 80056E74-80056E78 0517B4 0004+00 1/1 0/0 0/0 .text __ct__9CLOUD_EFFFv */ CLOUD_EFF::CLOUD_EFF() { @@ -557,24 +337,12 @@ CLOUD_EFF::CLOUD_EFF() { } /* 80056E78-80056EA8 0517B8 0030+00 1/0 0/0 0/0 .text draw__20dKankyo_cloud_PacketFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKankyo_cloud_Packet::draw() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/draw__20dKankyo_cloud_PacketFv.s" +void dKankyo_cloud_Packet::draw() { + drawCloudShadow(j3dSys.getViewMtx(), &mpResTex); } -#pragma pop /* 80056EA8-80056EE4 0517E8 003C+00 2/2 0/0 0/0 .text __dt__9HOUSI_EFFFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm HOUSI_EFF::~HOUSI_EFF() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/__dt__9HOUSI_EFFFv.s" -} -#pragma pop +HOUSI_EFF::~HOUSI_EFF() {} /* 80056EE4-80056EE8 051824 0004+00 1/1 0/0 0/0 .text __ct__9HOUSI_EFFFv */ HOUSI_EFF::HOUSI_EFF() { @@ -582,24 +350,12 @@ HOUSI_EFF::HOUSI_EFF() { } /* 80056EE8-80056F18 051828 0030+00 1/0 0/0 0/0 .text draw__20dKankyo_housi_PacketFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKankyo_housi_Packet::draw() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/draw__20dKankyo_housi_PacketFv.s" +void dKankyo_housi_Packet::draw() { + dKyr_drawHousi(j3dSys.getViewMtx(), &mpResTex); } -#pragma pop /* 80056F18-80056F54 051858 003C+00 2/2 0/0 0/0 .text __dt__10VRKUMO_EFFFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm VRKUMO_EFF::~VRKUMO_EFF() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/__dt__10VRKUMO_EFFFv.s" -} -#pragma pop +VRKUMO_EFF::~VRKUMO_EFF() {} /* 80056F54-80056F58 051894 0004+00 1/1 0/0 0/0 .text __ct__10VRKUMO_EFFFv */ VRKUMO_EFF::VRKUMO_EFF() { @@ -607,24 +363,12 @@ VRKUMO_EFF::VRKUMO_EFF() { } /* 80056F58-80056F8C 051898 0034+00 1/0 0/0 0/0 .text draw__21dKankyo_vrkumo_PacketFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKankyo_vrkumo_Packet::draw() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/draw__21dKankyo_vrkumo_PacketFv.s" +void dKankyo_vrkumo_Packet::draw() { + drawVrkumo(j3dSys.getViewMtx(), field_0x10, &mpResCloudtx_01); } -#pragma pop /* 80056F8C-80056FC8 0518CC 003C+00 2/2 0/0 0/0 .text __dt__12EF_ODOUR_EFFFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm EF_ODOUR_EFF::~EF_ODOUR_EFF() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/__dt__12EF_ODOUR_EFFFv.s" -} -#pragma pop +EF_ODOUR_EFF::~EF_ODOUR_EFF() {} /* 80056FC8-80056FCC 051908 0004+00 1/1 0/0 0/0 .text __ct__12EF_ODOUR_EFFFv */ EF_ODOUR_EFF::EF_ODOUR_EFF() { @@ -632,24 +376,12 @@ EF_ODOUR_EFF::EF_ODOUR_EFF() { } /* 80056FCC-80056FFC 05190C 0030+00 1/0 0/0 0/0 .text draw__20dKankyo_odour_PacketFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKankyo_odour_Packet::draw() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/draw__20dKankyo_odour_PacketFv.s" +void dKankyo_odour_Packet::draw() { + dKyr_odour_draw(j3dSys.getViewMtx(), &mpResTex); } -#pragma pop /* 80056FFC-80057038 05193C 003C+00 2/2 0/0 0/0 .text __dt__10EF_MUD_EFFFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm EF_MUD_EFF::~EF_MUD_EFF() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/__dt__10EF_MUD_EFFFv.s" -} -#pragma pop +EF_MUD_EFF::~EF_MUD_EFF() {} /* 80057038-8005703C 051978 0004+00 1/1 0/0 0/0 .text __ct__10EF_MUD_EFFFv */ EF_MUD_EFF::EF_MUD_EFF() { @@ -657,24 +389,12 @@ EF_MUD_EFF::EF_MUD_EFF() { } /* 8005703C-8005706C 05197C 0030+00 1/0 0/0 0/0 .text draw__18dKankyo_mud_PacketFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKankyo_mud_Packet::draw() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/draw__18dKankyo_mud_PacketFv.s" +void dKankyo_mud_Packet::draw() { + dKyr_mud_draw(j3dSys.getViewMtx(), &field_0x14); } -#pragma pop /* 8005706C-800570A8 0519AC 003C+00 2/2 0/0 0/0 .text __dt__11EF_EVIL_EFFFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm EF_EVIL_EFF::~EF_EVIL_EFF() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/__dt__11EF_EVIL_EFFFv.s" -} -#pragma pop +EF_EVIL_EFF::~EF_EVIL_EFF() {} /* 800570A8-800570AC 0519E8 0004+00 1/1 0/0 0/0 .text __ct__11EF_EVIL_EFFFv */ EF_EVIL_EFF::EF_EVIL_EFF() { @@ -682,262 +402,133 @@ EF_EVIL_EFF::EF_EVIL_EFF() { } /* 800570AC-800570DC 0519EC 0030+00 1/0 0/0 0/0 .text draw__19dKankyo_evil_PacketFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKankyo_evil_Packet::draw() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/draw__19dKankyo_evil_PacketFv.s" +void dKankyo_evil_Packet::draw() { + dKyr_evil_draw(j3dSys.getViewMtx(), &field_0x14); } -#pragma pop /* 800570DC-8005710C 051A1C 0030+00 1/1 0/0 0/0 .text dKyw_drawSun__Fi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dKyw_drawSun(int param_0) { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_drawSun__Fi.s" +static void dKyw_drawSun(int type) { + dKyw_setDrawPacketListSky(g_env_light.mpSunPacket, type); } -#pragma pop /* 8005710C-80057130 051A4C 0024+00 1/1 0/0 0/0 .text dKyw_Sun_Draw__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dKyw_Sun_Draw() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_Sun_Draw__Fv.s" +static void dKyw_Sun_Draw() { + dKyw_drawSun(XLU_BUFFER); } -#pragma pop /* 80057130-80057174 051A70 0044+00 1/1 0/0 0/0 .text dKyw_drawSunlenz__Fi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dKyw_drawSunlenz(int param_0) { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_drawSunlenz__Fi.s" +static void dKyw_drawSunlenz(int type) { + if (g_env_light.mpSunLenzPacket->field_0x9e == 0) { + dKyw_setDrawPacketListIndScreen(g_env_light.mpSunLenzPacket, type); + } else { + dKyw_setDrawPacketListSky(g_env_light.mpSunLenzPacket, type); + } } -#pragma pop /* 80057174-80057198 051AB4 0024+00 1/1 0/0 0/0 .text dKyw_Sunlenz_Draw__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dKyw_Sunlenz_Draw() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_Sunlenz_Draw__Fv.s" +static void dKyw_Sunlenz_Draw() { + dKyw_drawSunlenz(XLU_BUFFER); } -#pragma pop /* 80057198-800571C8 051AD8 0030+00 1/1 0/0 0/0 .text dKyw_drawRain__Fi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dKyw_drawRain(int param_0) { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_drawRain__Fi.s" +static void dKyw_drawRain(int type) { + dKyw_setDrawPacketList(g_env_light.mpRainPacket, type); } -#pragma pop /* 800571C8-800571EC 051B08 0024+00 1/1 0/0 0/0 .text dKyw_Rain_Draw__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dKyw_Rain_Draw() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_Rain_Draw__Fv.s" +static void dKyw_Rain_Draw() { + dKyw_drawRain(XLU_BUFFER); } -#pragma pop /* 800571EC-8005721C 051B2C 0030+00 1/1 0/0 0/0 .text dKyw_drawSnow__Fi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dKyw_drawSnow(int param_0) { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_drawSnow__Fi.s" +static void dKyw_drawSnow(int type) { + dKyw_setDrawPacketList(g_env_light.mpSnowPacket, type); } -#pragma pop /* 8005721C-80057240 051B5C 0024+00 1/1 0/0 0/0 .text dKyw_Snow_Draw__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dKyw_Snow_Draw() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_Snow_Draw__Fv.s" +static void dKyw_Snow_Draw() { + dKyw_drawSnow(XLU_BUFFER); } -#pragma pop /* 80057240-80057270 051B80 0030+00 1/1 0/0 0/0 .text dKyw_drawStar__Fi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dKyw_drawStar(int param_0) { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_drawStar__Fi.s" +static void dKyw_drawStar(int type) { + dKyw_setDrawPacketListSky(g_env_light.mpStarPacket, type); } -#pragma pop /* 80057270-80057294 051BB0 0024+00 1/1 0/0 0/0 .text dKyw_Star_Draw__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dKyw_Star_Draw() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_Star_Draw__Fv.s" +static void dKyw_Star_Draw() { + dKyw_drawStar(XLU_BUFFER); } -#pragma pop /* 80057294-800572C4 051BD4 0030+00 1/1 0/0 0/0 .text dKyw_drawHousi__Fi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dKyw_drawHousi(int param_0) { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_drawHousi__Fi.s" +static void dKyw_drawHousi(int type) { + dKyw_setDrawPacketList(g_env_light.mpHousiPacket, type); } -#pragma pop /* 800572C4-800572E8 051C04 0024+00 1/1 0/0 0/0 .text dKyw_Housi_Draw__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dKyw_Housi_Draw() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_Housi_Draw__Fv.s" +static void dKyw_Housi_Draw() { + dKyw_drawHousi(XLU_BUFFER); } -#pragma pop /* 800572E8-80057318 051C28 0030+00 1/1 0/0 0/0 .text dKyw_drawCloud__Fi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dKyw_drawCloud(int param_0) { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_drawCloud__Fi.s" +static void dKyw_drawCloud(int type) { + dKyw_setDrawPacketListIndScreen(g_env_light.mpCloudPacket, type); } -#pragma pop /* 80057318-8005733C 051C58 0024+00 1/1 0/0 0/0 .text dKyw_Cloud_Draw__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dKyw_Cloud_Draw() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_Cloud_Draw__Fv.s" +static void dKyw_Cloud_Draw() { + dKyw_drawCloud(XLU_BUFFER); } -#pragma pop /* 8005733C-8005736C 051C7C 0030+00 1/1 0/0 0/0 .text dKyw_drawVrkumo__Fi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dKyw_drawVrkumo(int param_0) { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_drawVrkumo__Fi.s" +static void dKyw_drawVrkumo(int type) { + dKyw_setDrawPacketListSky(g_env_light.mpVrkumoPacket, type); } -#pragma pop /* 8005736C-80057390 051CAC 0024+00 1/1 0/0 0/0 .text dKyw_Vrkumo_Draw__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dKyw_Vrkumo_Draw() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_Vrkumo_Draw__Fv.s" +static void dKyw_Vrkumo_Draw() { + dKyw_drawVrkumo(XLU_BUFFER); } -#pragma pop /* 80057390-800573C0 051CD0 0030+00 1/1 0/0 0/0 .text dKyw_shstar_packet__Fi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dKyw_shstar_packet(int param_0) { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_shstar_packet__Fi.s" +static void dKyw_shstar_packet(int type) { + dKyw_setDrawPacketListSky(g_env_light.mpShstarPacket, type); } -#pragma pop /* 800573C0-800573E4 051D00 0024+00 1/1 0/0 0/0 .text dKyw_shstar_Draw__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dKyw_shstar_Draw() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_shstar_Draw__Fv.s" +static void dKyw_shstar_Draw() { + dKyw_shstar_packet(XLU_BUFFER); } -#pragma pop /* 800573E4-80057414 051D24 0030+00 1/1 0/0 0/0 .text dKyw_odour_packet__Fi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dKyw_odour_packet(int param_0) { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_odour_packet__Fi.s" +static void dKyw_odour_packet(int type) { + dKyw_setDrawPacketListIndScreen(g_env_light.mpOdourPacket, type); } -#pragma pop /* 80057414-80057438 051D54 0024+00 1/1 0/0 0/0 .text dKyw_Odour_Draw__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dKyw_Odour_Draw() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_Odour_Draw__Fv.s" +static void dKyw_Odour_Draw() { + dKyw_odour_packet(XLU_BUFFER); } -#pragma pop /* 80057438-80057468 051D78 0030+00 1/1 0/0 0/0 .text dKyw_mud_packet__Fi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dKyw_mud_packet(int param_0) { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_mud_packet__Fi.s" +static void dKyw_mud_packet(int type) { + dKyw_setDrawPacketListXluBg(g_env_light.mpMudPacket, type); } -#pragma pop /* 80057468-8005748C 051DA8 0024+00 1/1 0/0 0/0 .text dKyw_mud_Draw__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dKyw_mud_Draw() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_mud_Draw__Fv.s" +static void dKyw_mud_Draw() { + dKyw_mud_packet(XLU_BUFFER); } -#pragma pop /* 8005748C-800574BC 051DCC 0030+00 1/1 0/0 0/0 .text dKyw_evil_packet__Fi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dKyw_evil_packet(int param_0) { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_evil_packet__Fi.s" +static void dKyw_evil_packet(int type) { + dKyw_setDrawPacketListXluBg(g_env_light.mpEvilPacket, type); } -#pragma pop /* 800574BC-800574E0 051DFC 0024+00 1/1 0/0 0/0 .text dKyw_evil_Draw__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dKyw_evil_Draw() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_evil_Draw__Fv.s" +static void dKyw_evil_Draw() { + dKyw_evil_packet(XLU_BUFFER); } -#pragma pop - -/* ############################################################################################## */ -/* 8037A368-8037A368 0069C8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_8037A368 = "F_SP113"; -SECTION_DEAD static char const* const stringBase_8037A370 = "D_MN07"; -#pragma pop /* 804520E0-804520E4 0006E0 0004+00 12/12 0/0 0/0 .sdata2 @4378 */ SECTION_SDATA2 static u8 lit_4378[4] = { @@ -950,95 +541,160 @@ SECTION_SDATA2 static u8 lit_4378[4] = { /* 804520E4-804520E8 0006E4 0004+00 11/11 0/0 0/0 .sdata2 @4379 */ SECTION_SDATA2 static f32 lit_4379 = 1.0f; +// remove these once float data is fixed +inline u32 tmp_dComIfGp_particle_set(u16 param_1, const cXyz* param_2, const dKy_tevstr_c* param_3, + const csXyz* param_4, const cXyz* param_5, u8 param_6, + dPa_levelEcallBack* param_7, s8 param_8, + const GXColor* param_9, const GXColor* param_10, + const cXyz* param_11) { + return g_dComIfG_gameInfo.play.getParticle()->setNormal(param_1, param_2, param_3, param_4, + param_5, param_6, param_7, param_8, + param_9, param_10, param_11, lit_4379); +} + +inline u32 tmp_dComIfGp_particle_set(u16 param_0, const cXyz* param_1, const csXyz* param_2, + const cXyz* param_3) { + return tmp_dComIfGp_particle_set(param_0, param_1, NULL, param_2, param_3, 0xFF, NULL, -1, NULL, + NULL, NULL); +} + /* 800574E0-800579EC 051E20 050C+00 0/0 1/1 0/0 .text dKyw_wether_init__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKyw_wether_init() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_wether_init__Fv.s" +void dKyw_wether_init() { + g_env_light.mSunPacketEnabled = false; + g_env_light.field_0xed4.field_0x0 = 0; + g_env_light.field_0xed4.field_0x4 = 0; + g_env_light.mRainPacketEnabled = 0; + g_env_light.mRainCount = 0; + g_env_light.mSnowPacketEnabled = 0; + g_env_light.field_0xe92 = 0; + g_env_light.mSnowCount = 0; + g_env_light.field_0xe90 = 0; + g_env_light.field_0xe91 = 0; + g_env_light.mStarPacketEnabled = false; + g_env_light.mStarCount = 0; + f32 tmp0 = FLOAT_LABEL(lit_4378); + g_env_light.mStarDensity = tmp0; + g_env_light.mCloudPacketEnabled = 0; + g_env_light.field_0xeb8 = 0; + g_env_light.field_0xebc = tmp0; + g_env_light.field_0xeb5 = 0; + g_env_light.mHousiPacketEnabled = false; + g_env_light.field_0xeac = 0; + g_env_light.mOdourPacketStatus = 0; + g_env_light.field_0xf24 = 0; + g_env_light.field_0xf21 = 0; + g_env_light.mpOdourPacket = NULL; + g_env_light.field_0x1038 = 0; + g_env_light.field_0x103c = 0; + g_env_light.mMudPacketEnabled = 0; + g_env_light.field_0x1048 = 0; + g_env_light.mEvilPacketEnabled = 0; + g_env_light.field_0x1054 = 0; + g_env_light.field_0x1051 = 0; + g_env_light.field_0xe60 = tmp0; + + dKyw_wind_init(); + dKyw_pntwind_init(); + + // Stage is Zora's Domain and Room is Outside Throne Room + if (!strcmp(dComIfGp_getStartStageName(), "F_SP113") && dComIfGp_roomControl_getStayNo() == 1 && + dComIfG_play_c::getLayerNo(0) < 8) { + cXyz tmp; + f32 tmp0_2 = FLOAT_LABEL(lit_4378); + tmp.z = tmp0_2; + tmp.y = tmp0_2; + tmp.x = tmp0_2; + + tmp_dComIfGp_particle_set(0x878F, &tmp, NULL, NULL); + tmp_dComIfGp_particle_set(0x8790, &tmp, NULL, NULL); + tmp_dComIfGp_particle_set(0x8791, &tmp, NULL, NULL); + tmp_dComIfGp_particle_set(0x8792, &tmp, NULL, NULL); + tmp_dComIfGp_particle_set(0x8793, &tmp, NULL, NULL); + tmp_dComIfGp_particle_set(0x8794, &tmp, NULL, NULL); + tmp_dComIfGp_particle_set(0x8795, &tmp, NULL, NULL); + tmp_dComIfGp_particle_set(0x8796, &tmp, NULL, NULL); + tmp_dComIfGp_particle_set(0x8797, &tmp, NULL, NULL); + tmp_dComIfGp_particle_set(0x8798, &tmp, NULL, NULL); + tmp_dComIfGp_particle_set(0x8799, &tmp, NULL, NULL); + tmp_dComIfGp_particle_set(0x879A, &tmp, NULL, NULL); + tmp_dComIfGp_particle_set(0x879B, &tmp, NULL, NULL); + } + + // Stage is City in the Sky + // Room is Entrance or Right Wing Outside or Left Wing Outside or Central Hub Outside + if (!strcmp(dComIfGp_getStartStageName(), "D_MN07")) { + if ((dComIfGp_roomControl_getStayNo() == 0 || dComIfGp_roomControl_getStayNo() == 3) || + dComIfGp_roomControl_getStayNo() == 6 || dComIfGp_roomControl_getStayNo() == 13) { + g_mEnvSeMgr.initStrongWindSe(); + } + } } -#pragma pop /* 800579EC-80057A04 05232C 0018+00 0/0 1/1 0/0 .text dKyw_wether_init2__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKyw_wether_init2() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_wether_init2__Fv.s" +void dKyw_wether_init2() { + g_env_light.field_0xec4 = 0; + g_env_light.field_0xec8 = 0; } -#pragma pop /* 80057A04-80057C84 052344 0280+00 0/0 1/1 0/0 .text dKyw_wether_delete__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKyw_wether_delete() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_wether_delete__Fv.s" +void dKyw_wether_delete() { + if (g_env_light.mSunPacketEnabled) { + delete g_env_light.mpSunPacket; + delete g_env_light.mpSunLenzPacket; + g_env_light.mpSunPacket = NULL; + g_env_light.mpSunLenzPacket = NULL; + } + + if (g_env_light.mRainPacketEnabled) { + delete g_env_light.mpRainPacket; + g_env_light.mpRainPacket = NULL; + } + + if (g_env_light.mSnowPacketEnabled) { + delete g_env_light.mpSnowPacket; + g_env_light.mpSnowPacket = NULL; + g_env_light.field_0xe90 = 0; + } + + if (g_env_light.mStarPacketEnabled) { + delete g_env_light.mpStarPacket; + g_env_light.mpStarPacket = NULL; + } + + if (g_env_light.mHousiPacketEnabled) { + delete g_env_light.mpHousiPacket; + g_env_light.mpHousiPacket = NULL; + } + + if (g_env_light.mCloudPacketEnabled) { + delete g_env_light.mpCloudPacket; + g_env_light.mpCloudPacket = NULL; + } + + if (g_env_light.mOdourPacketStatus) { + delete g_env_light.mpOdourPacket; + g_env_light.mpOdourPacket = NULL; + } + + if (g_env_light.mMudPacketEnabled) { + delete g_env_light.mpMudPacket; + g_env_light.mpMudPacket = NULL; + } + + if (g_env_light.mEvilPacketEnabled) { + delete g_env_light.mpEvilPacket; + g_env_light.mpEvilPacket = NULL; + } } -#pragma pop - -/* ############################################################################################## */ -/* 803A9AC0-803A9AD4 006BE0 0014+00 2/2 0/0 0/0 .data __vt__19dKankyo_evil_Packet */ -SECTION_DATA extern void* __vt__19dKankyo_evil_Packet[5] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)entry__9J3DPacketFP13J3DDrawBuffer, - (void*)draw__19dKankyo_evil_PacketFv, - (void*)__dt__19dKankyo_evil_PacketFv, -}; /* 80057C84-80057D08 0525C4 0084+00 1/0 0/0 0/0 .text __dt__19dKankyo_evil_PacketFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm dKankyo_evil_Packet::~dKankyo_evil_Packet() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/__dt__19dKankyo_evil_PacketFv.s" -} -#pragma pop - -/* ############################################################################################## */ -/* 803A9AD4-803A9AE8 006BF4 0014+00 2/2 0/0 0/0 .data __vt__18dKankyo_mud_Packet */ -SECTION_DATA extern void* __vt__18dKankyo_mud_Packet[5] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)entry__9J3DPacketFP13J3DDrawBuffer, - (void*)draw__18dKankyo_mud_PacketFv, - (void*)__dt__18dKankyo_mud_PacketFv, -}; +dKankyo_evil_Packet::~dKankyo_evil_Packet() {} /* 80057D08-80057D8C 052648 0084+00 1/0 0/0 0/0 .text __dt__18dKankyo_mud_PacketFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm dKankyo_mud_Packet::~dKankyo_mud_Packet() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/__dt__18dKankyo_mud_PacketFv.s" -} -#pragma pop - -/* ############################################################################################## */ -/* 803A9AE8-803A9AFC 006C08 0014+00 2/2 0/0 0/0 .data __vt__20dKankyo_odour_Packet */ -SECTION_DATA extern void* __vt__20dKankyo_odour_Packet[5] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)entry__9J3DPacketFP13J3DDrawBuffer, - (void*)draw__20dKankyo_odour_PacketFv, - (void*)__dt__20dKankyo_odour_PacketFv, -}; +dKankyo_mud_Packet::~dKankyo_mud_Packet() {} /* 80057D8C-80057E10 0526CC 0084+00 1/0 0/0 0/0 .text __dt__20dKankyo_odour_PacketFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm dKankyo_odour_Packet::~dKankyo_odour_Packet() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/__dt__20dKankyo_odour_PacketFv.s" -} -#pragma pop +dKankyo_odour_Packet::~dKankyo_odour_Packet() {} /* ############################################################################################## */ /* 803A9AFC-803A9B10 006C1C 0014+00 2/2 0/0 0/0 .data __vt__21dKankyo_vrkumo_Packet */ @@ -1050,43 +706,11 @@ SECTION_DATA extern void* __vt__21dKankyo_vrkumo_Packet[5] = { (void*)__dt__21dKankyo_vrkumo_PacketFv, }; -/* 803A9B10-803A9B24 006C30 0014+00 2/2 0/0 0/0 .data __vt__20dKankyo_housi_Packet */ -SECTION_DATA extern void* __vt__20dKankyo_housi_Packet[5] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)entry__9J3DPacketFP13J3DDrawBuffer, - (void*)draw__20dKankyo_housi_PacketFv, - (void*)__dt__20dKankyo_housi_PacketFv, -}; - -/* 803A9B24-803A9B38 006C44 0014+00 2/2 0/0 0/0 .data __vt__20dKankyo_cloud_Packet */ -SECTION_DATA extern void* __vt__20dKankyo_cloud_Packet[5] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)entry__9J3DPacketFP13J3DDrawBuffer, - (void*)draw__20dKankyo_cloud_PacketFv, - (void*)__dt__20dKankyo_cloud_PacketFv, -}; - /* 80057E10-80057E94 052750 0084+00 1/0 0/0 0/0 .text __dt__20dKankyo_cloud_PacketFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm dKankyo_cloud_Packet::~dKankyo_cloud_Packet() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/__dt__20dKankyo_cloud_PacketFv.s" -} -#pragma pop +dKankyo_cloud_Packet::~dKankyo_cloud_Packet() {} /* 80057E94-80057F18 0527D4 0084+00 1/0 0/0 0/0 .text __dt__20dKankyo_housi_PacketFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm dKankyo_housi_Packet::~dKankyo_housi_Packet() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/__dt__20dKankyo_housi_PacketFv.s" -} -#pragma pop +dKankyo_housi_Packet::~dKankyo_housi_Packet() {} /* ############################################################################################## */ /* 803A9B38-803A9B4C 006C58 0014+00 1/1 1/1 0/0 .data __vt__19dKankyo_star_Packet */ @@ -1099,34 +723,10 @@ SECTION_DATA extern void* __vt__19dKankyo_star_Packet[5] = { }; /* 80057F18-80057F9C 052858 0084+00 1/0 0/0 0/0 .text __dt__19dKankyo_star_PacketFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm dKankyo_star_Packet::~dKankyo_star_Packet() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/__dt__19dKankyo_star_PacketFv.s" -} -#pragma pop - -/* ############################################################################################## */ -/* 803A9B4C-803A9B60 006C6C 0014+00 1/1 1/1 0/0 .data __vt__19dKankyo_snow_Packet */ -SECTION_DATA extern void* __vt__19dKankyo_snow_Packet[5] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)entry__9J3DPacketFP13J3DDrawBuffer, - (void*)draw__19dKankyo_snow_PacketFv, - (void*)__dt__19dKankyo_snow_PacketFv, -}; +dKankyo_star_Packet::~dKankyo_star_Packet() {} /* 80057F9C-80058020 0528DC 0084+00 1/0 0/0 0/0 .text __dt__19dKankyo_snow_PacketFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm dKankyo_snow_Packet::~dKankyo_snow_Packet() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/__dt__19dKankyo_snow_PacketFv.s" -} -#pragma pop +dKankyo_snow_Packet::~dKankyo_snow_Packet() {} /* ############################################################################################## */ /* 803A9B60-803A9B74 006C80 0014+00 2/2 0/0 0/0 .data __vt__19dKankyo_rain_Packet */ @@ -1139,112 +739,44 @@ SECTION_DATA extern void* __vt__19dKankyo_rain_Packet[5] = { }; /* 80058020-800580A4 052960 0084+00 1/0 0/0 0/0 .text __dt__19dKankyo_rain_PacketFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm dKankyo_rain_Packet::~dKankyo_rain_Packet() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/__dt__19dKankyo_rain_PacketFv.s" -} -#pragma pop - -/* ############################################################################################## */ -/* 803A9B74-803A9B88 006C94 0014+00 2/2 0/0 0/0 .data __vt__22dKankyo_sunlenz_Packet */ -SECTION_DATA extern void* __vt__22dKankyo_sunlenz_Packet[5] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)entry__9J3DPacketFP13J3DDrawBuffer, - (void*)draw__22dKankyo_sunlenz_PacketFv, - (void*)__dt__22dKankyo_sunlenz_PacketFv, -}; +dKankyo_rain_Packet::~dKankyo_rain_Packet() {} /* 800580A4-80058128 0529E4 0084+00 1/0 0/0 0/0 .text __dt__22dKankyo_sunlenz_PacketFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm dKankyo_sunlenz_Packet::~dKankyo_sunlenz_Packet() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/__dt__22dKankyo_sunlenz_PacketFv.s" -} -#pragma pop - -/* ############################################################################################## */ -/* 803A9B88-803A9BA0 006CA8 0014+04 2/2 0/0 0/0 .data __vt__18dKankyo_sun_Packet */ -SECTION_DATA extern void* __vt__18dKankyo_sun_Packet[5 + 1 /* padding */] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)entry__9J3DPacketFP13J3DDrawBuffer, - (void*)draw__18dKankyo_sun_PacketFv, - (void*)__dt__18dKankyo_sun_PacketFv, - /* padding */ - NULL, -}; +dKankyo_sunlenz_Packet::~dKankyo_sunlenz_Packet() {} /* 80058128-800581AC 052A68 0084+00 1/0 0/0 0/0 .text __dt__18dKankyo_sun_PacketFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm dKankyo_sun_Packet::~dKankyo_sun_Packet() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/__dt__18dKankyo_sun_PacketFv.s" -} -#pragma pop +dKankyo_sun_Packet::~dKankyo_sun_Packet() {} /* 800581AC-8005820C 052AEC 0060+00 0/0 1/1 0/0 .text dKyw_wether_delete2__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKyw_wether_delete2() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_wether_delete2__Fv.s" +void dKyw_wether_delete2() { + if (g_env_light.field_0xec4 != 0) { + delete g_env_light.mpVrkumoPacket; + g_env_light.mpVrkumoPacket = NULL; + } } -#pragma pop /* 8005820C-80058290 052B4C 0084+00 1/0 0/0 0/0 .text __dt__21dKankyo_vrkumo_PacketFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm dKankyo_vrkumo_Packet::~dKankyo_vrkumo_Packet() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/__dt__21dKankyo_vrkumo_PacketFv.s" -} -#pragma pop +dKankyo_vrkumo_Packet::~dKankyo_vrkumo_Packet() {} /* 80058290-800582F8 052BD0 0068+00 1/1 0/0 0/0 .text wether_move_thunder__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void wether_move_thunder() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/wether_move_thunder__Fv.s" +static void wether_move_thunder() { + switch (g_env_light.field_0xed4.field_0x0) { + case 0: + if (g_env_light.field_0xed4.field_0x4 != 0) { + dKyr_thunder_init(); + g_env_light.field_0xed4.field_0x0 = 1; + } + break; + case 1: + dKyr_thunder_move(); + break; + } } -#pragma pop /* 800582F8-80058318 052C38 0020+00 0/0 1/1 0/0 .text dKyw_wether_move__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKyw_wether_move() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_wether_move__Fv.s" +void dKyw_wether_move() { + wether_move_thunder(); } -#pragma pop - -/* ############################################################################################## */ -/* 8037A368-8037A368 0069C8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_8037A377 = "F_SP200"; -SECTION_DEAD static char const* const stringBase_8037A37F = "D_MN09"; -SECTION_DEAD static char const* const stringBase_8037A386 = "D_MN09A"; -SECTION_DEAD static char const* const stringBase_8037A38E = "F_moon.bti"; -SECTION_DEAD static char const* const stringBase_8037A399 = "F_moon_A.bti"; -SECTION_DEAD static char const* const stringBase_8037A3A6 = "F_moon_A_A00.bti"; -SECTION_DEAD static char const* const stringBase_8037A3B7 = "F_moon_A_A01.bti"; -SECTION_DEAD static char const* const stringBase_8037A3C8 = "F_moon_A_A02.bti"; -SECTION_DEAD static char const* const stringBase_8037A3D9 = "F_moon_A_A03.bti"; -SECTION_DEAD static char const* const stringBase_8037A3EA = "Always"; -#pragma pop /* 804520E8-804520EC 0006E8 0004+00 1/1 0/0 0/0 .sdata2 @4610 */ SECTION_SDATA2 static f32 lit_4610 = 255.0f; @@ -1253,14 +785,107 @@ SECTION_SDATA2 static f32 lit_4610 = 255.0f; SECTION_SDATA2 static f32 lit_4611 = 1000000000.0f; /* 80058318-80058894 052C58 057C+00 1/1 0/0 0/0 .text wether_move_sun__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void wether_move_sun() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/wether_move_sun__Fv.s" +static void wether_move_sun() { + s32 sunVisible = false; + if (dComIfGp_checkStatus(1) && !g_env_light.field_0x12d4) { + roomRead_class* room = dComIfGp_getStageRoom(); + if (room != NULL && room->field_0x0 > dComIfGp_roomControl_getStayNo()) { + sunVisible = dStage_roomRead_dt_c_GetVrboxswitch( + *room->field_0x4[dComIfGp_roomControl_getStayNo()]); + } + + // Stage is Hero Shade arena + if (!strcmp(dComIfGp_getStartStageName(), "F_SP200")) { + sunVisible = true; + // Stage is Hyrule Castle or Castle Throne Room + } else if (!strcmp(dComIfGp_getStartStageName(), "D_MN09") || + !strcmp(dComIfGp_getStartStageName(), "D_MN09A")) { + sunVisible = false; + } + + switch (g_env_light.mSunPacketEnabled) { + case FALSE: + if (sunVisible && dKy_darkworld_check() != true) { + g_env_light.mpSunPacket = new (0x20) dKankyo_sun_Packet(); + g_env_light.mpSunLenzPacket = new (0x20) dKankyo_sunlenz_Packet(); + if (g_env_light.mpSunPacket != NULL && g_env_light.mpSunLenzPacket != NULL) { + g_env_light.mpSunPacket->mpResMoon = (u8*)dComIfG_getStageRes("F_moon.bti"); + g_env_light.mpSunPacket->mpResMoon_A = (u8*)dComIfG_getStageRes("F_moon_A.bti"); + g_env_light.mpSunPacket->mpResMoon_A_A00 = + (u8*)dComIfG_getStageRes("F_moon_A_A00.bti"); + g_env_light.mpSunPacket->mpResMoon_A_A01 = + (u8*)dComIfG_getStageRes("F_moon_A_A01.bti"); + g_env_light.mpSunPacket->mpResMoon_A_A02 = + (u8*)dComIfG_getStageRes("F_moon_A_A02.bti"); + g_env_light.mpSunPacket->mpResMoon_A_A03 = + (u8*)dComIfG_getStageRes("F_moon_A_A03.bti"); + + if (g_env_light.mpSunPacket->mpResMoon == NULL) { + g_env_light.mpSunPacket->mpResMoon = + (u8*)dComIfG_getObjectRes("Always", 0x56); + g_env_light.mpSunPacket->mpResMoon_A = + (u8*)dComIfG_getObjectRes("Always", 0x56); + g_env_light.mpSunPacket->mpResMoon_A_A00 = + (u8*)dComIfG_getObjectRes("Always", 0x56); + g_env_light.mpSunPacket->mpResMoon_A_A01 = + (u8*)dComIfG_getObjectRes("Always", 0x56); + g_env_light.mpSunPacket->mpResMoon_A_A02 = + (u8*)dComIfG_getObjectRes("Always", 0x56); + g_env_light.mpSunPacket->mpResMoon_A_A03 = + (u8*)dComIfG_getObjectRes("Always", 0x56); + } + g_env_light.mpSunPacket->field_0x28 = 0; + g_env_light.mpSunPacket->field_0x29 = 0; + f32 tmp0 = FLOAT_LABEL(lit_4378); + g_env_light.mpSunPacket->field_0x5c = tmp0; + g_env_light.mpSunPacket->field_0x60 = tmp0; + g_env_light.mpSunPacket->field_0x64 = tmp0; + g_env_light.mpSunPacket->field_0x68 = tmp0; + + if (g_env_light.mDaytime < lit_4610) { + g_env_light.mpSunPacket->field_0x6c = lit_4379; + } else { + g_env_light.mpSunPacket->field_0x6c = tmp0; + } + g_env_light.mpSunPacket->field_0x44 = 0; + g_env_light.mpSunPacket->field_0x48 = 0; + g_env_light.mpSunPacket->field_0x4c = 0; + g_env_light.mpSunPacket->field_0x50 = 0; + g_env_light.mpSunPacket->field_0x54 = 0; + g_env_light.mpSunPacket->field_0x58 = 0; + + g_env_light.mpSunLenzPacket->mpResBall = + (u8*)dComIfG_getObjectRes("Always", 0x4A); + g_env_light.mpSunLenzPacket->mpResRing_A = + (u8*)dComIfG_getObjectRes("Always", 0x57); + g_env_light.mpSunLenzPacket->mpResLenz = + (u8*)dComIfG_getObjectRes("Always", 0x5C); + g_env_light.mpSunLenzPacket->field_0x8c = lit_4611; + f32 tmp0_2 = FLOAT_LABEL(lit_4378); + g_env_light.mpSunLenzPacket->field_0x90 = tmp0_2; + g_env_light.mpSunLenzPacket->field_0x98 = tmp0_2; + g_env_light.mpSunLenzPacket->field_0x9e = 0; + dKyr_sun_move(); + dKyr_lenzflare_move(); + g_env_light.mSunPacketEnabled = true; + } + } + break; + case TRUE: + if (!sunVisible) { + g_env_light.mSunPacketEnabled = false; + delete g_env_light.mpSunPacket; + delete g_env_light.mpSunLenzPacket; + g_env_light.mpSunPacket = NULL; + g_env_light.mpSunLenzPacket = NULL; + } else { + dKyr_sun_move(); + dKyr_lenzflare_move(); + } + break; + } + } } -#pragma pop /* ############################################################################################## */ /* 8037A368-8037A368 0069C8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ @@ -1279,6 +904,50 @@ SECTION_SDATA2 static f32 lit_4669 = 125.0f; SECTION_SDATA2 static f64 lit_4671 = 4503601774854144.0 /* cast s32 to float */; /* 80058894-80058B00 0531D4 026C+00 1/1 0/0 0/0 .text wether_move_rain__Fv */ +// matches with literals +#ifdef NONMATCHING +static void wether_move_rain() { + switch (g_env_light.mRainPacketEnabled) { + case FALSE: + if (g_env_light.mRainCount > 3) { + g_env_light.mpRainPacket = new (32) dKankyo_rain_Packet(); + + if (g_env_light.mpRainPacket != NULL) { + dKyr_rain_init(); + dKyr_rain_move(); + g_env_light.mRainPacketEnabled = 1; + + if (g_env_light.mRainCount != 250) { + mDoAud_seStart(JA_SE_ATM_RAIN_START, NULL, 0, 0); + } + } + } + break; + case TRUE: + camera_class* cam = dComIfGp_getCamera(0); + dKyr_rain_move(); + + if (g_env_light.mSnowCount == 0 && cam != NULL) { + // Stage is not Fishing Pond + if (strcmp(dComIfGp_getStartStageName(), "R_SP127") || cam->field_0xd8.y > 0.0f) { + if (g_env_light.mRainCount < 125.0f) { + mDoAud_rainPlay(FALSE); + } else { + mDoAud_rainPlay(TRUE); + } + } + } + + if (g_env_light.mRainCount <= 3) { + g_env_light.mRainPacketEnabled = 0; + mDoAud_seStart(JA_SE_ATM_RAIN_END, NULL, 0, 0); + delete g_env_light.mpRainPacket; + g_env_light.mpRainPacket = NULL; + } + break; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -1287,16 +956,25 @@ static asm void wether_move_rain() { #include "asm/d/kankyo/d_kankyo_wether/wether_move_rain__Fv.s" } #pragma pop +#endif /* 80058B00-80058B8C 053440 008C+00 1/1 0/0 0/0 .text wether_move_snow__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void wether_move_snow() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/wether_move_snow__Fv.s" +static void wether_move_snow() { + switch (g_env_light.mSnowPacketEnabled) { + case FALSE: + if (g_env_light.mSnowCount != 0 || g_env_light.field_0xe90 != 0) { + dKyr_snow_init(); + if (g_env_light.mpSnowPacket != NULL) { + dKyr_snow_move(); + g_env_light.mSnowPacketEnabled = 1; + } + } + break; + case TRUE: + dKyr_snow_move(); + break; + } } -#pragma pop /* ############################################################################################## */ /* 8037A368-8037A368 0069C8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ @@ -1344,59 +1022,260 @@ SECTION_SDATA2 static f32 lit_4771 = 1200.0f; SECTION_SDATA2 static f32 lit_4772 = 500.0f; /* 80058B8C-80058F18 0534CC 038C+00 1/1 0/0 0/0 .text wether_move_star__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void wether_move_star() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/wether_move_star__Fv.s" +static void wether_move_star() { + s32 starsVisible = false; + // Stage is Hyrule Castle or Castle Throne Room + if (!strcmp(dComIfGp_getStartStageName(), "D_MN09") || + !strcmp(dComIfGp_getStartStageName(), "D_MN09A")) { + return; + } else { + // Stage is Hero Shade arena + if ((dComIfGp_checkStatus(1) && !g_env_light.field_0x12d4) || + !strcmp(dComIfGp_getStartStageName(), "F_SP200")) { + roomRead_class* room = dComIfGp_getStageRoom(); + if (room != NULL && room->field_0x0 > dComIfGp_roomControl_getStayNo()) { + starsVisible = dStage_roomRead_dt_c_GetVrboxswitch( + *room->field_0x4[dComIfGp_roomControl_getStayNo()]); + } + + // Stage is Hero Shade arena + if (!strcmp(dComIfGp_getStartStageName(), "F_SP200")) { + starsVisible = true; + } + + if (starsVisible && dKy_darkworld_check() != true) { + f32 density; + f32 time = g_env_light.getDaytime(); + if (time >= lit_4761 || time < lit_4762) { + density = lit_4379; + } else if (time > lit_4763) { + density = lit_4379 - lit_4764 * (lit_4761 - time); + } else { + if (time < lit_4765) { + density = lit_4766 * (lit_4765 - time); + } else { + density = FLOAT_LABEL(lit_4378); + } + } + + if (g_env_light.field_0x12c8 != 0) { + density = FLOAT_LABEL(lit_4378); + } + + if (g_env_light.field_0x12c3 != 0 && g_env_light.field_0x11dc > lit_4767) { + density = FLOAT_LABEL(lit_4378); + } + + // Stage is Hero Shade arena + if (!strcmp(dComIfGp_getStartStageName(), "F_SP200")) { + density = lit_4379; + } + + cLib_addCalc(&g_env_light.mStarDensity, density, lit_4768, lit_4769, lit_4770); + g_env_light.mStarCount = (s16)(lit_4771 * g_env_light.mStarDensity); + + // Stage is Hyrule Field or Outside Castle Town or Hidden Village + if (!strcmp(dComIfGp_getStartStageName(), "F_SP121") || + !strcmp(dComIfGp_getStartStageName(), "F_SP122") || + !strcmp(dComIfGp_getStartStageName(), "F_SP128")) { + g_env_light.mStarCount = (s16)(lit_4772 * g_env_light.mStarDensity); + } + + switch (g_env_light.mStarPacketEnabled) { + case FALSE: + if (g_env_light.mStarCount != 0) { + dKyr_star_init(); + dKyr_shstar_init(); + + if (g_env_light.mpStarPacket != NULL) { + dKyr_star_move(); + dKyr_shstar_move(); + g_env_light.mStarPacketEnabled = true; + } + } + break; + case TRUE: + dKyr_star_move(); + dKyr_shstar_move(); + + if (g_env_light.mStarCount == 0) { + g_env_light.mStarPacketEnabled = false; + + delete g_env_light.mpStarPacket; + g_env_light.mpStarPacket = NULL; + } + break; + } + } + } + } } -#pragma pop - -/* ############################################################################################## */ -/* 8037A368-8037A368 0069C8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_8037A411 = "D_MN08"; -SECTION_DEAD static char const* const stringBase_8037A418 = "D_MN08A"; -SECTION_DEAD static char const* const stringBase_8037A420 = "D_MN08B"; -SECTION_DEAD static char const* const stringBase_8037A428 = "D_MN08C"; -SECTION_DEAD static char const* const stringBase_8037A430 = "F_SP115"; -SECTION_DEAD static char const* const stringBase_8037A438 = "F_SP108"; -SECTION_DEAD static char const* const stringBase_8037A440 = "F_SP116"; -SECTION_DEAD static char const* const stringBase_8037A448 = "momiji64s3tc.bti"; -SECTION_DEAD static char const* const stringBase_8037A459 = "sakura32ia4.bti"; -#pragma pop /* 80058F18-800593DC 053858 04C4+00 1/1 0/0 0/0 .text wether_move_housi__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void wether_move_housi() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/wether_move_housi__Fv.s" +static void wether_move_housi() { + // Stage is Palace of Twilight or Zant Throne Room, or Phantom Zant arena + // Room is not Entrance or Boss Key room + if ((!strcmp(dComIfGp_getStartStageName(), "D_MN08") && dComIfGp_roomControl_getStayNo() != 0 && + dComIfGp_roomControl_getStayNo() != 11) || + (!strcmp(dComIfGp_getStartStageName(), "D_MN08A") || + !strcmp(dComIfGp_getStartStageName(), "D_MN08B") || + !strcmp(dComIfGp_getStartStageName(), "D_MN08C"))) { + return; + } + + // Stage is darkworld or Stage is Lake Hylia and Room is Lanayru Spring + if (dKy_darkworld_check() == true || + (!strcmp(dComIfGp_getStartStageName(), "F_SP115") && + dComIfGp_roomControl_getStayNo() == 1 && dComIfGp_getStartStageLayer() == 9)) { + if (g_env_light.field_0x12d2 != 0) { + g_env_light.field_0xea9 = 0; + g_env_light.field_0xeac = 200; + + // Stage is Faron Woods and Room is Faron Spring or + // Stage is Castle Town and Room is Castle Town Center or + // Stage is Faron Woods and Room is South Faron or + // Stage is Lake Hylia + if ((!strcmp(dComIfGp_getStartStageName(), "F_SP108") && + dComIfGp_getStartStageRoomNo() == 1 && dComIfGp_getStartStageLayer() == 13) || + (!strcmp(dComIfGp_getStartStageName(), "F_SP116") && + dComIfGp_getStartStageRoomNo() == 0 && dComIfGp_getStartStageLayer() == 8) || + (!strcmp(dComIfGp_getStartStageName(), "F_SP108") && + dComIfGp_getStartStageRoomNo() == 0 && dComIfGp_getStartStageLayer() == 9) || + (!strcmp(dComIfGp_getStartStageName(), "F_SP115") && + dComIfGp_getStartStageLayer() == 9)) { + g_env_light.field_0xeac = 0; + } + } + } + + switch (g_env_light.mHousiPacketEnabled) { + case FALSE: + if (g_env_light.field_0xeac != 0) { + g_env_light.mpHousiPacket = new (32) dKankyo_housi_Packet(); + + if (g_env_light.mpHousiPacket != NULL) { + if (dKy_darkworld_check() == true) { + g_env_light.mpHousiPacket->mpResTex = (u8*)dComIfG_getObjectRes("Always", 0x5E); + } else { + if (g_env_light.field_0xea9 == 2) { + if (g_env_light.field_0x12fe == 3) { + g_env_light.mpHousiPacket->mpResTex = + (u8*)dComIfG_getStageRes("momiji64s3tc.bti"); + } else { + g_env_light.mpHousiPacket->mpResTex = + (u8*)dComIfG_getStageRes("sakura32ia4.bti"); + } + + if (g_env_light.mpHousiPacket->mpResTex == NULL) { + g_env_light.mpHousiPacket->mpResTex = + (u8*)dComIfG_getObjectRes("Always", 0x55); + } + } else if (g_env_light.field_0xea9 == 0) { + g_env_light.mpHousiPacket->mpResTex = + (u8*)dComIfG_getObjectRes("Always", 0x55); + } else { + g_env_light.mpHousiPacket->mpResTex = + (u8*)dComIfG_getObjectRes("Always", 0x56); + } + } + + f32 tmp0 = FLOAT_LABEL(lit_4378); + g_env_light.mpHousiPacket->field_0x5de8 = tmp0; + g_env_light.mpHousiPacket->field_0x10.set(tmp0, tmp0, tmp0); + for (int i = 0; i < 300; i++) { + g_env_light.mpHousiPacket->field_0x18[i].field_0x0 = 0; + } + dKyr_housi_move(); + g_env_light.mHousiPacketEnabled = true; + } + } + break; + case TRUE: + if (g_env_light.field_0xeac == 0 && + g_env_light.mpHousiPacket->field_0x5de8 <= FLOAT_LABEL(lit_4378)) { + g_env_light.mHousiPacketEnabled = false; + delete g_env_light.mpHousiPacket; + g_env_light.mpHousiPacket = NULL; + } else { + dKyr_housi_move(); + if (!dKy_darkworld_check()) { + g_env_light.field_0xeac = 0; + } + } + break; + } } -#pragma pop /* 800593DC-80059580 053D1C 01A4+00 1/1 0/0 0/0 .text wether_move_odour__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void wether_move_odour() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/wether_move_odour__Fv.s" +static void wether_move_odour() { + switch (g_env_light.mOdourPacketStatus) { + case 0: + if (g_env_light.field_0xf21 != 0) { + g_env_light.mpOdourPacket = new (32) dKankyo_odour_Packet(); + + if (g_env_light.mpOdourPacket != NULL) { + g_env_light.mpOdourPacket->mpResTex = (u8*)dComIfG_getObjectRes("Always", 0x53); + dKyr_odour_init(); + dKyr_odour_move(); + g_env_light.mOdourPacketStatus = 1; + } + } + break; + case 1: + if (g_env_light.field_0xf21 == 0) { + g_env_light.mOdourPacketStatus = 0; + if (g_env_light.mpOdourPacket != NULL) { + delete g_env_light.mpOdourPacket; + g_env_light.mpOdourPacket = NULL; + } + } else { + dKyr_odour_move(); + } + break; + case 2: + g_env_light.field_0xf21 = 0; + g_env_light.mOdourPacketStatus = 0; + delete g_env_light.mpOdourPacket; + g_env_light.mpOdourPacket = NULL; + break; + } } -#pragma pop /* 80059580-80059728 053EC0 01A8+00 1/1 0/0 0/0 .text wether_move_moya__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void wether_move_moya() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/wether_move_moya__Fv.s" +static void wether_move_moya() { + switch (g_env_light.mCloudPacketEnabled) { + case 0: + if (g_env_light.field_0xeb8 != 0) { + g_env_light.mpCloudPacket = new (32) dKankyo_cloud_Packet(); + + if (g_env_light.mpCloudPacket != NULL) { + g_env_light.mpCloudPacket->mpResTex = (u8*)dComIfG_getObjectRes("Always", 0x53); + + for (int i = 0; i < 50; i++) { + g_env_light.mpCloudPacket->field_0x18[i].field_0x0 = 0; + } + g_env_light.mpCloudPacket->field_0x14 = 0; + cloud_shadow_move(); + g_env_light.mCloudPacketEnabled++; + } + } + break; + case 1: + if (g_env_light.field_0xeb5 == 0) { + dKyw_get_wind_pow(); + } + + cloud_shadow_move(); + + if (g_env_light.field_0xeb8 == 0 && g_env_light.mpCloudPacket->field_0x14 == 0) { + g_env_light.mCloudPacketEnabled = 0; + + delete g_env_light.mpCloudPacket; + g_env_light.mpCloudPacket = NULL; + } + break; + } } -#pragma pop /* ############################################################################################## */ /* 8037A368-8037A368 0069C8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ @@ -1466,71 +1345,139 @@ static asm void wether_move_vrkumo() { #pragma pop /* 80059E38-80059F74 054778 013C+00 1/1 0/0 0/0 .text wether_move_mud__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void wether_move_mud() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/wether_move_mud__Fv.s" +static void wether_move_mud() { + switch (g_env_light.mMudPacketEnabled) { + case 0: + if (g_env_light.field_0x1048 != 0) { + g_env_light.mpMudPacket = new (32) dKankyo_mud_Packet(); + + if (g_env_light.mpMudPacket != NULL) { + dKyr_mud_init(); + dKyr_mud_move(); + g_env_light.mMudPacketEnabled++; + } + } + break; + case 1: + dKyr_mud_move(); + + if (g_env_light.field_0x1048 == 0 && g_env_light.mpMudPacket->field_0x10 == 0) { + g_env_light.mMudPacketEnabled = 0; + + delete g_env_light.mpMudPacket; + g_env_light.mpMudPacket = NULL; + } + break; + } } -#pragma pop /* 80059F74-8005A0B8 0548B4 0144+00 1/1 0/0 0/0 .text wether_move_evil__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void wether_move_evil() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/wether_move_evil__Fv.s" +static void wether_move_evil() { + switch (g_env_light.mEvilPacketEnabled & 0xF) { + case 0: + if (g_env_light.field_0x1054 != 0) { + g_env_light.mpEvilPacket = new (32) dKankyo_evil_Packet(); + + if (g_env_light.mpEvilPacket != NULL) { + dKyr_evil_init(); + dKyr_evil_move(); + g_env_light.mEvilPacketEnabled++; + } + } + break; + case 1: + dKyr_evil_move(); + + if (g_env_light.field_0x1054 == 0 && g_env_light.mpEvilPacket->field_0x10 == 0) { + g_env_light.mEvilPacketEnabled = 0; + + delete g_env_light.mpEvilPacket; + g_env_light.mpEvilPacket = NULL; + } + break; + } } -#pragma pop - -/* ############################################################################################## */ -/* 8037A368-8037A368 0069C8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_8037A4AE = "Name"; -#pragma pop /* 8005A0B8-8005A154 0549F8 009C+00 0/0 1/1 0/0 .text dKyw_wether_move_draw__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKyw_wether_move_draw() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_wether_move_draw__Fv.s" +void dKyw_wether_move_draw() { + g_env_light.field_0x1288 = 0; + + if (strcmp(dComIfGp_getStartStageName(), "Name")) { + wether_move_sun(); + wether_move_rain(); + wether_move_snow(); + } + wether_move_star(); + + if (strcmp(dComIfGp_getStartStageName(), "Name")) { + wether_move_housi(); + wether_move_moya(); + wether_move_mud(); + wether_move_evil(); + wether_move_odour(); + } } -#pragma pop /* 8005A154-8005A174 054A94 0020+00 0/0 1/1 0/0 .text dKyw_wether_move_draw2__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKyw_wether_move_draw2() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_wether_move_draw2__Fv.s" +void dKyw_wether_move_draw2() { + wether_move_vrkumo(); } -#pragma pop /* 8005A174-8005A304 054AB4 0190+00 0/0 1/1 0/0 .text dKyw_wether_draw__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKyw_wether_draw() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_wether_draw__Fv.s" +void dKyw_wether_draw() { + if (strcmp(dComIfGp_getStartStageName(), "Name") && g_env_light.mCloudPacketEnabled != 0) { + dKyw_Cloud_Draw(); + } + + if (strcmp(dComIfGp_getStartStageName(), "Name") && g_env_light.mSunPacketEnabled) { + stage_stag_info_class* stag_info = dComIfGp_getStageStagInfo(); + + if (dStage_stagInfo_GetArg0(stag_info) != 0) { + dKyw_Sun_Draw(); + dKyw_Sunlenz_Draw(); + } + } + + if (g_env_light.mStarPacketEnabled) { + dKyw_Star_Draw(); + dKyw_shstar_Draw(); + } + + if (strcmp(dComIfGp_getStartStageName(), "Name")) { + if (g_env_light.mRainPacketEnabled) { + dKyw_Rain_Draw(); + } + + if (g_env_light.mSnowPacketEnabled) { + dKyw_Snow_Draw(); + } + + if (g_env_light.mHousiPacketEnabled) { + dKyw_Housi_Draw(); + } + + if (g_env_light.mOdourPacketStatus != 0) { + dKyw_Odour_Draw(); + } + + if (g_env_light.mMudPacketEnabled != 0) { + dKyw_mud_Draw(); + } + + if (g_env_light.mEvilPacketEnabled != 0) { + dKyw_evil_Draw(); + } + + dKy_undwater_filter_draw(); + } } -#pragma pop /* 8005A304-8005A340 054C44 003C+00 0/0 1/1 0/0 .text dKyw_wether_draw2__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKyw_wether_draw2() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_wether_draw2__Fv.s" +void dKyw_wether_draw2() { + if (g_env_light.field_0xec4 != 0 && g_env_light.field_0xec4 < 99) { + dKyw_Vrkumo_Draw(); + } } -#pragma pop /* ############################################################################################## */ /* 8037A368-8037A368 0069C8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ @@ -1558,6 +1505,49 @@ SECTION_SDATA2 static f32 lit_5364[1 + 1 /* padding */] = { }; /* 8005A340-8005A57C 054C80 023C+00 0/0 1/1 0/0 .text dKyw_wether_proc__Fv */ +// small branch issues +#ifdef NONMATCHING +void dKyw_wether_proc() { + // Stage is Faron Woods or Fishing Pond or Hyrule Field + if (!strcmp(dComIfGp_getStartStageName(), "F_SP108") || + !strcmp(dComIfGp_getStartStageName(), "F_SP127") || + (!strcmp(dComIfGp_getStartStageName(), "F_SP121") && + FLOAT_LABEL(lit_4378) != g_env_light.field_0x11d8)) { + if (!dKy_darkworld_check()) { + // Stage is Hyrule Field + if (!strcmp(dComIfGp_getStartStageName(), "F_SP121") || g_env_light.mDaytime >= 75.0f || + g_env_light.mDaytime <= 120.0f) { + // Stage is Hyrule Field + if (!strcmp(dComIfGp_getStartStageName(), "F_SP121") && + g_env_light.field_0x12c9 >= 1 && g_env_light.field_0x12c9 < 6) { + dKy_get_dayofweek(); + cLib_addCalc(&g_env_light.field_0xebc, lit_4379, lit_5362, lit_5363, lit_4770); + g_env_light.field_0xeb5 = 7; + g_env_light.field_0xeb8 = 49; + } else { + cLib_addCalc(&g_env_light.field_0xebc, FLOAT_LABEL(lit_4378), lit_5362, + lit_5363, lit_5364[0]); + if (g_env_light.field_0xebc <= lit_4769 && g_env_light.field_0xeb8 == 49) { + g_env_light.field_0xeb8 = 0; + } + } + } + } + } + + // Stage is Fishing Pond + if (!strcmp(dComIfGp_getStartStageName(), "F_SP127") && + (g_env_light.field_0x12fe == 1 || g_env_light.field_0x12fe == 3)) { + if (g_env_light.field_0x12fe == 1) { + g_env_light.field_0xeac = 35; + } else { + g_env_light.field_0xeac = 30; + } + g_env_light.field_0xea9 = 2; + } + squal_proc(); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -1566,16 +1556,23 @@ asm void dKyw_wether_proc() { #include "asm/d/kankyo/d_kankyo_wether/dKyw_wether_proc__Fv.s" } #pragma pop +#endif /* 8005A57C-8005A5C0 054EBC 0044+00 1/1 0/0 0/0 .text dKyw_wind_init__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dKyw_wind_init() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_wind_init__Fv.s" +static void dKyw_wind_init() { + g_env_light.mWind.vec.x = lit_4668; + f32 tmp_0 = FLOAT_LABEL(lit_4378); + g_env_light.mWind.vec.y = tmp_0; + g_env_light.mWind.vec.z = tmp_0; + g_env_light.mWind.pow = tmp_0; + g_env_light.field_0xe6c = 0; + g_env_light.field_0xe64 = 0; + g_env_light.field_0xe66 = 0; + g_env_light.mWind.field_0xc = 0; + g_env_light.custom_windpower = tmp_0; + g_env_light.field_0xe6d = 0; + g_env_light.field_0xe6e = 0; } -#pragma pop /* ############################################################################################## */ /* 80452178-80452180 000778 0008+00 3/3 0/0 0/0 .sdata2 @5524 */ @@ -1615,34 +1612,20 @@ asm void dKyw_wind_set() { #pragma pop /* 8005AAE0-8005AAF0 055420 0010+00 1/1 6/6 7/7 .text dKyw_get_wind_vec__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKyw_get_wind_vec() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_get_wind_vec__Fv.s" +cXyz& dKyw_get_wind_vec() { + return g_env_light.mWind.vec; } -#pragma pop /* 8005AAF0-8005AB00 055430 0010+00 1/1 6/6 8/8 .text dKyw_get_wind_pow__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKyw_get_wind_pow() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_get_wind_pow__Fv.s" +f32 dKyw_get_wind_pow() { + return g_env_light.mWind.pow; } -#pragma pop /* 8005AB00-8005AB64 055440 0064+00 0/0 8/8 3/3 .text dKyw_get_wind_vecpow__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKyw_get_wind_vecpow() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_get_wind_vecpow__Fv.s" +cXyz dKyw_get_wind_vecpow() { + cXyz vec = g_env_light.mWind.vec * g_env_light.mWind.pow; + return vec; } -#pragma pop /* 8005AB64-8005AC30 0554A4 00CC+00 0/0 0/0 1/1 .text dKyw_plight_collision_set__FP4cXyzssfffff */ #pragma push @@ -1670,54 +1653,52 @@ static asm void squal_proc() { #pragma pop /* 8005AD44-8005AD98 055684 0054+00 1/1 0/0 0/0 .text dKyw_pntwind_init__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dKyw_pntwind_init() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_pntwind_init__Fv.s" +static void dKyw_pntwind_init() { + for (int i = 0; i < 30; i++) { + g_env_light.mPntWind[i] = NULL; + } + + for (int i = 0; i < 5; i++) { + g_env_light.field_0x848[i].field_0x0[0] = 0; + } } -#pragma pop /* 8005AD98-8005ADFC 0556D8 0064+00 2/2 0/0 0/0 .text pntwind_set__FP14WIND_INFLUENCE */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void pntwind_set(WIND_INFLUENCE* param_0) { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/pntwind_set__FP14WIND_INFLUENCE.s" +static void pntwind_set(WIND_INFLUENCE* pntwind) { + int i = 0; + for (; i < 30; i++) { + if (g_env_light.mPntWind[i] == NULL) { + g_env_light.mPntWind[i] = pntwind; + g_env_light.mPntWind[i]->field_0x24 = i; + break; + } + } + + if (i >= 30) { + pntwind->field_0x24 = 9999; + } } -#pragma pop /* 8005ADFC-8005AE28 05573C 002C+00 0/0 0/0 5/5 .text dKyw_pntwind_set__FP14WIND_INFLUENCE */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKyw_pntwind_set(WIND_INFLUENCE* param_0) { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_pntwind_set__FP14WIND_INFLUENCE.s" +void dKyw_pntwind_set(WIND_INFLUENCE* pntwind) { + pntwind->field_0x28 = 0; + pntwind->field_0x29 = 0; + pntwind_set(pntwind); } -#pragma pop /* 8005AE28-8005AE58 055768 0030+00 1/1 0/0 0/0 .text dKyw_pntlight_set__FP14WIND_INFLUENCE */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dKyw_pntlight_set(WIND_INFLUENCE* param_0) { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_pntlight_set__FP14WIND_INFLUENCE.s" +static void dKyw_pntlight_set(WIND_INFLUENCE* pntwind) { + pntwind->field_0x28 = 0; + pntwind->field_0x29 = 1; + pntwind_set(pntwind); } -#pragma pop /* 8005AE58-8005AE90 055798 0038+00 1/1 0/0 5/5 .text dKyw_pntwind_cut__FP14WIND_INFLUENCE */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKyw_pntwind_cut(WIND_INFLUENCE* param_0) { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_pntwind_cut__FP14WIND_INFLUENCE.s" +void dKyw_pntwind_cut(WIND_INFLUENCE* pntwind_cut) { + if (pntwind_cut != NULL && pntwind_cut->field_0x24 >= 0 && pntwind_cut->field_0x24 < 30) { + g_env_light.mPntWind[pntwind_cut->field_0x24] = NULL; + } } -#pragma pop /* 8005AE90-8005B23C 0557D0 03AC+00 2/2 0/0 0/0 .text pntwind_get_info__FP4cXyzP4cXyzPfUc */ @@ -1731,27 +1712,28 @@ static asm void pntwind_get_info(cXyz* param_0, cXyz* param_1, f32* param_2, u8 #pragma pop /* 8005B23C-8005B260 055B7C 0024+00 3/3 0/0 0/0 .text dKyw_pntwind_get_info__FP4cXyzP4cXyzPf */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dKyw_pntwind_get_info(cXyz* param_0, cXyz* param_1, f32* param_2) { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_pntwind_get_info__FP4cXyzP4cXyzPf.s" +static void dKyw_pntwind_get_info(cXyz* param_0, cXyz* param_1, f32* param_2) { + pntwind_get_info(param_0, param_1, param_2, 0); } -#pragma pop /* 8005B260-8005B284 055BA0 0024+00 0/0 0/0 3/3 .text * dKyw_pntlight_collision_get_info__FP4cXyzP4cXyzPf */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKyw_pntlight_collision_get_info(cXyz* param_0, cXyz* param_1, f32* param_2) { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_pntlight_collision_get_info__FP4cXyzP4cXyzPf.s" +void dKyw_pntlight_collision_get_info(cXyz* param_0, cXyz* param_1, f32* param_2) { + pntwind_get_info(param_0, param_1, param_2, 1); } -#pragma pop /* 8005B284-8005B2F8 055BC4 0074+00 0/0 1/1 0/0 .text dKyw_pntwind_get_vecpow__FP4cXyz */ +// missing mr instruction +#ifdef NONMATCHING +void dKyw_pntwind_get_vecpow(cXyz* out_vec) { + f32 pow; + cXyz vec; + + dKyw_pntwind_get_info(out_vec, &vec, &pow); + vec = vec * pow; + *out_vec = vec; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -1760,6 +1742,7 @@ asm void dKyw_pntwind_get_vecpow(cXyz* param_0) { #include "asm/d/kankyo/d_kankyo_wether/dKyw_pntwind_get_vecpow__FP4cXyz.s" } #pragma pop +#endif /* ############################################################################################## */ /* 804521A8-804521B0 0007A8 0004+04 2/2 0/0 0/0 .sdata2 @5855 */ @@ -1780,6 +1763,23 @@ asm void dKyw_get_AllWind_vec(cXyz* param_0, cXyz* param_1, f32* param_2) { #pragma pop /* 8005B530-8005B60C 055E70 00DC+00 0/0 0/0 5/5 .text dKyw_get_AllWind_vecpow__FP4cXyz */ +// missing mr instruction +#ifdef NONMATCHING +void dKyw_get_AllWind_vecpow(cXyz* param_0) { + f32 sp8; + cXyz spC; + cXyz sp18; + cXyz sp24; + cXyz sp30; + + dKyw_pntwind_get_info(param_0, &sp30, &sp8); + sp18 = g_env_light.mWind.vec * (g_env_light.mWind.pow * (1.0f - sp8)); + sp24 = sp30 * (5.0f * sp8); + spC = sp18 + sp24; + + *param_0 = spC; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -1788,45 +1788,29 @@ asm void dKyw_get_AllWind_vecpow(cXyz* param_0) { #include "asm/d/kankyo/d_kankyo_wether/dKyw_get_AllWind_vecpow__FP4cXyz.s" } #pragma pop +#endif /* 8005B60C-8005B61C 055F4C 0010+00 0/0 0/0 5/5 .text dKyw_custom_windpower__Ff */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKyw_custom_windpower(f32 param_0) { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_custom_windpower__Ff.s" +void dKyw_custom_windpower(f32 pow) { + g_env_light.custom_windpower = pow; } -#pragma pop /* 8005B61C-8005B638 055F5C 001C+00 0/0 0/0 6/6 .text dKyw_evt_wind_set__Fss */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKyw_evt_wind_set(s16 param_0, s16 param_1) { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_evt_wind_set__Fss.s" +void dKyw_evt_wind_set(s16 param_0, s16 param_1) { + g_env_light.field_0xe6d = 1; + g_env_light.field_0xe68 = param_0; + g_env_light.field_0xe6a = param_1; } -#pragma pop /* 8005B638-8005B64C 055F78 0014+00 0/0 0/0 3/3 .text dKyw_evt_wind_set_go__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKyw_evt_wind_set_go() { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_evt_wind_set_go__Fv.s" +void dKyw_evt_wind_set_go() { + g_env_light.field_0xe6d = 1; } -#pragma pop /* 8005B64C-8005B660 055F8C 0014+00 0/0 1/1 5/5 .text dKyw_rain_set__Fi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dKyw_rain_set(int param_0) { - nofralloc -#include "asm/d/kankyo/d_kankyo_wether/dKyw_rain_set__Fi.s" +void dKyw_rain_set(int count) { + g_env_light.mRainCount = count; + g_env_light.field_0x129c = count; } -#pragma pop /* 8037A368-8037A368 0069C8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/src/d/map/d_map_path.cpp b/src/d/map/d_map_path.cpp index ab7b736490..779a93cd3e 100644 --- a/src/d/map/d_map_path.cpp +++ b/src/d/map/d_map_path.cpp @@ -17,14 +17,13 @@ struct dRes_control_c { /* 8003C2EC */ void getRes(char const*, s32, dRes_info_c*, int); }; - struct dMpath_n { struct dTexObjAggregate_c { /* 8003C85C */ void create(); /* 8003C8F4 */ void remove(); - /* 8003D740 */ ~dTexObjAggregate_c() {remove();}; + /* 8003D740 */ ~dTexObjAggregate_c() { remove(); }; inline dTexObjAggregate_c() { - for(int i = 0;i<7;i++) { + for (int i = 0; i < 7; i++) { mTexObjs[i] = NULL; } } @@ -34,7 +33,7 @@ struct dMpath_n { static dTexObjAggregate_c m_texObjAgg; }; -STATIC_ASSERT(sizeof(dMpath_n::dTexObjAggregate_c)==28); +STATIC_ASSERT(sizeof(dMpath_n::dTexObjAggregate_c) == 28); // // Forward References: @@ -245,42 +244,43 @@ asm void dRenderingFDAmap_c::setTevSettingIntensityTextureToCI() const { */ void dRenderingFDAmap_c::drawBack() const { GXClearVtxDesc(); - GXSetVtxDesc(GX_VA_POS,GX_DIRECT); - GXSetVtxAttrFmt(GX_VTXFMT0,GX_VA_POS,GX_CLR_RGBA,GX_F32,0); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_F32, 0); GXColor* colorPtr = getBackColor(); - GXSetTevColor(GX_TEVREG0,*colorPtr); - GXBegin(GX_QUADS,GX_VTXFMT0,4); - GXPosition3f32(-field_0x8,-field_0xc,0); - GXPosition3f32(field_0x8,-field_0xc,0); - GXPosition3f32(field_0x8,field_0xc,0); - GXPosition3f32(-field_0x8,field_0xc,0); + GXSetTevColor(GX_TEVREG0, *colorPtr); + GXBegin(GX_QUADS, GX_VTXFMT0, 4); + GXPosition3f32(-field_0x8, -field_0xc, 0); + GXPosition3f32(field_0x8, -field_0xc, 0); + GXPosition3f32(field_0x8, field_0xc, 0); + GXPosition3f32(-field_0x8, field_0xc, 0); GXEnd(); } /* 8003D188-8003D320 037AC8 0198+00 1/0 8/0 0/0 .text preRenderingMap__18dRenderingFDAmap_cFv */ void dRenderingFDAmap_c::preRenderingMap() { - GXSetViewport(0.0f,0.0f,field_0x1c,field_0x1e,0.0f,1.0f); - GXSetScissor(0,0,field_0x1c,field_0x1e); + GXSetViewport(0.0f, 0.0f, field_0x1c, field_0x1e, 0.0f, 1.0f); + GXSetScissor(0, 0, field_0x1c, field_0x1e); GXSetNumChans(1); GXSetNumTevStages(1); - GXSetChanCtrl(GX_COLOR0A0,GX_FALSE,GX_SRC_REG,GX_SRC_REG,GX_LIGHT_NULL,GX_DF_NONE,GX_AF_NONE); - GXSetAlphaCompare(GX_ALWAYS,0,GX_AOP_OR,GX_ALWAYS,0); + GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_NONE, + GX_AF_NONE); + GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); GXSetZCompLoc(GX_TRUE); - GXSetZMode(GX_FALSE,GX_ALWAYS,GX_FALSE); - GXSetBlendMode(GX_BM_NONE,GX_BL_SRC_ALPHA,GX_BL_INV_SRC_ALPHA,GX_LO_CLEAR); + GXSetZMode(GX_FALSE, GX_ALWAYS, GX_FALSE); + GXSetBlendMode(GX_BM_NONE, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_CLEAR); GXColor color = g_clearColor; - GXSetFog(GX_FOG_NONE,0.0f,0.0f,0.0f,0.0f,color); + GXSetFog(GX_FOG_NONE, 0.0f, 0.0f, 0.0f, 0.0f, color); GXSetCullMode(GX_CULL_NONE); GXSetDither(GX_FALSE); GXSetNumIndStages(0); GXSetClipMode(GX_FALSE); setTevSettingNonTextureDirectColor(); - float right = field_0x8*0.5f; - float top = field_0xc*0.5f; + float right = field_0x8 * 0.5f; + float top = field_0xc * 0.5f; Mtx44 matrix; - C_MTXOrtho(matrix,top,-top,-right,right,0.0f,10000.0f); - GXSetProjection(matrix,GX_ORTHOGRAPHIC); - GXLoadPosMtxImm(g_mDoMtx_identity,GX_PNMTX0); + C_MTXOrtho(matrix, top, -top, -right, right, 0.0f, 10000.0f); + GXSetProjection(matrix, GX_ORTHOGRAPHIC); + GXLoadPosMtxImm(g_mDoMtx_identity, GX_PNMTX0); GXSetCurrentMtx(0); drawBack(); } @@ -308,53 +308,55 @@ dMpath_n::dTexObjAggregate_c dMpath_n::m_texObjAgg; * renderingDecoration__18dRenderingFDAmap_cFPCQ211dDrawPath_c10line_class */ void dRenderingFDAmap_c::renderingDecoration(dDrawPath_c::line_class const* line) { s32 width = getDecorationLineWidth(line->unk1); - if (width<=0) { + if (width <= 0) { return; } setTevSettingIntensityTextureToCI(); GXClearVtxDesc(); - GXSetVtxDesc(GX_VA_POS,GX_INDEX16); - GXSetVtxDesc(GX_VA_TEX0,GX_DIRECT); - GXSetVtxAttrFmt(GX_VTXFMT0,GX_VA_POS,GX_POS_XY,GX_F32,0); - GXSetVtxAttrFmt(GX_VTXFMT0,GX_VA_TEX0,GX_POS_XYZ,GX_F32,0); + GXSetVtxDesc(GX_VA_POS, GX_INDEX16); + GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XY, GX_F32, 0); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_POS_XYZ, GX_F32, 0); GXSetNumTevStages(1); - GXLoadTexObj(dMpath_n::m_texObjAgg.mTexObjs[6],GX_TEXMAP0); + GXLoadTexObj(dMpath_n::m_texObjAgg.mTexObjs[6], GX_TEXMAP0); u16* unk = line->unk4; s32 unk2 = line->unk2; - GXSetLineWidth(width,GX_TO_ONE); - GXSetPointSize(width,GX_TO_ONE); - GXColor* lineColorPtr = getDecoLineColor(line->unk0&0x3f,line->unk1); - GXColor lineColor = *lineColorPtr; - GXSetTevColor(GX_TEVREG0,lineColor); - lineColor.r = lineColor.r-4; - GXSetTevColor(GX_TEVREG1,lineColor); - for (int i = 0; i<unk2; unk++,i++) { + GXSetLineWidth(width, GX_TO_ONE); + GXSetPointSize(width, GX_TO_ONE); + GXColor* lineColorPtr = getDecoLineColor(line->unk0 & 0x3f, line->unk1); + GXColor lineColor = *lineColorPtr; + GXSetTevColor(GX_TEVREG0, lineColor); + lineColor.r = lineColor.r - 4; + GXSetTevColor(GX_TEVREG1, lineColor); + for (int i = 0; i < unk2; unk++, i++) { #ifndef HYRULE_FIELD_SPEEDHACK - if(i<unk2-1) { - GXSetTevColorIn(GX_TEVSTAGE0,GX_CC_ZERO,GX_CC_ZERO,GX_CC_ZERO,GX_CC_C0); - GXSetTevColorOp(GX_TEVSTAGE0,GX_TEV_ADD,GX_TB_ZERO,GX_CS_SCALE_1,GX_TRUE,GX_TEVPREV); - GXSetTevAlphaIn(GX_TEVSTAGE0,GX_CA_ZERO,GX_CA_ZERO,GX_CA_ZERO,GX_CA_KONST); - GXSetTevAlphaOp(GX_TEVSTAGE0,GX_TEV_ADD,GX_TB_ZERO,GX_CS_SCALE_1,GX_TRUE,GX_TEVPREV); - GXBegin(GX_LINESTRIP,GX_VTXFMT0,2); + if (i < unk2 - 1) { + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, + GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_KONST); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, + GX_TEVPREV); + GXBegin(GX_LINESTRIP, GX_VTXFMT0, 2); GXPosition1x16(unk[0]); - GXTexCoord2f32(0,0); + GXTexCoord2f32(0, 0); GXPosition1x16(unk[1]); - GXTexCoord2f32(0,0); + GXTexCoord2f32(0, 0); } - GXSetTevColorIn(GX_TEVSTAGE0,GX_CC_ZERO,GX_CC_KONST,GX_CC_TEXC,GX_CC_C1); - GXSetTevColorOp(GX_TEVSTAGE0,GX_TEV_ADD,GX_TB_ZERO,GX_CS_SCALE_1,GX_TRUE,GX_TEVPREV); - GXSetTevAlphaIn(GX_TEVSTAGE0,GX_CA_ZERO,GX_CA_ZERO,GX_CA_ZERO,GX_CA_TEXA); - GXSetTevAlphaOp(GX_TEVSTAGE0,GX_TEV_ADD,GX_TB_ZERO,GX_CS_SCALE_1,GX_TRUE,GX_TEVPREV); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_KONST, GX_CC_TEXC, GX_CC_C1); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_TEXA); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); #endif - GXBegin(GX_POINTS,GX_VTXFMT0,1); + GXBegin(GX_POINTS, GX_VTXFMT0, 1); GXPosition1x16(unk[0]); - GXTexCoord2f32(0,0); + GXTexCoord2f32(0, 0); GXEnd(); } setTevSettingNonTextureDirectColor(); GXClearVtxDesc(); - GXSetVtxDesc(GX_VA_POS,GX_INDEX16); - GXSetVtxAttrFmt(GX_VTXFMT0,GX_VA_POS,GX_CLR_RGB,GX_F32,0); + GXSetVtxDesc(GX_VA_POS, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGB, GX_F32, 0); } /* 8003D68C-8003D6B8 037FCC 002C+00 1/0 6/0 0/0 .text getDecoLineColor__18dRenderingFDAmap_cFii */ diff --git a/src/d/menu/d_menu_letter.cpp b/src/d/menu/d_menu_letter.cpp index 5b4751f684..33d406e774 100644 --- a/src/d/menu/d_menu_letter.cpp +++ b/src/d/menu/d_menu_letter.cpp @@ -937,7 +937,7 @@ asm void J2DTextBox::getBlack() const { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void J2DPicture::getWhite() const { +asm JUtility::TColor J2DPicture::getWhite() const { nofralloc #include "asm/d/menu/d_menu_letter/getWhite__10J2DPictureCFv.s" } @@ -947,7 +947,7 @@ asm void J2DPicture::getWhite() const { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void J2DPicture::getBlack() const { +asm JUtility::TColor J2DPicture::getBlack() const { nofralloc #include "asm/d/menu/d_menu_letter/getBlack__10J2DPictureCFv.s" } diff --git a/src/d/menu/d_menu_window.cpp b/src/d/menu/d_menu_window.cpp index 5e5dbc971a..7100179a88 100644 --- a/src/d/menu/d_menu_window.cpp +++ b/src/d/menu/d_menu_window.cpp @@ -263,7 +263,6 @@ extern "C" extern void* g_fpcLf_Method[5 + 1 /* padding */]; extern "C" extern void* __vt__12dDlst_base_c[3]; extern "C" extern void* __vt__10CSTControl[4]; extern "C" u8 m_cpadInfo__8mDoCPd_c[256]; -extern "C" extern u8 g_clearColor[4]; extern "C" u8 mFader__13mDoGph_gInf_c[4]; extern "C" u8 mFrameBufferTimg__13mDoGph_gInf_c[4]; extern "C" u8 mFrameBufferTex__13mDoGph_gInf_c[4]; diff --git a/src/d/meter/d_meter2_draw.cpp b/src/d/meter/d_meter2_draw.cpp index 85392410c6..4fe4ed13bf 100644 --- a/src/d/meter/d_meter2_draw.cpp +++ b/src/d/meter/d_meter2_draw.cpp @@ -6,7 +6,9 @@ #include "d/meter/d_meter2_draw.h" #include "JSystem/J2DGraph/J2DAnmLoader.h" #include "d/com/d_com_inf_game.h" +#include "d/d_kantera_icon_meter.h" #include "d/meter/d_meter_HIO.h" +#include "d/msg/d_msg_object.h" #include "dol2asm.h" #include "dolphin/types.h" @@ -14,14 +16,6 @@ // Types: // -struct dKantera_icon_c { - /* 801AE938 */ dKantera_icon_c(); - /* 801AEB7C */ void setAlphaRate(f32); - /* 801AEBA0 */ void setPos(f32, f32); - /* 801AEBF4 */ void setScale(f32, f32); - /* 801AEC44 */ void setNowGauge(u16, u16); -}; - struct Z2SeMgr { /* 802AB984 */ void seStart(JAISoundID, Vec const*, u32, s8, f32, f32, f32, f32, u8); /* 802AC50C */ void seStartLevel(JAISoundID, Vec const*, u32, s8, f32, f32, f32, f32, u8); @@ -231,57 +225,46 @@ extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; // Declarations: // +inline bool dComIfGp_checkPlayerStatus0(int param_0, u32 param_1) { + return g_dComIfG_gameInfo.play.checkPlayerStatus(param_0, 0, param_1); +} + /* ############################################################################################## */ /* 80398258-80398280 0248B8 0028+00 4/4 0/0 0/0 .rodata a_tag$3949 */ -SECTION_RODATA static u8 const a_tag[40] = { - 0x63, 0x6F, 0x6E, 0x74, 0x5F, 0x61, 0x74, 0x31, 0x63, 0x6F, 0x6E, 0x74, 0x5F, 0x61, - 0x74, 0x32, 0x63, 0x6F, 0x6E, 0x74, 0x5F, 0x61, 0x74, 0x33, 0x63, 0x6F, 0x6E, 0x74, - 0x5F, 0x61, 0x74, 0x34, 0x00, 0x63, 0x6F, 0x6E, 0x74, 0x5F, 0x61, 0x74, +static u64 const a_tag[5] = { + 'cont_at1', 'cont_at2', 'cont_at3', 'cont_at4', 'cont_at', }; -COMPILER_STRIP_GATE(0x80398258, &a_tag); /* 80398280-803982A8 0248E0 0028+00 0/1 0/0 0/0 .rodata b_tag$3950 */ #pragma push #pragma force_active on -SECTION_RODATA static u8 const b_tag[40] = { - 0x63, 0x6F, 0x6E, 0x74, 0x5F, 0x62, 0x74, 0x31, 0x63, 0x6F, 0x6E, 0x74, 0x5F, 0x62, - 0x74, 0x32, 0x63, 0x6F, 0x6E, 0x74, 0x5F, 0x62, 0x74, 0x33, 0x63, 0x6F, 0x6E, 0x74, - 0x5F, 0x62, 0x74, 0x34, 0x00, 0x63, 0x6F, 0x6E, 0x74, 0x5F, 0x62, 0x74, +static u64 const b_tag[5] = { + 'cont_bt1', 'cont_bt2', 'cont_bt3', 'cont_bt4', 'cont_bt', }; -COMPILER_STRIP_GATE(0x80398280, &b_tag); #pragma pop /* 803982A8-803982D0 024908 0028+00 0/1 0/0 0/0 .rodata z_tag$3951 */ #pragma push #pragma force_active on -SECTION_RODATA static u8 const z_tag[40] = { - 0x63, 0x6F, 0x6E, 0x74, 0x5F, 0x7A, 0x74, 0x31, 0x63, 0x6F, 0x6E, 0x74, 0x5F, 0x7A, - 0x74, 0x32, 0x63, 0x6F, 0x6E, 0x74, 0x5F, 0x7A, 0x74, 0x33, 0x63, 0x6F, 0x6E, 0x74, - 0x5F, 0x7A, 0x74, 0x34, 0x00, 0x63, 0x6F, 0x6E, 0x74, 0x5F, 0x72, 0x74, +static u64 const z_tag[5] = { + 'cont_zt1', 'cont_zt2', 'cont_zt3', 'cont_zt4', 'cont_rt', }; -COMPILER_STRIP_GATE(0x803982A8, &z_tag); #pragma pop /* 803982D0-803982F8 024930 0028+00 0/1 0/0 0/0 .rodata x_tag$3952 */ #pragma push #pragma force_active on -SECTION_RODATA static u8 const x_tag[40] = { - 0x63, 0x6F, 0x6E, 0x74, 0x5F, 0x78, 0x74, 0x31, 0x63, 0x6F, 0x6E, 0x74, 0x5F, 0x78, - 0x74, 0x32, 0x63, 0x6F, 0x6E, 0x74, 0x5F, 0x78, 0x74, 0x33, 0x63, 0x6F, 0x6E, 0x74, - 0x5F, 0x78, 0x74, 0x34, 0x63, 0x6F, 0x6E, 0x74, 0x5F, 0x78, 0x74, 0x35, +static u64 const x_tag[5] = { + 'cont_xt1', 'cont_xt2', 'cont_xt3', 'cont_xt4', 'cont_xt5', }; -COMPILER_STRIP_GATE(0x803982D0, &x_tag); #pragma pop /* 803982F8-80398320 024958 0028+00 0/1 0/0 0/0 .rodata y_tag$3953 */ #pragma push #pragma force_active on -SECTION_RODATA static u8 const y_tag[40] = { - 0x63, 0x6F, 0x6E, 0x74, 0x5F, 0x79, 0x74, 0x31, 0x63, 0x6F, 0x6E, 0x74, 0x5F, 0x79, - 0x74, 0x32, 0x63, 0x6F, 0x6E, 0x74, 0x5F, 0x79, 0x74, 0x33, 0x63, 0x6F, 0x6E, 0x74, - 0x5F, 0x79, 0x74, 0x34, 0x63, 0x6F, 0x6E, 0x74, 0x5F, 0x79, 0x74, 0x35, +static u64 const y_tag[5] = { + 'cont_yt1', 'cont_yt2', 'cont_yt3', 'cont_yt4', 'cont_yt5', }; -COMPILER_STRIP_GATE(0x803982F8, &y_tag); #pragma pop /* 803988D0-803988D0 024F30 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ @@ -307,17 +290,9 @@ SECTION_DEAD static char const* const stringBase_803989BF = ""; #pragma pop /* 803BF328-803BF350 -00001 0028+00 1/1 0/0 0/0 .data bmg_filename$3954 */ -SECTION_DATA static void* bmg_filename[10] = { - (void*)&d_meter_d_meter2_draw__stringBase0, - (void*)(((char*)&d_meter_d_meter2_draw__stringBase0) + 0xB), - (void*)(((char*)&d_meter_d_meter2_draw__stringBase0) + 0x16), - (void*)(((char*)&d_meter_d_meter2_draw__stringBase0) + 0x21), - (void*)(((char*)&d_meter_d_meter2_draw__stringBase0) + 0x2C), - (void*)(((char*)&d_meter_d_meter2_draw__stringBase0) + 0x37), - (void*)(((char*)&d_meter_d_meter2_draw__stringBase0) + 0x42), - (void*)(((char*)&d_meter_d_meter2_draw__stringBase0) + 0x4D), - (void*)(((char*)&d_meter_d_meter2_draw__stringBase0) + 0x58), - (void*)(((char*)&d_meter_d_meter2_draw__stringBase0) + 0x63), +SECTION_DATA static char* bmg_filename[10] = { + "zel_00.bmg", "zel_01.bmg", "zel_02.bmg", "zel_03.bmg", "zel_04.bmg", + "zel_05.bmg", "zel_06.bmg", "zel_07.bmg", "zel_08.bmg", "zel_99.bmg", }; /* 803BF350-803BF554 01C470 0204+00 1/1 0/0 0/0 .data i_action_num$8471 */ @@ -527,6 +502,91 @@ SECTION_SDATA2 static f32 lit_4185 = 20.0f; /* 8020FAB4-802102F8 20A3F4 0844+00 0/0 1/1 0/0 .text __ct__13dMeter2Draw_cFP10JKRExpHeap */ +#ifdef NONMATCHING +dMeter2Draw_c::dMeter2Draw_c(JKRExpHeap* p_heap) { + mp_heap = p_heap; + JKRHeap* heap = mDoExt_setCurrentHeap(dComIfGp_getMsgExpHeap()); + + void* msg_res = JKRGetTypeResource('ROOT', "zel_00.bmg", dComIfGp_getMsgDtArchive(0)); + dMeter2Info_setMsgResource(msg_res); + + void* stg_msg_res = JKRGetTypeResource('ROOT', bmg_filename[dMsgObject_getGroupID()], + dComIfGp_getMsgDtArchive(1)); + dMeter2Info_setStageMsgResource(stg_msg_res); + + void* msg_unit_res = JKRGetTypeResource('ROOT', "zel_unit.bmg", dComIfGp_getMsgDtArchive(0)); + dMeter2Info_setMsgUnitResource(msg_unit_res); + mDoExt_setCurrentHeap(heap); + + mpScreen = new J2DScreen(); + mpScreen->setPriority("zelda_game_image.blo", 0x20000, dComIfGp_getMain2DArchive()); + dPaneClass_showNullPane(mpScreen); + mpScreen->search('ju_ring5')->hide(); + + field_0x73c = 0.0f; + for (int i = 0; i < 2; i++) { + mpKanteraMeter[i] = new dKantera_icon_c(); + } + mpKanteraScreen = new J2DScreen(); + mpKanteraScreen->setPriority("zelda_game_image_kantera.blo", 0x20000, + dComIfGp_getMain2DArchive()); + dPaneClass_showNullPane(mpKanteraScreen); + + mpPikariScreen = new J2DScreen(); + mpPikariScreen->setPriority("zelda_icon_pikari.blo", 0x20000, dComIfGp_getMain2DArchive()); + dPaneClass_showNullPane(mpPikariScreen); + mpPikariParent = new CPaneMgr(mpPikariScreen, 'pika_n', 0, NULL); + field_0x548 = ((J2DPicture*)mpPikariScreen->search('pika00'))->getBlack(); + field_0x54c = ((J2DPicture*)mpPikariScreen->search('pika00'))->getWhite(); + OSInitFastCast(); + void* pikari_bck = JKRGetNameResource("zelda_icon_pikari.bck", dComIfGp_getMain2DArchive()); + mPikariBck = (J2DAnmTransformKey*)J2DAnmLoaderDataBase::load(pikari_bck); + playPikariBckAnimation(1.0f); + void* pikari_bpk = JKRGetNameResource("zelda_icon_pikari.bpk", dComIfGp_getMain2DArchive()); + mPikariBpk = (J2DAnmColorKey*)J2DAnmLoaderDataBase::load(pikari_bpk); + mPikariBpk->searchUpdateMaterialID(mpPikariScreen); + playPikariBpkAnimation(1.0f); + + mpParent = new CPaneMgr(mpScreen, 'n_all', 2, NULL); + for (int i = 0; i < 5; i++) { + mpAText[i] = new CPaneMgr(mpScreen, a_tag[i], 0, NULL); + ((J2DTextBox*)mpAText[i]->getPanePtr())->setString(64, ""); + ((J2DTextBox*)mpAText[i]->getPanePtr())->setFont(mDoExt_getMesgFont()); + ((J2DTextBox*)mpAText[i]->getPanePtr())->setCharSpace(g_drawHIO.mAButtonFontSpacing); + + mpBText[i] = new CPaneMgr(mpScreen, b_tag[i], 0, NULL); + ((J2DTextBox*)mpBText[i]->getPanePtr())->setString(64, ""); + ((J2DTextBox*)mpBText[i]->getPanePtr())->setFont(mDoExt_getMesgFont()); + + mpXYText[i][2] = new CPaneMgr(mpScreen, z_tag[i], 0, NULL); + ((J2DTextBox*)mpXYText[i][2]->getPanePtr())->setString(64, ""); + ((J2DTextBox*)mpXYText[i][2]->getPanePtr())->setFont(mDoExt_getMesgFont()); + + mpXYText[i][0] = new CPaneMgr(mpScreen, x_tag[i], 0, NULL); + ((J2DTextBox*)mpXYText[i][0]->getPanePtr())->setString(64, ""); + ((J2DTextBox*)mpXYText[i][0]->getPanePtr())->setFont(mDoExt_getMesgFont()); + + mpXYText[i][1] = new CPaneMgr(mpScreen, y_tag[i], 0, NULL); + ((J2DTextBox*)mpXYText[i][1]->getPanePtr())->setString(64, ""); + ((J2DTextBox*)mpXYText[i][1]->getPanePtr())->setFont(mDoExt_getMesgFont()); + } + + J2DTextBox::TFontSize font_size = {lit_4184, lit_4185}; + for (int i = 0; i < 5; i++) { + ((J2DTextBox*)mpAText[i]->getPanePtr())->setFontSize(font_size); + ((J2DTextBox*)mpBText[i]->getPanePtr())->setFontSize(font_size); + ((J2DTextBox*)mpXYText[i][2]->getPanePtr())->setFontSize(font_size); + ((J2DTextBox*)mpXYText[i][0]->getPanePtr())->setFontSize(font_size); + ((J2DTextBox*)mpXYText[i][1]->getPanePtr())->setFontSize(font_size); + } + + init(); + field_0xa8 = 0; + field_0x1e4 = 0; + field_0x2fc = 0; + field_0x36c = 0; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -535,36 +595,437 @@ asm dMeter2Draw_c::dMeter2Draw_c(JKRExpHeap* param_0) { #include "asm/d/meter/d_meter2_draw/__ct__13dMeter2Draw_cFP10JKRExpHeap.s" } #pragma pop +#endif /* 802102F8-80210FB0 20AC38 0CB8+00 1/0 0/0 0/0 .text __dt__13dMeter2Draw_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm dMeter2Draw_c::~dMeter2Draw_c() { - nofralloc -#include "asm/d/meter/d_meter2_draw/__dt__13dMeter2Draw_cFv.s" +dMeter2Draw_c::~dMeter2Draw_c() { + dComIfGp_getMsgDtArchive(0)->removeResource(dMeter2Info_getMsgResource()); + dComIfGp_getMsgDtArchive(0)->removeResource(dMeter2Info_getMsgUnitResource()); + dComIfGp_getItemIconArchive()->removeResourceAll(); + + delete mpScreen; + mpScreen = NULL; + + delete mpKanteraScreen; + mpKanteraScreen = NULL; + + for (int i = 0; i < 2; i++) { + delete mpKanteraMeter[i]; + mpKanteraMeter[i] = NULL; + } + + delete mpParent; + mpParent = NULL; + + delete mpPikariScreen; + mpPikariScreen = NULL; + + delete mpPikariParent; + mpPikariParent = NULL; + + delete mPikariBck; + mPikariBck = NULL; + + delete mPikariBpk; + mPikariBpk = NULL; + + for (int i = 0; i < 5; i++) { + delete mpAText[i]; + mpAText[i] = NULL; + + delete mpBText[i]; + mpBText[i] = NULL; + + for (int j = 0; j < 3; j++) { + delete mpXYText[i][j]; + mpXYText[i][j] = NULL; + } + } + + delete mpLifeParent; + mpLifeParent = NULL; + + for (int i = 0; i < 20; i++) { + delete mpLifeParts[i]; + mpLifeParts[i] = NULL; + + delete mpHeartMask[i]; + mpHeartMask[i] = NULL; + + delete mpHeartBase[i]; + mpHeartBase[i] = NULL; + + delete mpLifeTexture[i][0]; + mpLifeTexture[i][0] = NULL; + + delete mpLifeTexture[i][1]; + mpLifeTexture[i][1] = NULL; + } + + delete mpBigHeart; + mpBigHeart = NULL; + + delete mpMagicParent; + mpMagicParent = NULL; + + delete mpMagicBase; + mpMagicBase = NULL; + + delete mpMagicFrameL; + mpMagicFrameL = NULL; + + delete mpMagicFrameR; + mpMagicFrameR = NULL; + + for (int i = 0; i < 3; i++) { + delete field_0x53c[i]; + field_0x53c[i] = NULL; + } + + delete mpMagicMeter; + mpMagicMeter = NULL; + + for (int i = 0; i < 2; i++) { + delete mpSIParent[i]; + mpSIParent[i] = NULL; + } + + delete mpLightDropParent; + mpLightDropParent = NULL; + + for (int i = 0; i < 16; i++) { + for (int j = 0; j < 3; j++) { + if (mpSIParts[i][j] != NULL) { + delete mpSIParts[i][j]; + mpSIParts[i][j] = NULL; + } + } + } + + delete mpRupeeKeyParent; + mpRupeeKeyParent = NULL; + + for (int i = 0; i < 4; i++) { + delete mpRupeeTexture[i][0]; + mpRupeeTexture[i][0] = NULL; + + delete mpRupeeTexture[i][1]; + mpRupeeTexture[i][1] = NULL; + } + + for (int i = 0; i < 3; i++) { + delete mpRupeeParent[i]; + mpRupeeParent[i] = NULL; + } + + for (int i = 0; i < 5; i++) { + delete mpKeyTexture[i]; + mpKeyTexture[i] = NULL; + } + + delete mpKeyParent; + mpKeyParent = NULL; + + for (int i = 0; i < 2; i++) { + for (int j = 0; j < 2; j++) { + mp_heap->free(mpItemBTex[i][j]); + mpItemBTex[i][j] = NULL; + } + } + + for (int i = 0; i < 2; i++) { + for (int j = 0; j < 2; j++) { + for (int k = 0; k < 2; k++) { + mp_heap->free(mpItemXYTex[i][j][k]); + mpItemXYTex[i][j][k] = NULL; + } + } + } + + delete mpItemB; + mpItemB = NULL; + mpItemBPane = NULL; + + for (int i = 0; i < 2; i++) { + if (mpItemXY[i] != NULL) { + delete mpItemXY[i]; + mpItemXY[i] = NULL; + } + } + + delete mpItemR; + mpItemR = NULL; + + for (int i = 0; i < 3; i++) { + mpItemXYPane[i] = NULL; + } + + delete mpLightB; + mpLightB = NULL; + + for (int i = 0; i < 3; i++) { + if (mpLightXY[i] != NULL) { + delete mpLightXY[i]; + mpLightXY[i] = NULL; + } + } + + delete mpBTextA; + mpBTextA = NULL; + + delete mpBTextB; + mpBTextB = NULL; + + for (int i = 0; i < 3; i++) { + if (mpBTextXY[i] != NULL) { + delete mpBTextXY[i]; + mpBTextXY[i] = NULL; + } + } + + delete mpTextA; + mpTextA = NULL; + + delete mpTextB; + mpTextB = NULL; + + for (int i = 0; i < 3; i++) { + delete mpTextXY[i]; + mpTextXY[i] = NULL; + } + + delete mpTextI; + mpTextI = NULL; + + delete mpTextM; + mpTextM = NULL; + + for (int i = 0; i < 5; i++) { + if (mpJujiI[i] != NULL) { + delete mpJujiI[i]; + mpJujiI[i] = NULL; + } + + if (mpJujiM[i] != NULL) { + delete mpJujiM[i]; + mpJujiM[i] = NULL; + } + } + + delete mpButtonParent; + mpButtonParent = NULL; + + delete mpButtonA; + mpButtonA = NULL; + + delete mpButtonB; + mpButtonB = NULL; + + delete mpButtonMidona; + mpButtonMidona = NULL; + + for (int i = 0; i < 3; i++) { + delete mpButtonXY[i]; + mpButtonXY[i] = NULL; + } + + if (mpUzu != NULL) { + delete mpUzu; + mpUzu = NULL; + } + + delete mpButtonCrossParent; + mpButtonCrossParent = NULL; + + for (int i = 0; i < 2; i++) { + for (int j = 0; j < 3; j++) { + if (mpItemNumTex[i][j] != NULL) { + delete mpItemNumTex[i][j]; + mpItemNumTex[i][j] = NULL; + } + } + } + + for (int i = 0; i < 3; i++) { + if (field_0x9c[i] != NULL) { + delete field_0x9c[i]; + field_0x9c[i] = NULL; + } + } } -#pragma pop /* 80210FB0-8021135C 20B8F0 03AC+00 1/1 0/0 0/0 .text init__13dMeter2Draw_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMeter2Draw_c::init() { - nofralloc -#include "asm/d/meter/d_meter2_draw/init__13dMeter2Draw_cFv.s" +void dMeter2Draw_c::init() { + f32 tmp_0 = FLOAT_LABEL(lit_4182); + field_0x608 = tmp_0; + field_0x60c = tmp_0; + + for (int i = 0; i < 3; i++) { + field_0x620[i] = tmp_0; + field_0x610[i] = tmp_0; + } + + f32 tmp_0_1 = FLOAT_LABEL(lit_4182); + field_0x61c = tmp_0_1; + for (int i = 0; i < 16; i++) { + field_0x62c[i] = tmp_0_1; + field_0x66c[i] = tmp_0_1; + } + + field_0x759 = 0; + field_0x75a = 0; + for (int i = 0; i < 3; i++) { + field_0x75c[i] = 0; + } + + field_0x75f = 0; + field_0x756 = -1; + + field_0x760 = 0; + + int j = 0; + f32 tmp_0_3 = FLOAT_LABEL(lit_4182); + for (; j < 3; j++) { + field_0x6ac[j] = tmp_0_3; + field_0x6b8[j] = tmp_0_3; + field_0x6c4[j] = tmp_0_3; + field_0x6d0[j] = tmp_0_3; + } + + f32 tmp_0_4 = FLOAT_LABEL(lit_4182); + field_0x6dc = tmp_0_4; + field_0x6e0 = tmp_0_4; + field_0x6e4 = tmp_0_4; + field_0x6e8 = tmp_0_4; + field_0x6ec = tmp_0_4; + field_0x6f0 = tmp_0_4; + mHUDScale = g_drawHIO.mHUDScale; + mHUDAlpha = g_drawHIO.mHUDAlpha; + mButtonsPosX = tmp_0_4; + mButtonsPosY = tmp_0_4; + mButtonsScale = lit_4183; + field_0x78c = g_drawHIO.mButtonDisplayBackScale; + field_0x790 = tmp_0_4; + mLifeGaugeHeartAlpha = g_drawHIO.mLifeGaugeHeartAlpha; + mLifeGaugeBaseAlpha = g_drawHIO.mLifeGaugeBaseAlpha; + mHeartAlpha = g_drawHIO.mHeartAlpha; + mLargeHeartAlpha = g_drawHIO.mLargeHeartAlpha; + field_0x7a4 = tmp_0_4; + mMagicMeterAlpha = g_drawHIO.mMagicMeterAlpha; + mMagicMeterFrameAlpha = g_drawHIO.mMagicMeterFrameAlpha; + field_0x7b0 = tmp_0_4; + mLanternMeterAlpha = g_drawHIO.mLanternMeterAlpha; + mLanternMeterFrameAlpha = g_drawHIO.mLanternMeterFrameAlpha; + field_0x7bc = tmp_0_4; + mOxygenMeterAlpha = g_drawHIO.mOxygenMeterAlpha; + mOxygenMeterFrameAlpha = g_drawHIO.mOxygenMeterFrameAlpha; + field_0x7c8 = tmp_0_4; + field_0x861 = 0; + field_0x860 = 0; + field_0x7cc = g_drawHIO.mHUDAlpha; + field_0x7d0 = g_drawHIO.mRupeeKeyAlpha; + mRupeeAlpha = g_drawHIO.mRupeeAlpha; + mRupeeFrameAlpha = g_drawHIO.mRupeeFrameAlpha; + mRupeeCountAlpha = g_drawHIO.mRupeeCountAlpha; + field_0x7e0 = g_drawHIO.mHUDAlpha; + field_0x7e4 = g_drawHIO.mRupeeKeyAlpha; + mKeyAlpha = g_drawHIO.mKeyAlpha; + mKeyNumAlpha = g_drawHIO.mKeyNumAlpha; + field_0x7f0 = g_drawHIO.mHUDAlpha; + mMainHUDButtonsAlpha = g_drawHIO.mMainHUDButtonsAlpha; + mButtonDisplayBackAlpha = g_drawHIO.mButtonDisplayBackAlpha; + mAButtonAlpha = g_drawHIO.mAButtonAlpha; + mBButtonAlpha = g_drawHIO.mBButtonAlpha; + mXButtonAlpha = g_drawHIO.mXButtonAlpha; + mYButtonAlpha = g_drawHIO.mYButtonAlpha; + field_0x80c = g_drawHIO.field_0x168; + field_0x810 = g_drawHIO.mZButtonAlpha; + + for (int i = 0; i < 2; i++) { + mBItemBaseAlpha[i] = g_drawHIO.mBItemBaseAlpha[i]; + mXButtonItemBaseAlpha[i] = g_drawHIO.mXButtonItemBaseAlpha[i]; + mYButtonItemBaseAlpha[i] = g_drawHIO.mYButtonItemBaseAlpha[i]; + field_0x82c[i] = g_drawHIO.field_0x298[i]; + } + + mZButtonItemBaseAlpha = g_drawHIO.mZButtonItemBaseAlpha; + mButtonBaseAlpha = g_drawHIO.mButtonBaseAlpha; + mAButtonFontSpacing = g_drawHIO.mAButtonFontSpacing; + mDPadButtonAlpha = g_drawHIO.mDPadButtonAlpha; + mDPadButtonITEMAlpha = g_drawHIO.mDPadButtonITEMAlpha; + mDPadButtonMAPAlpha = g_drawHIO.mDPadButtonMAPAlpha; + field_0x84c = g_drawHIO.mAButtonFontColor.r; + field_0x84d = g_drawHIO.mAButtonFontColor.g; + field_0x84e = g_drawHIO.mAButtonFontColor.b; + field_0x84f = g_drawHIO.mAButtonFontColor.a; + field_0x850 = g_drawHIO.mBButtonFontColor.r; + field_0x851 = g_drawHIO.mBButtonFontColor.g; + field_0x852 = g_drawHIO.mBButtonFontColor.b; + field_0x853 = g_drawHIO.mBButtonFontColor.a; + field_0x854 = g_drawHIO.field_0x2f0.r; + field_0x855 = g_drawHIO.field_0x2f0.g; + field_0x856 = g_drawHIO.field_0x2f0.b; + field_0x857 = g_drawHIO.field_0x2f0.a; + field_0x858 = g_drawHIO.mZButtonFontColor.r; + field_0x859 = g_drawHIO.mZButtonFontColor.g; + field_0x85a = g_drawHIO.mZButtonFontColor.b; + field_0x85b = g_drawHIO.mZButtonFontColor.a; + field_0x85c = g_drawHIO.mXYButtonFontColor.r; + field_0x85d = g_drawHIO.mXYButtonFontColor.g; + field_0x85e = g_drawHIO.mXYButtonFontColor.b; + field_0x85f = g_drawHIO.mXYButtonFontColor.a; + + setItemParamX(0); + setItemParamY(0); + setItemParamZ(0); + setItemParamB(0); + initLife(); + initMagic(); + initLightDrop(); + initRupeeKey(); + initButton(); + initButtonCross(); + field_0x772 = 0; } -#pragma pop /* 8021135C-8021151C 20BC9C 01C0+00 0/0 1/1 0/0 .text exec__13dMeter2Draw_cFUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMeter2Draw_c::exec(u32 param_0) { - nofralloc -#include "asm/d/meter/d_meter2_draw/exec__13dMeter2Draw_cFUl.s" +void dMeter2Draw_c::exec(u32 param_0) { + if (mHUDScale != g_drawHIO.mHUDScale) { + mHUDScale = g_drawHIO.mHUDScale; + mpParent->scale(g_drawHIO.mHUDScale, g_drawHIO.mHUDScale); + } + + if (mHUDAlpha != g_drawHIO.mHUDAlpha) { + mHUDAlpha = g_drawHIO.mHUDAlpha; + mpParent->setAlphaRate(g_drawHIO.mHUDAlpha); + } + + if (param_0 & 0x1000000) { + if (mButtonsPosX != g_drawHIO.mRingHUDButtonsPosX || + mButtonsPosY != g_drawHIO.mRingHUDButtonsPosY) { + mButtonsPosX = g_drawHIO.mRingHUDButtonsPosX; + mButtonsPosY = g_drawHIO.mRingHUDButtonsPosY; + mpButtonParent->paneTrans(g_drawHIO.mRingHUDButtonsPosX, g_drawHIO.mRingHUDButtonsPosY); + } + + if (mButtonsScale != g_drawHIO.mRingHUDButtonsScale) { + mButtonsScale = g_drawHIO.mRingHUDButtonsScale; + mpButtonParent->scale(g_drawHIO.mRingHUDButtonsScale, g_drawHIO.mRingHUDButtonsScale); + } + } else { + if (mButtonsPosX != g_drawHIO.mMainHUDButtonsPosX || + mButtonsPosY != g_drawHIO.mMainHUDButtonsPosY) { + mButtonsPosX = g_drawHIO.mMainHUDButtonsPosX; + mButtonsPosY = g_drawHIO.mMainHUDButtonsPosY; + mpButtonParent->paneTrans(g_drawHIO.mMainHUDButtonsPosX, g_drawHIO.mMainHUDButtonsPosY); + } + + if (mButtonsScale != g_drawHIO.mMainHUDButtonsScale) { + mButtonsScale = g_drawHIO.mMainHUDButtonsScale; + mpButtonParent->scale(g_drawHIO.mMainHUDButtonsScale, g_drawHIO.mMainHUDButtonsScale); + } + } } -#pragma pop /* ############################################################################################## */ /* 80454890-80454894 002E90 0004+00 1/1 0/0 0/0 .sdata2 @4921 */ @@ -704,6 +1165,7 @@ SECTION_DEAD static char const* const stringBase_80398A0A = "zelda_game_image_sa #pragma pop /* 80211E64-80212190 20C7A4 032C+00 1/1 0/0 0/0 .text initMagic__13dMeter2Draw_cFv */ +// matches with literals #ifdef NONMATCHING void dMeter2Draw_c::initMagic() { field_0x550 = 0.0f; @@ -714,21 +1176,22 @@ void dMeter2Draw_c::initMagic() { mpMagicFrameL = new CPaneMgr(mpKanteraScreen, 'm_w_l_n', 2, NULL); mpMagicFrameR = new CPaneMgr(mpKanteraScreen, 'm_w_r_n', 2, NULL); mpMagicMeter = new CPaneMgr(mpKanteraScreen, 'mm_00', 0, NULL); + OSInitFastCast(); void* res = JKRFileLoader::getGlbResource("zelda_game_image_sanso_10percent.bpk", dComIfGp_getMain2DArchive()); - field_0x53c = (J2DAnmColorKey*)J2DAnmLoaderDataBase::load(res); - field_0x53c->searchUpdateMaterialID(mpKanteraScreen); + field_0x53c[0] = (J2DAnmColorKey*)J2DAnmLoaderDataBase::load(res); + field_0x53c[0]->searchUpdateMaterialID(mpKanteraScreen); res = JKRFileLoader::getGlbResource("zelda_game_image_sanso_25percent.bpk", dComIfGp_getMain2DArchive()); - field_0x540 = (J2DAnmColorKey*)J2DAnmLoaderDataBase::load(res); - field_0x540->searchUpdateMaterialID(mpKanteraScreen); + field_0x53c[1] = (J2DAnmColorKey*)J2DAnmLoaderDataBase::load(res); + field_0x53c[1]->searchUpdateMaterialID(mpKanteraScreen); res = JKRFileLoader::getGlbResource("zelda_game_image_sanso_50percent.bpk", dComIfGp_getMain2DArchive()); - field_0x544 = (J2DAnmColorKey*)J2DAnmLoaderDataBase::load(res); - field_0x544->searchUpdateMaterialID(mpKanteraScreen); + field_0x53c[2] = (J2DAnmColorKey*)J2DAnmLoaderDataBase::load(res); + field_0x53c[2]->searchUpdateMaterialID(mpKanteraScreen); field_0x558 = 0.0f; mpMagicParent->setAlphaRate(0.0f); @@ -751,10 +1214,9 @@ void dMeter2Draw_c::initMagic() { g_drawHIO.mMagicMeterPosY + offsetY); setAlphaMagicChange(true); - u16 oil = dComIfGs_getOil(); - u16 max_oil = dComIfGs_getMaxOil(); - drawKantera(max_oil, oil, g_drawHIO.mLanternMeterPosX + offsetX, - g_drawHIO.mLanternMeterPosY + (g_drawHIO.mNoMagicPosY + offsetY)); + drawKantera((u16)dComIfGs_getMaxOil(), (u16)dComIfGs_getOil(), + g_drawHIO.mLanternMeterPosX + offsetX, + g_drawHIO.mNoMagicPosY + (g_drawHIO.mLanternMeterPosY + offsetY)); setAlphaKanteraChange(true); } #else @@ -908,35 +1370,28 @@ asm void dMeter2Draw_c::initButtonCross() { #pragma pop /* 80213CEC-80213D6C 20E62C 0080+00 3/3 0/0 0/0 .text playPikariBckAnimation__13dMeter2Draw_cFf */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMeter2Draw_c::playPikariBckAnimation(f32 param_0) { - nofralloc -#include "asm/d/meter/d_meter2_draw/playPikariBckAnimation__13dMeter2Draw_cFf.s" +void dMeter2Draw_c::playPikariBckAnimation(f32 frame) { + mpPikariParent->getPanePtr()->setAnimation(mPikariBck); + mPikariBck->setFrame(frame); + mpPikariParent->getPanePtr()->animationTransform(); + mpPikariParent->getPanePtr()->setAnimation((J2DAnmTransformKey*)NULL); } -#pragma pop /* 80213D6C-80213E3C 20E6AC 00D0+00 1/1 0/0 0/0 .text * setPikariBpkAnimation__13dMeter2Draw_cFP11J2DAnmColor */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMeter2Draw_c::setPikariBpkAnimation(J2DAnmColor* param_0) { - nofralloc -#include "asm/d/meter/d_meter2_draw/setPikariBpkAnimation__13dMeter2Draw_cFP11J2DAnmColor.s" +void dMeter2Draw_c::setPikariBpkAnimation(J2DAnmColor* p_anmcolor) { + mpPikariScreen->search('pika00')->setAnimation(p_anmcolor); + mpPikariScreen->search('moya00')->setAnimation(p_anmcolor); + mpPikariScreen->search('moyabs')->setAnimation(p_anmcolor); } -#pragma pop /* 80213E3C-80213E94 20E77C 0058+00 3/3 0/0 0/0 .text playPikariBpkAnimation__13dMeter2Draw_cFf */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMeter2Draw_c::playPikariBpkAnimation(f32 param_0) { - nofralloc -#include "asm/d/meter/d_meter2_draw/playPikariBpkAnimation__13dMeter2Draw_cFf.s" +void dMeter2Draw_c::playPikariBpkAnimation(f32 frame) { + setPikariBpkAnimation(mPikariBpk); + mPikariBpk->setFrame(frame); + mpPikariScreen->animation(); + setPikariBpkAnimation(NULL); } -#pragma pop /* 80213E94-80213FF0 20E7D4 015C+00 1/1 0/0 0/0 .text * playOxygenBpkAnimation__13dMeter2Draw_cFP11J2DAnmColor */ @@ -1414,14 +1869,12 @@ asm void dMeter2Draw_c::drawButtonC(u8 param_0, bool param_1) { #pragma pop /* 802179C0-80217A10 212300 0050+00 1/1 1/1 0/0 .text drawButtonS__13dMeter2Draw_cFUc */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMeter2Draw_c::drawButtonS(u8 param_0) { - nofralloc -#include "asm/d/meter/d_meter2_draw/drawButtonS__13dMeter2Draw_cFUc.s" +void dMeter2Draw_c::drawButtonS(u8 param_0) { + getActionString(param_0, 1, &field_0x767); + if (param_0 != 0) { + field_0x767 = 7; + } } -#pragma pop /* 80217A10-80217AB4 212350 00A4+00 0/0 1/1 0/0 .text drawButtonBin__13dMeter2Draw_cFUc */ @@ -1671,14 +2124,10 @@ asm void dMeter2Draw_c::setButtonIconAlpha(int param_0, u8 param_1, u32 param_2, /* 8021A29C-8021A2F4 214BDC 0058+00 1/1 0/0 0/0 .text getNumberTexture__13dMeter2Draw_cFi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMeter2Draw_c::getNumberTexture(int param_0) { - nofralloc -#include "asm/d/meter/d_meter2_draw/getNumberTexture__13dMeter2Draw_cFi.s" +ResTIMG* dMeter2Draw_c::getNumberTexture(int i) { + return (ResTIMG*)dComIfGp_getMain2DArchive()->getResource('TIMG', + dMeter2Info_getNumberTextureName(i)); } -#pragma pop /* ############################################################################################## */ /* 80430158-80430178 05CE78 0020+00 1/1 0/0 0/0 .bss i_text_buf$8454 */ @@ -1795,14 +2244,9 @@ asm void dMeter2Draw_c::drawKanteraMeter(u8 param_0, f32 param_1) { /* 8021B0C8-8021B104 215A08 003C+00 0/0 3/3 0/0 .text isButtonVisible__13dMeter2Draw_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMeter2Draw_c::isButtonVisible() { - nofralloc -#include "asm/d/meter/d_meter2_draw/isButtonVisible__13dMeter2Draw_cFv.s" +u8 dMeter2Draw_c::isButtonVisible() { + return (mpButtonParent->getAlphaRate() == FLOAT_LABEL(lit_4182)) ^ 1; } -#pragma pop /* ############################################################################################## */ /* 804548E8-804548EC 002EE8 0004+00 2/2 0/0 0/0 .sdata2 @8992 */ @@ -1986,14 +2430,13 @@ asm void dMeter2Draw_c::setItemParamB(u8 param_0) { /* 8021BB6C-8021BBB4 2164AC 0048+00 1/1 0/0 0/0 .text getFishingType__13dMeter2Draw_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMeter2Draw_c::getFishingType() { - nofralloc -#include "asm/d/meter/d_meter2_draw/getFishingType__13dMeter2Draw_cFv.s" +bool dMeter2Draw_c::getFishingType() { + if (dMeter2Info_isGameStatus(1) && getCanoeFishing()) { + return true; + } else { + return false; + } } -#pragma pop /* ############################################################################################## */ /* 803988D0-803988D0 024F30 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ @@ -2010,14 +2453,14 @@ SECTION_DEAD static char const* const pad_80398A77 = ""; /* 8021BBB4-8021BC24 2164F4 0070+00 2/2 1/1 0/0 .text getCanoeFishing__13dMeter2Draw_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMeter2Draw_c::getCanoeFishing() { - nofralloc -#include "asm/d/meter/d_meter2_draw/getCanoeFishing__13dMeter2Draw_cFv.s" +bool dMeter2Draw_c::getCanoeFishing() { + if (!strcmp(dComIfGp_getStartStageName(), "F_SP127") && + g_dComIfG_gameInfo.play.mPlayer[0]->checkCanoeRide()) { + return TRUE; + } else { + return FALSE; + } } -#pragma pop /* 8021BC24-8021BC54 216564 0030+00 0/0 1/1 0/0 .text getCameraSubject__13dMeter2Draw_cFv */ @@ -2043,14 +2486,9 @@ asm void dMeter2Draw_c::getItemSubject() { /* 8021BCAC-8021BCC0 2165EC 0014+00 0/0 1/1 0/0 .text getPlayerSubject__13dMeter2Draw_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMeter2Draw_c::getPlayerSubject() { - nofralloc -#include "asm/d/meter/d_meter2_draw/getPlayerSubject__13dMeter2Draw_cFv.s" +bool dMeter2Draw_c::getPlayerSubject() { + return dComIfGp_checkPlayerStatus0(0, 0x8000000); } -#pragma pop /* 8021BCC0-8021BDD0 216600 0110+00 2/2 2/2 0/0 .text isBButtonShow__13dMeter2Draw_cFb */ #pragma push @@ -2064,14 +2502,9 @@ asm void dMeter2Draw_c::isBButtonShow(bool param_0) { /* 8021BDD0-8021BDDC 216710 000C+00 0/0 1/1 0/0 .text getButtonTimer__13dMeter2Draw_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMeter2Draw_c::getButtonTimer() { - nofralloc -#include "asm/d/meter/d_meter2_draw/getButtonTimer__13dMeter2Draw_cFv.s" +s16 dMeter2Draw_c::getButtonTimer() { + return mpButtonParent->getAlphaTimer(); } -#pragma pop /* ############################################################################################## */ /* 803988B8-803988D0 024F18 0018+00 0/0 0/0 0/0 .rodata tag$7759 */ diff --git a/src/d/meter/d_meter_HIO.cpp b/src/d/meter/d_meter_HIO.cpp index 1974afaff4..d2a47d6bf0 100644 --- a/src/d/meter/d_meter_HIO.cpp +++ b/src/d/meter/d_meter_HIO.cpp @@ -1011,38 +1011,38 @@ dMeter_drawHIO_c::dMeter_drawHIO_c() { mBItemBasePosY[i] = 0.0f; } - mBItemBaseAlpha = 0.5f; - field_0x23c = 0.5f; + mBItemBaseAlpha[0] = 0.5f; + mBItemBaseAlpha[1] = 0.5f; mXButtonItemBaseScale = 1.5f; mXButtonItemBasePosX = 14.0f; mXButtonItemBasePosY = -12.0f; - mXButtonItemBaseAlpha = 0.5f; + mXButtonItemBaseAlpha[0] = 0.5f; mXButtonItemBaseNoItemScale = 1.5f; mXButtonItemBaseNoItemPosX = 0.0f; mXButtonItemBaseNoItemPosY = 0.0f; - mXButtonItemBaseNoItemAlpha = 1.0f; + mXButtonItemBaseAlpha[1] = 1.0f; mYButtonItemBaseScale = 1.5f; mYButtonItemBasePosX = -15.0f; mYButtonItemBasePosY = -12.0f; - mYButtonItemBaseAlpha = 0.5f; + mYButtonItemBaseAlpha[0] = 0.5f; mYButtonItemBaseNoItemScale = 1.5f; mYButtonItemBaseNoItemPosX = 0.0f; mYButtonItemBaseNoItemPosY = 0.0f; - mYButtonItemBaseNoItemAlpha = 0.5f; + mYButtonItemBaseAlpha[1] = 0.5f; field_0x280 = 1.5f; field_0x288 = 0.0f; field_0x290 = 6.0f; - field_0x298 = 0.5f; + field_0x298[0] = 0.5f; field_0x284 = 1.0f; field_0x28c = 0.0f; field_0x294 = 4.0f; - field_0x29c = 1.0f; + field_0x298[1] = 1.0f; mZButtonItemBaseScale = 1.0f; mZButtonItemBasePosX = 0.0f; diff --git a/src/d/msg/d_msg_object.cpp b/src/d/msg/d_msg_object.cpp index e9603f2726..38978405fb 100644 --- a/src/d/msg/d_msg_object.cpp +++ b/src/d/msg/d_msg_object.cpp @@ -447,7 +447,7 @@ extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; static u8 s_groupID[2 + 6 /* padding */]; /* 80232A3C-80232A44 -00001 0008+00 0/0 0/0 0/0 .text dMsgObject_getGroupID__Fv */ -s32 dMsgObject_getGroupID() { +s16 dMsgObject_getGroupID() { return (s32) * (s16*)(&s_groupID); } @@ -1802,7 +1802,7 @@ asm void dMsgObject_c::setProcessID(unsigned int param_0) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dMsgObject_c::getActor() { +asm fopAc_ac_c* dMsgObject_c::getActor() { nofralloc #include "asm/d/msg/d_msg_object/getActor__12dMsgObject_cFv.s" } diff --git a/src/d/pane/d_pane_class_alpha.cpp b/src/d/pane/d_pane_class_alpha.cpp index 22b96aefae..2680ad9673 100644 --- a/src/d/pane/d_pane_class_alpha.cpp +++ b/src/d/pane/d_pane_class_alpha.cpp @@ -202,7 +202,7 @@ SECTION_SDATA2 static f32 lit_3721[1 + 1 /* padding */] = { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void CPaneMgrAlpha::getAlphaRate() { +asm f32 CPaneMgrAlpha::getAlphaRate() { nofralloc #include "asm/d/pane/d_pane_class_alpha/getAlphaRate__13CPaneMgrAlphaFv.s" } diff --git a/src/d/particle/d_particle.cpp b/src/d/particle/d_particle.cpp index 0dc21219a2..d6917f2064 100644 --- a/src/d/particle/d_particle.cpp +++ b/src/d/particle/d_particle.cpp @@ -1906,11 +1906,11 @@ SECTION_SDATA2 static u32 lit_5199 = 0xFFFFFFFF; #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dPa_control_c::set(u8 param_0, u16 param_1, cXyz const* param_2, - dKy_tevstr_c const* param_3, csXyz const* param_4, cXyz const* param_5, - u8 param_6, dPa_levelEcallBack* param_7, s8 param_8, - _GXColor const* param_9, _GXColor const* param_10, cXyz const* param_11, - f32 param_12) { +asm u32 dPa_control_c::set(u8 param_0, u16 param_1, cXyz const* param_2, + dKy_tevstr_c const* param_3, csXyz const* param_4, cXyz const* param_5, + u8 param_6, dPa_levelEcallBack* param_7, s8 param_8, + _GXColor const* param_9, _GXColor const* param_10, cXyz const* param_11, + f32 param_12) { nofralloc #include "asm/d/particle/d_particle/func_8004CA90.s" } diff --git a/src/m_Do/m_Do_ext.cpp b/src/m_Do/m_Do_ext.cpp index 18c0856a13..dc2924dfa1 100644 --- a/src/m_Do/m_Do_ext.cpp +++ b/src/m_Do/m_Do_ext.cpp @@ -721,7 +721,7 @@ asm void mDoExt_brkAnm::entry(J3DMaterialTable* param_0, f32 param_1) { /* ############################################################################################## */ /* 803A3020-803A30C0 000140 0085+1B 1/1 0/0 0/0 .data l_invisibleMat$7041 */ -SECTION_DATA static u8 l_invisibleMat[133 + 27 /* padding */] = { +SECTION_DATA static u8 l_invisibleMat[133 + 27 /* padding */] ALIGN_DECL(32) = { 0x10, 0x00, 0x00, @@ -2075,7 +2075,8 @@ asm mDoExt_invJntPacket::mDoExt_invJntPacket() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm J3DPacket::~J3DPacket() { +// asm J3DPacket::~J3DPacket() { +extern "C" asm void __dt__9J3DPacketFv() { nofralloc #include "asm/m_Do/m_Do_ext/__dt__9J3DPacketFv.s" } @@ -3172,7 +3173,7 @@ static asm void mDoExt_initFont0() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void mDoExt_getMesgFont() { +asm JUTFont* mDoExt_getMesgFont() { nofralloc #include "asm/m_Do/m_Do_ext/mDoExt_getMesgFont__Fv.s" } @@ -3277,7 +3278,7 @@ asm void mDoExt_removeSubFont() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void mDoExt_J3DModel__create(J3DModelData* param_0, u32 param_1, u32 param_2) { +asm J3DModel* mDoExt_J3DModel__create(J3DModelData* param_0, u32 param_1, u32 param_2) { nofralloc #include "asm/m_Do/m_Do_ext/mDoExt_J3DModel__create__FP12J3DModelDataUlUl.s" } diff --git a/src/m_Do/m_Do_graphic.cpp b/src/m_Do/m_Do_graphic.cpp index e92b25e23a..36d0be5ede 100644 --- a/src/m_Do/m_Do_graphic.cpp +++ b/src/m_Do/m_Do_graphic.cpp @@ -4,93 +4,24 @@ // #include "m_Do/m_Do_graphic.h" +#include "JSystem/JFramework/JFWSystem.h" +#include "SSystem/SComponent/c_lib.h" +#include "d/com/d_com_inf_game.h" #include "dol2asm.h" #include "dolphin/types.h" +#include "f_ap/f_ap_game.h" +#include "m_Do/m_Do_controller_pad.h" +#include "m_Do/m_Do_machine.h" +#include "m_Do/m_Do_mtx.h" // // Types: // -struct view_port_class {}; - -struct view_class {}; - -struct mDoMtx_stack_c { - static u8 now[48]; -}; - -struct mDoMch_render_c { - static void* mRenderModeObj[1 + 1 /* padding */]; -}; - -struct daPy_py_c { - /* 8000B1E4 */ s32 getAtnActorID() const; -}; - -struct JPADrawInfo {}; - -struct dPa_control_c { - /* 8004C134 */ void calcMenu(); - /* 8004C188 */ void draw(JPADrawInfo*, u8); -}; - -struct dMenu_Collect3D_c { - /* 801B75E8 */ void setupItem3D(f32 (*)[4]); -}; - -struct dDlst_shadowControl_c { - /* 800557C8 */ void imageDraw(f32 (*)[4]); - /* 80055A14 */ void draw(f32 (*)[4]); -}; - -struct J3DDrawBuffer {}; - -struct dDlst_base_c {}; - -struct dDlst_list_c { - /* 80056390 */ void init(); - /* 80056538 */ void reset(); - /* 800566D4 */ void drawOpaDrawList(J3DDrawBuffer*); - /* 80056710 */ void drawXluDrawList(J3DDrawBuffer*); - /* 8005674C */ void drawOpaListItem3d(); - /* 80056770 */ void drawXluListItem3d(); - /* 800567C4 */ void draw(dDlst_base_c**, dDlst_base_c**); - /* 80056900 */ void calcWipe(); -}; - -struct dAttention_c { - /* 800737E4 */ void LockonTruth(); -}; - -struct cXyz { - /* 80009184 */ ~cXyz(); - - static f32 Zero[3]; -}; - -struct JUTGamePad { - static u8 mPadStatus[48]; -}; - -struct JUTDbPrint { - static u8 sDebugPrint[4 + 4 /* padding */]; -}; - struct JMath { static u8 sincosTable_[65536]; }; -struct JKRSolidHeap {}; - -struct JFWSystem { - static u8 systemConsole[4]; -}; - -struct J3DSys { - /* 803100BC */ void drawInit(); - /* 8031073C */ void reinitGX(); -}; - struct J2DPrint { /* 802F4658 */ void setBuffer(u32); }; @@ -210,23 +141,16 @@ extern "C" void _restgpr_21(); extern "C" void _restgpr_24(); extern "C" void _restgpr_27(); extern "C" void _restgpr_28(); -extern "C" void strcmp(); -extern "C" extern u8 g_mDoMtx_identity[48 + 24 /* padding */]; extern "C" extern void* __vt__14J2DGrafContext[10]; extern "C" extern void* __vt__13J2DOrthoGraph[10]; extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" extern u8 g_HIO[64 + 4 /* padding */]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; extern "C" extern u8 g_env_light[4880]; extern "C" f32 Zero__4cXyz[3]; extern "C" u8 mPadStatus__10JUTGamePad[48]; -extern "C" extern u8 j3dSys[284]; extern "C" u8 sincosTable___5JMath[65536]; -extern "C" extern u32 data_80450580; +extern "C" extern s8 data_80450580; extern "C" void* mRenderModeObj__15mDoMch_render_c[1 + 1 /* padding */]; -extern "C" extern u8 g_clearColor[4]; -extern "C" extern u32 g_whiteColor; -extern "C" extern u32 __float_nan; +; extern "C" u8 systemConsole__9JFWSystem[4]; extern "C" u8 sManager__10JFWDisplay[4]; extern "C" u8 sCurrentHeap__7JKRHeap[4]; @@ -240,47 +164,60 @@ extern "C" u8 sManager__10JUTProcBar[4]; // /* 80007D9C-80007E44 0026DC 00A8+00 1/1 0/0 0/0 .text createTimg__FUsUsUl */ +// extra mr optimized out? +#ifdef NONMATCHING +static ResTIMG* createTimg(u16 width, u16 height, u32 format) { + u32 buf_size = GXGetTexBufferSize(width, height, format, GX_FALSE, 0) + 0x20; + ResTIMG* timg = (ResTIMG*)JKRHeap::alloc(buf_size, 0x20, NULL); + + if (timg == NULL) { + return NULL; + } else { + cLib_memSet(timg, 0, buf_size); + timg->format = format; + timg->alphaEnabled = false; + timg->width = width; + timg->height = height; + timg->minFilter = GX_LINEAR; + timg->magFilter = GX_LINEAR; + timg->mipmapCount = 1; + timg->texDataOffset = 0x20; + } + return timg; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void createTimg(u16 param_0, u16 param_1, u32 param_2) { +static asm ResTIMG* createTimg(u16 param_0, u16 param_1, u32 param_2) { nofralloc #include "asm/m_Do/m_Do_graphic/createTimg__FUsUsUl.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80450590-80450594 000010 0004+00 2/2 1/1 0/0 .sdata mBackColor__13mDoGph_gInf_c */ -SECTION_SDATA u8 mDoGph_gInf_c::mBackColor[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; +GXColor mDoGph_gInf_c::mBackColor = {0, 0, 0, 0}; /* 80450594-80450598 000014 0004+00 4/4 3/3 0/0 .sdata mFadeColor__13mDoGph_gInf_c */ -SECTION_SDATA u8 mDoGph_gInf_c::mFadeColor[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; +GXColor mDoGph_gInf_c::mFadeColor = {0, 0, 0, 0}; /* 80450BC8-80450BCC 0000C8 0004+00 2/2 38/38 1/1 .sbss mFader__13mDoGph_gInf_c */ JUTFader* mDoGph_gInf_c::mFader; /* 80450BCC-80450BD0 0000CC 0004+00 3/3 8/8 1/1 .sbss mFrameBufferTimg__13mDoGph_gInf_c */ -u8 mDoGph_gInf_c::mFrameBufferTimg[4]; +ResTIMG* mDoGph_gInf_c::mFrameBufferTimg; /* 80450BD0-80450BD4 0000D0 0004+00 3/3 6/6 0/0 .sbss mFrameBufferTex__13mDoGph_gInf_c */ -u8 mDoGph_gInf_c::mFrameBufferTex[4]; +void* mDoGph_gInf_c::mFrameBufferTex; /* 80450BD4-80450BD8 0000D4 0004+00 1/1 1/1 0/0 .sbss mZbufferTimg__13mDoGph_gInf_c */ -u8 mDoGph_gInf_c::mZbufferTimg[4]; +ResTIMG* mDoGph_gInf_c::mZbufferTimg; /* 80450BD8-80450BDC 0000D8 0004+00 3/3 1/1 0/0 .sbss mZbufferTex__13mDoGph_gInf_c */ -u8 mDoGph_gInf_c::mZbufferTex[4]; +void* mDoGph_gInf_c::mZbufferTex; /* 80450BDC-80450BE0 0000DC 0004+00 3/3 3/3 1/1 .sbss mFadeRate__13mDoGph_gInf_c */ f32 mDoGph_gInf_c::mFadeRate; @@ -293,8 +230,17 @@ f32 mDoGph_gInf_c::mFadeSpeed; /* 80450BE5 0001+00 data_80450BE5 None */ /* 80450BE6 0001+00 data_80450BE6 None */ /* 80450BE7 0001+00 data_80450BE7 None */ -extern u8 struct_80450BE4[4]; -u8 struct_80450BE4[4]; +extern u8 struct_80450BE4; +u8 struct_80450BE4; + +#pragma push +#pragma force_active on +static bool data_80450BE5; + +static u8 data_80450BE6; + +static bool data_80450BE7; +#pragma pop /* 80007E44-80007F90 002784 014C+00 1/1 0/0 0/0 .text create__13mDoGph_gInf_cFv */ #pragma push @@ -308,17 +254,15 @@ asm void mDoGph_gInf_c::create() { /* ############################################################################################## */ /* 80450BE8-80450BF0 0000E8 0008+00 1/1 0/0 0/0 .sbss None */ -static u8 data_80450BE8[8]; +static bool data_80450BE8; /* 80007F90-80007FD8 0028D0 0048+00 1/1 2/2 0/0 .text beginRender__13mDoGph_gInf_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoGph_gInf_c::beginRender() { - nofralloc -#include "asm/m_Do/m_Do_graphic/beginRender__13mDoGph_gInf_cFv.s" +void mDoGph_gInf_c::beginRender() { + if (data_80450BE8) { + JUTXfb::getManager()->setDrawingXfbIndex(-1); + } + JFWDisplay::getManager()->beginRender(); } -#pragma pop /* ############################################################################################## */ /* 80451A38-80451A3C 000038 0004+00 11/11 0/0 0/0 .sdata2 @4062 */ @@ -333,74 +277,110 @@ SECTION_SDATA2 static u8 lit_4062[4] = { SECTION_SDATA2 static f32 lit_4063 = 1.0f; /* 80007FD8-80008028 002918 0050+00 1/1 6/4 15/15 .text fadeOut__13mDoGph_gInf_cFfR8_GXColor */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoGph_gInf_c::fadeOut(f32 param_0, _GXColor& param_1) { - nofralloc -#include "asm/m_Do/m_Do_graphic/fadeOut__13mDoGph_gInf_cFfR8_GXColor.s" +void mDoGph_gInf_c::fadeOut(f32 fadeSpeed, GXColor& fadeColor) { + data_80450BE6 = 1; + mFadeSpeed = fadeSpeed; + mFadeColor = fadeColor; + + f32 tmp_0 = FLOAT_LABEL(lit_4062); + if (fadeSpeed >= tmp_0) { + mFadeRate = tmp_0; + } else { + mFadeRate = lit_4063; + } } -#pragma pop /* 80008028-80008078 002968 0050+00 0/0 0/0 2/2 .text fadeOut_f__13mDoGph_gInf_cFfR8_GXColor */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoGph_gInf_c::fadeOut_f(f32 param_0, _GXColor& param_1) { - nofralloc -#include "asm/m_Do/m_Do_graphic/fadeOut_f__13mDoGph_gInf_cFfR8_GXColor.s" +void mDoGph_gInf_c::fadeOut_f(f32 fadeSpeed, GXColor& fadeColor) { + data_80450BE6 = 129; + mFadeSpeed = fadeSpeed; + mFadeColor = fadeColor; + + f32 tmp_0 = FLOAT_LABEL(lit_4062); + if (fadeSpeed >= tmp_0) { + mFadeRate = tmp_0; + } else { + mFadeRate = lit_4063; + } } -#pragma pop /* 80008078-800080A0 0029B8 0028+00 0/0 1/1 8/8 .text onBlure__13mDoGph_gInf_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoGph_gInf_c::onBlure() { - nofralloc -#include "asm/m_Do/m_Do_graphic/onBlure__13mDoGph_gInf_cFv.s" +void mDoGph_gInf_c::onBlure() { + onBlure(g_mDoMtx_identity); } -#pragma pop /* ############################################################################################## */ /* 803DD3E8-803DD408 00A108 0020+00 3/3 3/3 0/0 .bss mFrameBufferTexObj__13mDoGph_gInf_c */ -u8 mDoGph_gInf_c::mFrameBufferTexObj[32]; +GXTexObj mDoGph_gInf_c::mFrameBufferTexObj; /* 803DD408-803DD428 00A128 0020+00 1/1 0/0 0/0 .bss mZbufferTexObj__13mDoGph_gInf_c */ -u8 mDoGph_gInf_c::mZbufferTexObj[32]; +GXTexObj mDoGph_gInf_c::mZbufferTexObj; /* 803DD428-803DD43C 00A148 0014+00 2/2 3/3 0/0 .bss m_bloom__13mDoGph_gInf_c */ -u8 mDoGph_gInf_c::m_bloom[20]; +mDoGph_gInf_c::bloom_c mDoGph_gInf_c::m_bloom; /* 803DD43C-803DD470 00A15C 0030+04 2/2 0/0 0/0 .bss mBlureMtx__13mDoGph_gInf_c */ -u8 mDoGph_gInf_c::mBlureMtx[48 + 4 /* padding */]; +Mtx mDoGph_gInf_c::mBlureMtx; /* 800080A0-800080D0 0029E0 0030+00 1/1 1/1 0/0 .text onBlure__13mDoGph_gInf_cFPA4_Cf */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoGph_gInf_c::onBlure(f32 const (*param_0)[4]) { - nofralloc -#include "asm/m_Do/m_Do_graphic/onBlure__13mDoGph_gInf_cFPA4_Cf.s" +void mDoGph_gInf_c::onBlure(const Mtx m) { + struct_80450BE4 = 1; + PSMTXCopy(m, mBlureMtx); } -#pragma pop /* 800080D0-800080F4 002A10 0024+00 0/0 3/3 7/7 .text fadeOut__13mDoGph_gInf_cFf */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoGph_gInf_c::fadeOut(f32 param_0) { - nofralloc -#include "asm/m_Do/m_Do_graphic/fadeOut__13mDoGph_gInf_cFf.s" +void mDoGph_gInf_c::fadeOut(f32 fadeSpeed) { + fadeOut(fadeSpeed, g_clearColor); } -#pragma pop /* ############################################################################################## */ /* 80451A40-80451A44 000040 0004+00 5/5 0/0 0/0 .sdata2 @4105 */ SECTION_SDATA2 static f32 lit_4105 = 10.0f; /* 800080F4-80008330 002A34 023C+00 1/1 0/0 0/0 .text darwFilter__F8_GXColor */ +// matches with literals +#ifdef NONMATCHING +static void darwFilter(GXColor matColor) { + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_NONE, + GX_AF_NONE); + GXSetNumTexGens(0); + GXSetNumTevStages(1); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_RASC); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_RASA); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + GXSetZCompLoc(GX_ENABLE); + GXSetZMode(GX_DISABLE, GX_ALWAYS, GX_DISABLE); + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_OR); + GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); + f32 tmp_0 = FLOAT_LABEL(lit_4062); + GXSetFog(GX_FOG_NONE, tmp_0, tmp_0, tmp_0, tmp_0, g_clearColor); + GXSetFogRangeAdj(GX_DISABLE, 0, NULL); + GXSetCullMode(GX_CULL_NONE); + GXSetDither(GX_ENABLE); + GXSetNumIndStages(0); + + Mtx44 mtx; + f32 tmp_0_2 = FLOAT_LABEL(lit_4062); + C_MTXOrtho(mtx, tmp_0_2, lit_4063, tmp_0_2, lit_4063, tmp_0_2, lit_4105); + GXSetProjection(mtx, GX_ORTHOGRAPHIC); + GXLoadPosMtxImm(g_mDoMtx_identity, GX_PNMTX0); + GXSetChanMatColor(GX_COLOR0A0, matColor); + GXSetCurrentMtx(0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_RGB8, 0); + GXBegin(GX_QUADS, GX_VTXFMT0, 4); + GXPosition3s8(0, 0, -5); + GXPosition3s8(1, 0, -5); + GXPosition3s8(1, 1, -5); + GXPosition3s8(0, 1, -5); + GXEnd(); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -409,12 +389,44 @@ static asm void darwFilter(_GXColor param_0) { #include "asm/m_Do/m_Do_graphic/darwFilter__F8_GXColor.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80451A44-80451A48 000044 0004+00 1/1 0/0 0/0 .sdata2 @4131 */ SECTION_SDATA2 static f32 lit_4131 = 255.0f; /* 80008330-8000841C 002C70 00EC+00 1/1 0/0 0/0 .text calcFade__13mDoGph_gInf_cFv */ +// li instead of addi +#ifdef NONMATCHING +void mDoGph_gInf_c::calcFade() { + if (data_80450BE6) { + mFadeRate += mFadeSpeed; + + if (mFadeRate < 0.0f) { + mFadeRate = 0.0f; + data_80450BE6 = false; + } else { + if (mFadeRate > 1.0f) { + mFadeRate = 1.0f; + } + } + mFadeColor.a = lit_4131 * mFadeRate; + } else { + if (dComIfG_getBrightness() != 255) { + mFadeColor.r = 0; + mFadeColor.g = 0; + mFadeColor.b = 0; + mFadeColor.a = 255 - dComIfG_getBrightness(); + } else { + mFadeColor.a = 0; + } + } + + if (mFadeColor.a != 0) { + darwFilter(mFadeColor); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -423,6 +435,7 @@ asm void mDoGph_gInf_c::calcFade() { #include "asm/m_Do/m_Do_graphic/calcFade__13mDoGph_gInf_cFv.s" } #pragma pop +#endif /* 8000841C-80008420 002D5C 0004+00 0/0 1/0 0/0 .text mDoGph_BlankingON__Fv */ void mDoGph_BlankingON() { @@ -435,26 +448,58 @@ void mDoGph_BlankingOFF() { } /* 80008424-80008450 002D64 002C+00 1/1 0/0 0/0 .text dScnPly_BeforeOfPaint__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dScnPly_BeforeOfPaint() { - nofralloc -#include "asm/m_Do/m_Do_graphic/dScnPly_BeforeOfPaint__Fv.s" +static void dScnPly_BeforeOfPaint() { + dComIfGd_reset(); } -#pragma pop /* 80008450-80008474 002D90 0024+00 0/0 1/0 0/0 .text mDoGph_BeforeOfDraw__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoGph_BeforeOfDraw() { - nofralloc -#include "asm/m_Do/m_Do_graphic/mDoGph_BeforeOfDraw__Fv.s" +int mDoGph_BeforeOfDraw() { + dScnPly_BeforeOfPaint(); + return 1; } -#pragma pop /* 80008474-80008630 002DB4 01BC+00 0/0 1/0 0/0 .text mDoGph_AfterOfDraw__Fv */ +// r6 / r7 swapped +#ifdef NONMATCHING +int mDoGph_AfterOfDraw() { + if (fapGmHIO_isMenu()) { + JUTProcBar::getManager()->setVisible(false); + JUTProcBar::getManager()->setVisibleHeapBar(false); + JUTDbPrint::getManager()->setVisible(true); + } else { + int sysConsole_visible = JFWSystem::getSystemConsole()->isVisible(); + int port3_connected = mDoCPd_c::isConnect(mDoCPd_c::PAD_2); + + BOOL procBar_visible = port3_connected && fapGmHIO_getMeter() && !sysConsole_visible; + BOOL console_visible = port3_connected && fapGmHIO_isPrint(); + + // Dev mode check + if (!data_80450580) { + procBar_visible = false; + console_visible = false; + } + + JUTProcBar::getManager()->setVisible(procBar_visible); + JUTProcBar::getManager()->setVisibleHeapBar(procBar_visible); + JUTDbPrint::getManager()->setVisible(console_visible); + } + + GXSetZCompLoc(GX_ENABLE); + GXSetZMode(GX_DISABLE, GX_ALWAYS, GX_DISABLE); + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_CLEAR); + GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0); + GXSetFog(GX_FOG_NONE, 0.0f, 0.0f, 0.0f, 0.0f, g_clearColor); + GXSetFogRangeAdj(GX_DISABLE, 0, NULL); + GXSetCoPlanar(GX_DISABLE); + GXSetZTexture(GX_ZT_DISABLE, GX_TF_Z8, 0); + GXSetDither(GX_ENABLE); + GXSetClipMode(GX_DISABLE); + GXSetCullMode(GX_CULL_NONE); + JUTVideo::getManager()->setRenderMode(mDoMch_render_c::getRenderModeObj()); + mDoGph_gInf_c::endFrame(); + return 1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -463,6 +508,7 @@ asm void mDoGph_AfterOfDraw() { #include "asm/m_Do/m_Do_graphic/mDoGph_AfterOfDraw__Fv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80450598-8045059C 000018 0004+00 1/1 0/0 0/0 .sdata l_tevColor0$4208 */ @@ -561,7 +607,8 @@ static asm void drawDepth2(view_class* param_0, view_port_class* param_1, int pa #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm cXyz::~cXyz() { +// asm cXyz::~cXyz() { +extern "C" asm void __dt__4cXyzFv() { nofralloc #include "asm/m_Do/m_Do_graphic/__dt__4cXyzFv.s" } @@ -586,40 +633,43 @@ static asm void trimming(view_class* param_0, view_port_class* param_1) { #pragma pop /* 800094B4-80009544 003DF4 0090+00 2/2 1/1 0/0 .text mDoGph_drawFilterQuad__FScSc */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoGph_drawFilterQuad(s8 param_0, s8 param_1) { - nofralloc -#include "asm/m_Do/m_Do_graphic/mDoGph_drawFilterQuad__FScSc.s" +void mDoGph_drawFilterQuad(s8 param_0, s8 param_1) { + GXBegin(GX_QUADS, GX_VTXFMT0, 4); + GXPosition2s8(0, 0); + GXTexCoord2s8(0, 0); + GXPosition2s8(param_0, 0); + GXTexCoord2s8(1, 0); + GXPosition2s8(param_0, param_1); + GXTexCoord2s8(1, 1); + GXPosition2s8(0, param_1); + GXTexCoord2s8(0, 1); + GXEnd(); } -#pragma pop - -/* ############################################################################################## */ -/* 80451AB0-80451AB4 0000B0 0004+00 1/1 0/0 0/0 .sdata2 @4505 */ -SECTION_SDATA2 static u32 lit_4505 = 0xFFFFFFFF; /* 80009544-800095F8 003E84 00B4+00 0/0 1/1 0/0 .text create__Q213mDoGph_gInf_c7bloom_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoGph_gInf_c::bloom_c::create() { - nofralloc -#include "asm/m_Do/m_Do_graphic/create__Q213mDoGph_gInf_c7bloom_cFv.s" +void mDoGph_gInf_c::bloom_c::create() { + if (m_buffer == NULL) { + u32 size = GXGetTexBufferSize(304, 224, 6, GX_FALSE, 0); + m_buffer = mDoExt_getArchiveHeap()->alloc(size, -32); + mEnable = false; + mMode = 0; + mPoint = 128; + mBlureSize = 64; + mBlureRatio = 128; + mBlendColor = (GXColor){255, 255, 255, 255}; + } } -#pragma pop /* 800095F8-80009650 003F38 0058+00 0/0 1/1 0/0 .text remove__Q213mDoGph_gInf_c7bloom_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoGph_gInf_c::bloom_c::remove() { - nofralloc -#include "asm/m_Do/m_Do_graphic/remove__Q213mDoGph_gInf_c7bloom_cFv.s" +void mDoGph_gInf_c::bloom_c::remove() { + if (m_buffer != NULL) { + mDoExt_getArchiveHeap()->free(m_buffer); + m_buffer = NULL; + } + mMonoColor.a = 0; } -#pragma pop /* ############################################################################################## */ /* 80451AB4-80451AB8 0000B4 0004+00 1/1 0/0 0/0 .sdata2 @4528 */ @@ -689,6 +739,19 @@ SECTION_SDATA2 static f32 lit_4641 = -35000.0f; SECTION_SDATA2 static f32 lit_4642 = -30000.0f; /* 8000A504-8000A58C 004E44 0088+00 1/1 0/0 0/0 .text setLight__Fv */ +// matches with literals +#ifdef NONMATCHING +static void setLight() { + GXLightObj obj; + + GXInitLightPos(&obj, -35000.0f, 0.0f, -30000.0f); + GXInitLightDir(&obj, 0.0f, 0.0f, 0.0f); + GXInitLightColor(&obj, g_whiteColor); + GXInitLightDistAttn(&obj, 0.0f, 0.0f, GX_DA_GENTLE); + GXInitLightSpot(&obj, 0.0f, GX_SP_FLAT); + GXLoadLightObjImm(&obj, GX_LIGHT0); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -697,16 +760,19 @@ static asm void setLight() { #include "asm/m_Do/m_Do_graphic/setLight__Fv.s" } #pragma pop +#endif /* 8000A58C-8000A604 004ECC 0078+00 1/1 0/0 0/0 .text drawItem3D__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void drawItem3D() { - nofralloc -#include "asm/m_Do/m_Do_graphic/drawItem3D__Fv.s" +static void drawItem3D() { + Mtx item_mtx; + dMenu_Collect3D_c::setupItem3D(item_mtx); + setLight(); + j3dSys.setViewMtx(item_mtx); + GXSetClipMode(GX_ENABLE); + dComIfGd_drawListItem3d(); + GXSetClipMode(GX_DISABLE); + j3dSys.reinitGX(); } -#pragma pop /* ############################################################################################## */ /* 80373DD0-80373DD0 000430 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ @@ -771,14 +837,14 @@ asm J2DOrthoGraph::~J2DOrthoGraph() { #pragma pop /* 8000B174-8000B1D0 005AB4 005C+00 0/0 2/1 0/0 .text mDoGph_Create__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoGph_Create() { - nofralloc -#include "asm/m_Do/m_Do_graphic/mDoGph_Create__Fv.s" +int mDoGph_Create() { + JKRSolidHeap* heap = mDoExt_createSolidHeapToCurrent(0, NULL, 0); + mDoGph_gInf_c::create(); + dComIfGd_init(); + mDoExt_adjustSolidHeap(heap); + mDoExt_restoreCurrentHeap(); + return 1; } -#pragma pop /* 8000B1D0-8000B1E4 005B10 0014+00 0/0 1/0 0/0 .text __sinit_m_Do_graphic_cpp */ #pragma push diff --git a/src/m_Do/m_Do_machine.cpp b/src/m_Do/m_Do_machine.cpp index aea800a5a2..e3bb00cece 100644 --- a/src/m_Do/m_Do_machine.cpp +++ b/src/m_Do/m_Do_machine.cpp @@ -18,10 +18,6 @@ struct mDoMemCd_Ctrl_c { /* 80016730 */ void ThdInit(); }; -struct mDoMch_render_c { - static _GXRenderModeObj* mRenderModeObj; -}; - struct mDoDvdThd { /* 80015858 */ void create(s32); }; diff --git a/src/m_Do/m_Do_mtx.cpp b/src/m_Do/m_Do_mtx.cpp index 9075b8eebf..57fd2f3922 100644 --- a/src/m_Do/m_Do_mtx.cpp +++ b/src/m_Do/m_Do_mtx.cpp @@ -51,7 +51,6 @@ extern "C" void quatM__14mDoMtx_stack_cFPC10Quaternion(); extern "C" void __sinit_m_Do_mtx_cpp(); extern "C" void __dt__18mDoMtx_quatStack_cFv(); extern "C" void __dt__14mDoMtx_stack_cFv(); -extern "C" extern u8 g_mDoMtx_identity[48 + 24 /* padding */]; extern "C" u8 now__14mDoMtx_stack_c[48]; extern "C" u8 buffer__14mDoMtx_stack_c[768]; extern "C" void* next__14mDoMtx_stack_c; @@ -462,84 +461,8 @@ asm mDoMtx_stack_c::~mDoMtx_stack_c() { /* ############################################################################################## */ /* 803A2FD8-803A3020 0000F8 0030+18 0/0 23/23 4/4 .data g_mDoMtx_identity */ -SECTION_DATA extern u8 g_mDoMtx_identity[48 + 24 /* padding */] = { - 0x3F, - 0x80, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x3F, - 0x80, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x3F, - 0x80, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - /* padding */ - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, -}; - -/* SECTION_DATA extern Mtx g_mDoMtx_identity = { +SECTION_DATA extern Mtx g_mDoMtx_identity = { {1.0f, 0.0f, 0.0f, 0.0f}, {0.0f, 1.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 1.0f, 0.0f}, -}; */ +}; |
