From 540217c31b88246d5c3abd57bb3fbd97cff6d31c Mon Sep 17 00:00:00 2001 From: TakaRikka <38417346+TakaRikka@users.noreply.github.com> Date: Mon, 17 Nov 2025 10:01:03 -0800 Subject: [PATCH] wii building OK / m_Do_graphic debug work (#2815) * wii building OK + m_Do_graphic debug work * d_meter_HIO debug cleanup * wii m_Do_graphic stuff * tag_attack_item OK, mirror_chain almost * fix build * mg_fshop matching --- config/RZDE01_00/splits.txt | 4 +- configure.py | 40 +- include/CaptureScreen.h | 21 + include/JSystem/JFramework/JFWDisplay.h | 4 + include/JSystem/JKernel/JKRExpHeap.h | 2 +- include/JSystem/JKernel/JKRFileCache.h | 4 + include/JSystem/JKernel/JKRHeap.h | 2 +- include/JSystem/JParticle/JPADrawInfo.h | 6 +- include/JSystem/JUtility/JUTGamePad.h | 5 +- include/SSystem/SComponent/c_lib.h | 13 + include/d/actor/d_a_mg_fshop.h | 5 +- include/d/actor/d_a_obj_mirror_chain.h | 2 +- include/d/actor/d_a_tag_attack_item.h | 30 + include/d/d_camera.h | 3 +- include/d/d_com_inf_game.h | 10 +- include/d/d_cursor_mng.h | 9 + include/d/d_meter2_info.h | 5 + include/d/d_meter_HIO.h | 104 +- include/d/d_particle.h | 7 + include/d/d_procname.h | 2 + include/f_ap/f_ap_game.h | 33 +- include/m_Do/m_Do_controller_pad.h | 2 +- include/m_Do/m_Do_ext2.h | 4 +- include/m_Do/m_Do_graphic.h | 154 +- include/m_Do/m_Do_mtx.h | 2 +- include/revolution/vi/vifuncs.h | 4 + src/CaptureScreen.cpp | 30 + src/JSystem/JKernel/JKRExpHeap.cpp | 4 +- .../MSL/MSL_C/MSL_Common/Include/math.h | 2 +- src/c/c_dylink.cpp | 205 ++- src/d/actor/d_a_alink_kandelaar.inc | 2 +- src/d/actor/d_a_balloon_2D.cpp | 2 +- src/d/actor/d_a_e_fk.cpp | 2 +- src/d/actor/d_a_e_fs.cpp | 2 +- src/d/actor/d_a_e_sm.cpp | 2 +- src/d/actor/d_a_mg_fshop.cpp | 1624 ++++++++-------- src/d/actor/d_a_mirror.cpp | 8 +- src/d/actor/d_a_movie_player.cpp | 4 +- src/d/actor/d_a_npc.cpp | 2 +- src/d/actor/d_a_npc_henna.cpp | 4 +- src/d/actor/d_a_obj_ari.cpp | 2 +- src/d/actor/d_a_obj_cho.cpp | 2 +- src/d/actor/d_a_obj_crvfence.cpp | 6 +- src/d/actor/d_a_obj_crvhahen.cpp | 2 +- src/d/actor/d_a_obj_dan.cpp | 2 +- src/d/actor/d_a_obj_gomikabe.cpp | 2 +- src/d/actor/d_a_obj_groundwater.cpp | 2 + src/d/actor/d_a_obj_hhashi.cpp | 2 +- src/d/actor/d_a_obj_kabuto.cpp | 2 +- src/d/actor/d_a_obj_kamakiri.cpp | 8 +- src/d/actor/d_a_obj_katatsumuri.cpp | 6 +- src/d/actor/d_a_obj_kuwagata.cpp | 4 +- src/d/actor/d_a_obj_lv3Water2.cpp | 2 +- src/d/actor/d_a_obj_mhole.cpp | 2 + src/d/actor/d_a_obj_mirror_chain.cpp | 463 ++--- src/d/actor/d_a_obj_octhashi.cpp | 4 +- src/d/actor/d_a_obj_rstair.cpp | 2 + src/d/actor/d_a_obj_ten.cpp | 4 +- src/d/actor/d_a_obj_thashi.cpp | 4 +- src/d/actor/d_a_obj_tombo.cpp | 4 +- src/d/actor/d_a_obj_tp.cpp | 2 + src/d/actor/d_a_obj_zra_freeze.cpp | 2 +- src/d/actor/d_a_tag_attack_item.cpp | 290 +-- src/d/actor/d_a_title.cpp | 2 +- src/d/d_camera.cpp | 10 +- src/d/d_com_inf_game.cpp | 6 +- src/d/d_cursor_mng.cpp | 4 + src/d/d_debug_camera.cpp | 2 +- src/d/d_error_msg.cpp | 42 +- src/d/d_file_select.cpp | 2 +- src/d/d_gameover.cpp | 12 +- src/d/d_home_button.cpp | 8 +- src/d/d_insect.cpp | 4 +- src/d/d_kankyo.cpp | 2 +- src/d/d_kankyo_debug.cpp | 6 +- src/d/d_kankyo_rain.cpp | 23 +- src/d/d_menu_collect.cpp | 2 +- src/d/d_menu_dmap.cpp | 6 +- src/d/d_menu_fishing.cpp | 2 +- src/d/d_menu_fmap.cpp | 4 +- src/d/d_menu_fmap2D.cpp | 8 +- src/d/d_menu_insect.cpp | 4 +- src/d/d_menu_item_explain.cpp | 2 +- src/d/d_menu_letter.cpp | 4 +- src/d/d_menu_option.cpp | 4 +- src/d/d_menu_skill.cpp | 4 +- src/d/d_menu_window.cpp | 6 +- src/d/d_meter_HIO.cpp | 650 +++++-- src/d/d_msg_object.cpp | 4 +- src/d/d_msg_scrn_howl.cpp | 18 +- src/d/d_msg_scrn_item.cpp | 10 +- src/d/d_ovlp_fade2.cpp | 8 +- src/d/d_ovlp_fade3.cpp | 12 +- src/d/d_pane_class.cpp | 2 +- src/d/d_s_logo.cpp | 20 +- src/d/d_s_play.cpp | 15 +- src/m_Do/m_Do_graphic.cpp | 1637 +++++++++++++---- src/m_Do/m_Do_lib.cpp | 9 +- src/m_Do/m_Do_machine.cpp | 58 +- 99 files changed, 3837 insertions(+), 1964 deletions(-) create mode 100644 include/CaptureScreen.h create mode 100644 include/d/d_cursor_mng.h create mode 100644 src/CaptureScreen.cpp create mode 100644 src/d/d_cursor_mng.cpp diff --git a/config/RZDE01_00/splits.txt b/config/RZDE01_00/splits.txt index 8c897e30ad..6eb2b35b4e 100644 --- a/config/RZDE01_00/splits.txt +++ b/config/RZDE01_00/splits.txt @@ -134,7 +134,7 @@ m_Do/m_Do_machine_exception.cpp: c/c_damagereaction.cpp: .text start:0x8001DD0C end:0x8001DFE4 .ctors start:0x803CE25C end:0x803CE260 - .data start:0x803F7238 end:0x803F9CF0 + .data start:0x803F7238 end:0x803F7288 .bss start:0x8047D480 end:0x8047D490 .sdata start:0x805377B8 end:0x80537808 .sbss start:0x8053A8F4 end:0x8053A8FC @@ -143,7 +143,7 @@ c/c_damagereaction.cpp: c/c_dylink.cpp: .text start:0x8001DFE4 end:0x8001E4D4 .rodata start:0x803CE450 end:0x803CFC00 - .data start:0x803F9CF0 end:0x803F9D00 + .data start:0x803F7288 end:0x803F9D00 .bss start:0x8047D490 end:0x8047E0E8 .sbss start:0x8053A8FC end:0x8053A908 diff --git a/configure.py b/configure.py index 5ad52dad9a..00aa9b1eff 100755 --- a/configure.py +++ b/configure.py @@ -258,9 +258,9 @@ cflags_base = [ ] if config.version == "ShieldD": - cflags_base.extend(["-O0", "-inline off", "-RTTI on", "-str reuse", "-enc SJIS", "-DDEBUG=1"]) + cflags_base.extend(["-O0", "-inline off", "-RTTI on", "-str reuse", "-enc SJIS", "-DDEBUG=1", "-DWIDESCREEN_SUPPORT=1"]) elif config.version == "RZDE01_00" or config.version == "RZDE01_02" or config.version == "Shield": - cflags_base.extend(["-O4,p", "-inline auto", "-ipa file", "-RTTI on", "-str reuse", "-enc SJIS"]) + cflags_base.extend(["-O4,p", "-inline auto", "-ipa file", "-RTTI on", "-str reuse", "-enc SJIS", "-DWIDESCREEN_SUPPORT=1"]) else: cflags_base.extend(["-O4,p", "-inline auto", "-RTTI off", "-str reuse", "-multibyte"]) @@ -396,15 +396,11 @@ def MWVersion(cfg_version: str | None) -> str: case "GZ2J01": return "GC/2.7" case "RZDE01_00" | "RZDE01_02": - # TODO: Find right compiler for Wii - # GC/3.0a3 codegen seems better than Wii compilers, but it fails linking (linker version?) and can't handle multi-char constants - # Potentially missing an early Wii compiler that had the earlier codegen and reverted char constant change? - # Or some specific compiler used in the early days of transitioning GC to Wii development - # Additionally, "-ipa file" seems to needed, so it can't be earlier than GC 3.0 - # GC/3.0a5.2 breaks when compiling TUs like m_Do_graphic, but none of the other 3.0+ ones do - # Wii/1.0RC1 is the earliest Wii one we have at this time but it doesn't have the right codegen from GC/3.0+ - # (GC 3.0a3 - Dec 2005 | GC 3.0a5.2 - Aug 2006 | Wii 1.0RC - May 2008) - return "Wii/1.0RC1" + # NOTE: we use a modified version of GC/3.0a3 to be able to handle multi-char constants. + # This was probably a change made in some compiler version in the early days of transitioning GC to Wii development, + # but we don't have that version. GC/3.0a3 appears to have the best overall codegen of any available GC/Wii compiler + # However GC/3.0a5 is required for the linker version, GC/3.0a3 won't work. + return "GC/3.0a3t" case "ShieldD": return "Wii/1.0" case "Shield": @@ -412,7 +408,10 @@ def MWVersion(cfg_version: str | None) -> str: case _: return "GC/2.7" -config.linker_version = MWVersion(config.version) +if config.version == "RZDE01_00" or config.version == "RZDE01_02": + config.linker_version = "GC/3.0a5" +else: + config.linker_version = MWVersion(config.version) # Helper function for Dolphin libraries @@ -600,6 +599,7 @@ config.libs = [ "host": True, "objects": [ Object(NonMatching, "d/d_home_button.cpp"), + Object(NonMatching, "d/d_cursor_mng.cpp"), Object(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d/d_stage.cpp"), Object(Equivalent, "d/d_map.cpp"), # weak func order Object(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d/d_com_inf_game.cpp"), @@ -780,6 +780,16 @@ config.libs = [ Object(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "DynamicLink.cpp"), ], }, + { + "lib": "CaptureScreen", + "mw_version": MWVersion(config.version), + "cflags": cflags_framework, + "progress_category": "core", + "host": True, + "objects": [ + Object(NonMatching, "CaptureScreen.cpp"), + ], + }, { "lib": "SSystem", "mw_version": MWVersion(config.version), @@ -1679,7 +1689,7 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_swc00"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_tag_CstaSw"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_tag_ajnot"), - ActorRel(NonMatching, "d_a_tag_attack_item"), + ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_tag_attack_item"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_tag_gstart"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_tag_hinit"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_tag_hjump"), @@ -1834,7 +1844,7 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_kytag15"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_kytag16"), ActorRel(NonMatching, "d_a_mant"), - ActorRel(NonMatching, "d_a_mg_fshop"), + ActorRel(MatchingFor("GZ2E01"), "d_a_mg_fshop"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_mirror"), ActorRel(NonMatching, "d_a_movie_player", extra_cflags=["-O3,p"]), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_myna"), @@ -2129,7 +2139,7 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_mhole"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_mie"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_mirror_6pole"), - ActorRel(NonMatching, "d_a_obj_mirror_chain"), + ActorRel(Equivalent, "d_a_obj_mirror_chain"), # stack order ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_mirror_sand"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_mirror_screw"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_mirror_table"), diff --git a/include/CaptureScreen.h b/include/CaptureScreen.h new file mode 100644 index 0000000000..1f843da9aa --- /dev/null +++ b/include/CaptureScreen.h @@ -0,0 +1,21 @@ +#ifndef CAPTURESCREEN_H +#define CAPTURESCREEN_H + +#include "JSystem/JFramework/JFWDisplay.h" + +class CaptureScreen { +public: + CaptureScreen(const JFWDisplay*); + + static int getAlignedWidthBytes(int); + static int getBmpBufferSize(int, int); + void makeBmpFromEfb(void*, int, int, int, int, int, int); + void openBmp(int, int); + void closeBmp(); + void saveBmp(void*, u32); + + /* 0x0 */ const JFWDisplay* mpDisplay; + /* 0x4 */ int field_0x4; +}; + +#endif /* CAPTURESCREEN_H */ diff --git a/include/JSystem/JFramework/JFWDisplay.h b/include/JSystem/JFramework/JFWDisplay.h index 79a115046c..9ba569b6e5 100644 --- a/include/JSystem/JFramework/JFWDisplay.h +++ b/include/JSystem/JFramework/JFWDisplay.h @@ -72,6 +72,10 @@ public: static JFWDisplay* getManager() { return sManager; } + static JFWDisplay* createManager(JKRHeap* i_heap, JUTXfb::EXfbNumber i_xfbNum, bool param_2) { + return createManager(NULL, i_heap, i_xfbNum, param_2); + } + bool startFadeOut(int param_0) { if (mFader != NULL) { return mFader->startFadeOut(param_0); diff --git a/include/JSystem/JKernel/JKRExpHeap.h b/include/JSystem/JKernel/JKRExpHeap.h index 4215fd4a2c..f9f126aa23 100644 --- a/include/JSystem/JKernel/JKRExpHeap.h +++ b/include/JSystem/JKernel/JKRExpHeap.h @@ -28,7 +28,7 @@ public: void newGroupId(u8 groupId) { mGroupId = groupId; } bool isValid() const { return mMagic == 'HM'; } - bool _isTempMemBlock() const { return (mFlags & 0x80) ? true : false; } + bool isTempMemBlock() const { return mFlags & 0x80; } int getAlignment() const { return mFlags & 0x7f; } void* getContent() const { return (void*)(this + 1); } CMemBlock* getPrevBlock() const { return mPrev; } diff --git a/include/JSystem/JKernel/JKRFileCache.h b/include/JSystem/JKernel/JKRFileCache.h index 9103340cd1..c6e47d2cc2 100644 --- a/include/JSystem/JKernel/JKRFileCache.h +++ b/include/JSystem/JKernel/JKRFileCache.h @@ -68,4 +68,8 @@ inline JKRFileCache* JKRMountDvdDrive(const char* path, JKRHeap* heap, const cha return JKRFileCache::mount(path, heap, param_2); } +inline void JKRUnmountDvdDrive(JKRFileCache* filecache) { + filecache->unmount(); +} + #endif /* JKRFILECACHE_H */ diff --git a/include/JSystem/JKernel/JKRHeap.h b/include/JSystem/JKernel/JKRHeap.h index 474edf5757..d64a598233 100644 --- a/include/JSystem/JKernel/JKRHeap.h +++ b/include/JSystem/JKernel/JKRHeap.h @@ -91,7 +91,7 @@ public: void setDebugFill(bool debugFill) { mDebugFill = debugFill; } bool getDebugFill() const { return mDebugFill; } void* getStartAddr() { return (void*)mStart; } - void* getEndAddr() const { return (void*)mEnd; } + void* getEndAddr() { return (void*)mEnd; } u32 getSize() const { return mSize; } bool getErrorFlag() const { return mErrorFlag; } void callErrorHandler(JKRHeap* heap, u32 size, int alignment) { diff --git a/include/JSystem/JParticle/JPADrawInfo.h b/include/JSystem/JParticle/JPADrawInfo.h index 061783af2e..0cf63754c5 100644 --- a/include/JSystem/JParticle/JPADrawInfo.h +++ b/include/JSystem/JParticle/JPADrawInfo.h @@ -9,12 +9,12 @@ */ class JPADrawInfo { public: - JPADrawInfo(Mtx param_0, f32 fovY, f32 aspect) { + JPADrawInfo(const Mtx param_0, f32 fovY, f32 aspect) { MTXCopy(param_0, mCamMtx); C_MTXLightPerspective(mPrjMtx, fovY, aspect, 0.5f, -0.5f, 0.5f, 0.5f); } - JPADrawInfo(Mtx param_0, f32 top, f32 bottom, f32 left, f32 right) { + JPADrawInfo(const Mtx param_0, f32 top, f32 bottom, f32 left, f32 right) { MTXCopy(param_0, mCamMtx); C_MTXLightOrtho(mPrjMtx, top, bottom, left, right, 0.5f, 0.5f, 0.5f, 0.5f); } @@ -24,6 +24,8 @@ public: void getCamMtx(Mtx dst) const { MTXCopy(mCamMtx, dst); } void getPrjMtx(Mtx dst) const { MTXCopy(mPrjMtx, dst); } + + void setPrjMtx(const Mtx src) { MTXCopy(src, mPrjMtx); } }; #endif diff --git a/include/JSystem/JUtility/JUTGamePad.h b/include/JSystem/JUtility/JUTGamePad.h index bbb20c0865..b2e5403de8 100644 --- a/include/JSystem/JUtility/JUTGamePad.h +++ b/include/JSystem/JUtility/JUTGamePad.h @@ -110,7 +110,10 @@ public: void stopMotor() { mRumble.stopMotor(mPortNum, false); } void stopMotorHard() { mRumble.stopMotorHard(mPortNum); } - static s8 getPortStatus(u32 port) { return mPadStatus[port].err; } + static s8 getPortStatus(EPadPort port) { + JUT_ASSERT(360, 0 <= port && port < 4); + return mPadStatus[port].err; + } struct CButton { CButton() { clear(); } diff --git a/include/SSystem/SComponent/c_lib.h b/include/SSystem/SComponent/c_lib.h index 99693a0305..1dcd862402 100644 --- a/include/SSystem/SComponent/c_lib.h +++ b/include/SSystem/SComponent/c_lib.h @@ -71,6 +71,19 @@ inline T cLib_maxLimit(T val, T max) { return (T)ret; } +template +inline T cLib_minLimit(T val, T min) { + T ret; + + if (val < min) { + ret = min; + } else { + ret = val; + } + + return (T)ret; +} + template T cLib_getRndValue(T min, T range) { return (T)(min + cM_rndF((f32)range)); diff --git a/include/d/actor/d_a_mg_fshop.h b/include/d/actor/d_a_mg_fshop.h index a30b855958..529b068903 100644 --- a/include/d/actor/d_a_mg_fshop.h +++ b/include/d/actor/d_a_mg_fshop.h @@ -36,7 +36,7 @@ struct fs_rod_s { /* 0x4C */ int field_0x4c; /* 0x50 */ u8 field_0x50[0x54 - 0x50]; /* 0x54 */ f32 field_0x54; - /* 0x58 */ u8 field_0x58[0x5C - 0x58]; + /* 0x58 */ s16 field_0x58; }; struct fs_lure_s { @@ -82,8 +82,9 @@ struct fs_koro2_s { * @details * */ -class fshop_class : public fopAc_ac_c { +class fshop_class { public: + /* 0x0000 */ fopAc_ac_c actor; /* 0x0568 */ request_of_phase_process_class mPhase; /* 0x0570 */ s16 field_0x0570; /* 0x0572 */ s16 field_0x0572; diff --git a/include/d/actor/d_a_obj_mirror_chain.h b/include/d/actor/d_a_obj_mirror_chain.h index e56494fd79..69cdadb038 100644 --- a/include/d/actor/d_a_obj_mirror_chain.h +++ b/include/d/actor/d_a_obj_mirror_chain.h @@ -38,7 +38,7 @@ public: /* 80C96E40 */ int createHeap(); /* 80C975EC */ void initBaseMtx(); /* 80C97618 */ void setBaseMtx(); - /* 80C976B8 */ int draw(); + /* 80C976B8 */ inline int draw(); /* 80C97988 */ int execute(); inline ~daObjMirrorChain_c(); inline void create_init(); diff --git a/include/d/actor/d_a_tag_attack_item.h b/include/d/actor/d_a_tag_attack_item.h index 8a25948c59..5c98b73bc6 100644 --- a/include/d/actor/d_a_tag_attack_item.h +++ b/include/d/actor/d_a_tag_attack_item.h @@ -1,5 +1,35 @@ #ifndef D_A_TAG_ATTACK_ITEM_H #define D_A_TAG_ATTACK_ITEM_H +#include "f_op/f_op_actor_mng.h" +#include "d/d_event_lib.h" +#include "d/d_cc_d.h" + +class daTagAtkItem_c : public fopAc_ac_c , public dEvLib_callback_c { +public: + daTagAtkItem_c() : dEvLib_callback_c(this) {} + + /* 805A2958 */ void setBaseMtx(); + /* 805A2990 */ int Create(); + /* 805A2A34 */ int create(); + /* 805A2C48 */ int execute(); + /* 805A2CA8 */ void action(); + /* 805A2D58 */ BOOL checkHit(); + /* 805A2F54 */ void createItem(); + /* 805A3038 */ int _delete(); + + /* 805A3118 */ virtual ~daTagAtkItem_c() {} + /* 805A2D10 */ virtual bool eventStart(); + /* 805A2D34 */ virtual bool eventEnd(); + + u8 getEvId() { return fopAcM_GetParamBit(this, 0x18, 8); } + u8 getNum() { return fopAcM_GetParamBit(this, 8, 8); } + u8 getItemBit() { return fopAcM_GetParamBit(this, 0x10, 8); } + u8 getItemNo() { return fopAcM_GetParamBit(this, 0, 8); } + + /* 0x57C */ u8 field_0x57C[0x584 - 0x57C]; + /* 0x584 */ dCcD_Stts mCcStts; + /* 0x5C0 */ dCcD_Cyl mCyl; +}; #endif /* D_A_TAG_ATTACK_ITEM_H */ diff --git a/include/d/d_camera.h b/include/d/d_camera.h index 42e0fbc69c..69f945eb79 100644 --- a/include/d/d_camera.h +++ b/include/d/d_camera.h @@ -10,6 +10,7 @@ #include "d/d_stage.h" #include "d/actor/d_a_player.h" #include "f_op/f_op_actor.h" +#include "m_Do/m_Do_graphic.h" dAttention_c* dComIfGp_getAttention(); @@ -1063,7 +1064,7 @@ public: bool CheckFlag(u32 i_flag) { return mEventFlags & i_flag; } - void ResetView() { setView(0.0f, 0.0f, 608.0f, 448.0f); } + void ResetView() { setView(0.0f, 0.0f, FB_WIDTH, FB_HEIGHT); } void clearInfo(dCamInfo_c* i_info, s16 param_1) { i_info->field_0x1e = param_1; diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 448495a1d8..4f8a0fc026 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -236,7 +236,7 @@ public: /* 0x04F69 */ u8 mNeedLightDropNum; /* 0x04F6A */ u8 field_0x4f6a[18]; /* 0x04F7C */ u8 mMesgBgm; - /* 0x04F7D */ bool mPauseFlag; + /* 0x04F7D */ u8 mPauseFlag; /* 0x04F7E */ u8 mItemLifeCountType; /* 0x04F7F */ u8 mOxygenShowFlag; /* 0x04F80 */ u8 mShow2D; @@ -715,7 +715,7 @@ public: void setDirection(u8 i_dir) { mItemInfo.mDirection = i_dir; } - bool& isPauseFlag() { return mItemInfo.mPauseFlag; } + u8 isPauseFlag() { return mItemInfo.mPauseFlag; } void offPauseFlag() { mItemInfo.mPauseFlag = false; } void onPauseFlag() { mItemInfo.mPauseFlag = true; } u8 getOxygenShowFlag() { return mItemInfo.mOxygenShowFlag; } @@ -3095,7 +3095,7 @@ inline bool dComIfGp_isBottleSetFlag(u8 flag) { return g_dComIfG_gameInfo.play.isBottleSetFlag(flag); } -inline bool dComIfGp_isPauseFlag() { +inline u8 dComIfGp_isPauseFlag() { return g_dComIfG_gameInfo.play.isPauseFlag(); } @@ -4069,6 +4069,10 @@ inline JPABaseEmitter* dComIfGp_particle_getEmitter(u32 param_0) { return g_dComIfG_gameInfo.play.getParticle()->getEmitter(param_0); } +inline void dComIfGp_particle_levelExecute(u32 param_0) { + g_dComIfG_gameInfo.play.getParticle()->levelExecute(param_0); +} + inline u32 dComIfGp_particle_setSimpleFoot(u32 param_0, u32* param_1, cBgS_PolyInfo& param_2, cXyz const* param_3, dKy_tevstr_c const* param_4, int param_5, csXyz const* param_6, cXyz const* param_7, diff --git a/include/d/d_cursor_mng.h b/include/d/d_cursor_mng.h new file mode 100644 index 0000000000..59fcbe0ba1 --- /dev/null +++ b/include/d/d_cursor_mng.h @@ -0,0 +1,9 @@ +#ifndef D_CURSOR_MNG_H +#define D_CURSOR_MNG_H + +#include "m_Do/m_Re_controller_pad.h" + +// TODO: putting this here until a more appropriate place is found +extern u8 data_8053a730; + +#endif /* D_CURSOR_MNG_H */ diff --git a/include/d/d_meter2_info.h b/include/d/d_meter2_info.h index b41fcfd51a..b7905a77a2 100644 --- a/include/d/d_meter2_info.h +++ b/include/d/d_meter2_info.h @@ -312,6 +312,11 @@ bool dMeter2Info_isItemOpenCheck(); bool dMeter2Info_isMapOpenCheck(); s16 dMeter2Info_getNowLifeGauge(); +#if WIDESCREEN_SUPPORT +void dMeter2Info_onWide2D(); +void dMeter2Info_offWide2D(); +#endif + inline void dMeter2Info_Initialize() { g_meter2_info.init(); } diff --git a/include/d/d_meter_HIO.h b/include/d/d_meter_HIO.h index b928ec7afe..d8f2a8af9e 100644 --- a/include/d/d_meter_HIO.h +++ b/include/d/d_meter_HIO.h @@ -3,17 +3,27 @@ #include "JSystem/JUtility/TColor.h" #include "JSystem/JHostIO/JORReflexible.h" +#include "JSystem/JHostIO/JORServer.h" #include "SSystem/SComponent/c_sxyz.h" #include "SSystem/SComponent/c_xyz.h" #include "global.h" +struct subJOREventCallbackListNode : public JOREventCallbackListNode { + subJOREventCallbackListNode() : JOREventCallbackListNode(0x81000000, 0x81000000, true) {} + + virtual int JORAct(u32, const char*); + virtual ~subJOREventCallbackListNode() {} +}; + class JKRAramArchive; -class dMeter_menuHIO_c { +class dMeter_menuHIO_c : public JORReflexible { public: /* 801FE330 */ dMeter_menuHIO_c(); /* 8020123C */ virtual ~dMeter_menuHIO_c() {} + void genMessage(JORMContext*); + /* 0x0 */ // vtable /* 0x4 */ u8 field_0x4[2]; /* 0x6 */ s16 mGameover; @@ -21,11 +31,13 @@ public: STATIC_ASSERT(sizeof(dMeter_menuHIO_c) == 8); -class dMeter_drawCollectHIO_c { +class dMeter_drawCollectHIO_c : public JORReflexible { public: dMeter_drawCollectHIO_c(); virtual ~dMeter_drawCollectHIO_c() {} + void genMessage(JORMContext*); + enum { /* 0x0 */ VESSEL_HEART, /* 0x1 */ VESSEL_DECOR @@ -70,11 +82,13 @@ public: /* 0x9C */ bool mButtonDebugON; }; // Size = 0xA0 -class dMeter_drawOptionHIO_c { +class dMeter_drawOptionHIO_c : public JORReflexible { public: /* 801FE4EC */ dMeter_drawOptionHIO_c(); /* 80200F98 */ virtual ~dMeter_drawOptionHIO_c() {} + void genMessage(JORMContext*); + enum OptionType { /* 0x0 */ ATTENTION, /* 0x1 */ RUMBLE, @@ -106,11 +120,13 @@ public: /* 0x6D */ u8 mBackgroundAlpha; }; // Size: 0x70 -class dMeter_drawLetterHIO_c { +class dMeter_drawLetterHIO_c : public JORReflexible { public: /* 801FE5CC */ dMeter_drawLetterHIO_c(); /* 80200F50 */ virtual ~dMeter_drawLetterHIO_c() {} + void genMessage(JORMContext*); + enum { /* 0x0 */ WINDOW_FRAME, /* 0x1 */ LETTER_FRAME @@ -146,11 +162,13 @@ public: /* 0x5F */ bool mDebugON; }; // Size: 0x60 -class dMeter_drawFishingHIO_c { +class dMeter_drawFishingHIO_c : public JORReflexible { public: /* 801FE730 */ dMeter_drawFishingHIO_c(); /* 80200F08 */ virtual ~dMeter_drawFishingHIO_c() {} + void genMessage(JORMContext*); + enum { /* 0x0 */ HYLIAN_BASS, /* 0x1 */ HYLIAN_LOACH, @@ -196,11 +214,13 @@ public: /* 0x250 */ bool mDebug; }; // Size: 0x254 -class dMeter_drawInsectHIO_c { +class dMeter_drawInsectHIO_c : public JORReflexible { public: /* 801FE8DC */ dMeter_drawInsectHIO_c(); /* 80200EC0 */ virtual ~dMeter_drawInsectHIO_c() {} + void genMessage(JORMContext*); + enum Type { /* 0x0 */ DEFAULT, /* 0x1 */ COLLECT, @@ -227,11 +247,13 @@ public: /* 0x3D */ bool mDebugON; }; // Size: 0x40 -class dMeter_drawCalibrationHIO_c { +class dMeter_drawCalibrationHIO_c : public JORReflexible { public: /* 801FE954 */ dMeter_drawCalibrationHIO_c(); /* 80200E78 */ virtual ~dMeter_drawCalibrationHIO_c() {} + void genMessage(JORMContext*); + /* 0x00 */ // vtable /* 0x04 */ u8 field_0x4[4]; /* 0x08 */ f32 mCircleScale; @@ -242,11 +264,13 @@ public: /* 0x16 */ bool mDebug; }; // Size: 0x18 -class dMeter_drawSkillHIO_c { +class dMeter_drawSkillHIO_c : public JORReflexible { public: /* 801FE990 */ dMeter_drawSkillHIO_c(); /* 80200E30 */ virtual ~dMeter_drawSkillHIO_c() {} + void genMessage(JORMContext*); + enum { /* 0x0 */ WINDOW, /* 0x1 */ SKILL_DESC, @@ -280,11 +304,13 @@ public: /* 0x5B */ bool mDebug; }; // Size: 0x5C -class dMeter_drawEmpButtonHIO_c { +class dMeter_drawEmpButtonHIO_c : public JORReflexible { public: /* 801FEAF0 */ dMeter_drawEmpButtonHIO_c(); /* 80200DA0 */ virtual ~dMeter_drawEmpButtonHIO_c() {} + void genMessage(JORMContext*); + /* 0x000 */ // vtable /* 0x004 */ u8 field_0x4[4]; /* 0x008 */ f32 mEmpButtonPosX; @@ -381,18 +407,14 @@ public: /* 0x17C */ f32 mHawkeyeZoomPosY; /* 0x180 */ f32 mHawkeyeZoomScale; /* 0x184 */ f32 mHawkeyeZoomScale_4x3; - /* 0x188 */ f32 mHawkeyeTextIconPosX; - /* 0x18C */ f32 mHawkeyeZoomTextPosX; - /* 0x190 */ f32 mHawkeyeIconPosX; + /* 0x188 */ f32 mHawkeyeIconPosX[3]; /* 0x194 */ f32 mHawkeyeTextIconPosY_4x3; /* 0x198 */ f32 mHawkeyeTextPosY_4x3; /* 0x19C */ f32 mHawkeyeIconPosY_4x3; /* 0x1A0 */ f32 mHawkeyeTextIconPosY; /* 0x1A4 */ f32 mHawkeyeZoomTextPosY; /* 0x1A8 */ f32 mHawkeyeIconPosY; - /* 0x1AC */ f32 mHawkeyeTextIconScale; - /* 0x1B0 */ f32 mHawkeyeTextScale; - /* 0x1B4 */ f32 mHawkeyeIconScale; + /* 0x1AC */ f32 mHawkeyeIconScale[3]; /* 0x1B8 */ JUtility::TColor mPointerONBlack[2]; /* 0x1C0 */ JUtility::TColor mPointerONWhite[2]; /* 0x1C8 */ JUtility::TColor mPointerOFFBlack; @@ -432,11 +454,13 @@ public: /* 0x25A */ bool mHawkeyeZoomDebugON; }; // Size: 0x25C -class dMeter_drawMiniGameHIO_c { +class dMeter_drawMiniGameHIO_c : public JORReflexible { public: /* 801FEFF0 */ dMeter_drawMiniGameHIO_c(); /* 80200DE8 */ virtual ~dMeter_drawMiniGameHIO_c() {} + void genMessage(JORMContext*); + /* 0x000 */ // vtable /* 0x004 */ u8 field_0x4[4]; /* 0x008 */ f32 field_0x8[3]; @@ -506,11 +530,13 @@ public: /* 0x18C */ s16 mReadyFightPikariAppearFrames; }; // Size: 0x190 -class dMeter_drawLightDropHIO_c { +class dMeter_drawLightDropHIO_c : public JORReflexible { public: /* 801FF31C */ dMeter_drawLightDropHIO_c(); /* 80200D58 */ virtual ~dMeter_drawLightDropHIO_c() {} + void genMessage(JORMContext*); + /* 0x00 */ // vtable /* 0x04 */ u8 field_0x4[4]; /* 0x08 */ f32 mVesselScale; @@ -555,11 +581,22 @@ public: class dMeter_drawHIO_c : public JORReflexible { public: /* 801FF5B8 */ dMeter_drawHIO_c(); - /* 80201128 */ virtual ~dMeter_drawHIO_c() {} + /* 80201128 */ virtual ~dMeter_drawHIO_c() { + #if DEBUG + field_0x8_debug = 0; + #endif + } #ifdef DEBUG virtual void listenPropertyEvent(const JORPropertyEvent*); virtual void genMessage(JORMContext*); + + void updateFMsgDebug(); + #endif + + #if WIDESCREEN_SUPPORT + void updateOnWide(); + void updateOffWide(); #endif /* 0x000 */ // vtable @@ -916,11 +953,18 @@ public: STATIC_ASSERT(sizeof(dMeter_drawHIO_c) == 3880); -class dMeter_ringHIO_c { +class dMeter_ringHIO_c : public JORReflexible { public: /* 802001AC */ dMeter_ringHIO_c(); /* 802010E0 */ virtual ~dMeter_ringHIO_c() {} + void genMessage(JORMContext*); + + #if WIDESCREEN_SUPPORT + void updateOnWide(); + void updateOffWide(); + #endif + enum { /* 0x0 */ SET_ITEM, /* 0x1 */ DIRECT_SELECT, @@ -1007,11 +1051,13 @@ public: STATIC_ASSERT(sizeof(dMeter_ringHIO_c) == 344); -class dMeter_mapIconHIO_c { +class dMeter_mapIconHIO_c : public JORReflexible { public: /* 802004B4 */ dMeter_mapIconHIO_c(); /* 80201028 */ virtual ~dMeter_mapIconHIO_c() {} + void genMessage(JORMContext*); + enum { /* 0x00 */ ICON_PORTAL, /* 0x01 */ ICON_LINK, @@ -1141,6 +1187,8 @@ public: /* 802006C8 */ dMeter_fmapHIO_c(); #ifdef DEBUG void update(); + void createEvtCallBackObject(); + void deleteEvtCallBackObject(); virtual void listenPropertyEvent(const JORPropertyEvent*); virtual void genMessage(JORMContext*); @@ -1148,11 +1196,17 @@ public: /* 80200BCC */ virtual ~dMeter_fmapHIO_c(); /* 0x004 */ s8 field_0x4; - /* 0x008 */ JKRAramArchive* mpArchive; - /* 0x00C */ void* field_0xc; - /* 0x010 */ void* field_0x10; + #if DEBUG + /* 0x008 */ subJOREventCallbackListNode* mpEvtCallBack; + #endif + /* 0x008 */ JKRAramArchive* mpArcData; + /* 0x00C */ void* mpArcFile; + /* 0x010 */ void* mpDecompBuf; /* 0x014 */ void* field_0x14; /* 0x018 */ void* field_0x18; + #if DEBUG + /* 0x020 */ u8 unk_0x20[4]; + #endif /* 0x01C */ MapBlinkAnime mMapBlink[3]; /* 0x094 */ s16 mDisplayFrameNum; /* 0x096 */ s16 mUndisplayFrameNum; @@ -1255,11 +1309,13 @@ public: STATIC_ASSERT(sizeof(dMeter_fmapHIO_c) == 1188); -class dMeter_cursorHIO_c { +class dMeter_cursorHIO_c : public JORReflexible { public: /* 80200CD4 */ dMeter_cursorHIO_c(); /* 80201098 */ virtual ~dMeter_cursorHIO_c() {} + void genMessage(JORMContext*); + /* 0x04 */ s8 field_0x4; /* 0x08 */ cXyz mSeraShopObjZoom; /* 0x14 */ cXyz mObjZoom; diff --git a/include/d/d_particle.h b/include/d/d_particle.h index 956466a758..112b79cd16 100644 --- a/include/d/d_particle.h +++ b/include/d/d_particle.h @@ -409,6 +409,13 @@ public: void levelAllForceOnEventMove() { field_0x210.allForceOnEventMove(); } + void levelExecute(u32 param_0) { + level_c::emitter_c* emitter = field_0x210.get(param_0); + if (emitter != NULL) { + field_0x210.execute(emitter); + } + } + static void onStatus(u8 status) { mStatus |= status; } static void offStatus(u8 status) { mStatus &= ~status; } static bool isStatus(u8 status) { return mStatus & status; } diff --git a/include/d/d_procname.h b/include/d/d_procname.h index 4362dc851f..cfdeaf6730 100644 --- a/include/d/d_procname.h +++ b/include/d/d_procname.h @@ -798,6 +798,8 @@ enum { /* 0x315 */ PROC_TIMER, /* 0x316 */ PROC_METER2, /* 0x317 */ PROC_GAMEOVER, + + PROC_MAX_NUM, }; #endif /* D_PROCNAME_H */ diff --git a/include/f_ap/f_ap_game.h b/include/f_ap/f_ap_game.h index 5827100a27..a5cb57a90d 100644 --- a/include/f_ap/f_ap_game.h +++ b/include/f_ap/f_ap_game.h @@ -5,22 +5,13 @@ #include "JSystem/JHostIO/JORReflexible.h" #include "JSystem/JFramework/JFWDisplay.h" #include "JSystem/JUtility/JUTAssert.h" +#include "CaptureScreen.h" #include void fapGm_After(); void fapGm_Create(); void fapGm_Execute(); -struct CaptureScreen { - CaptureScreen(const JFWDisplay* i_display) { - field_0x0 = i_display; - field_0x4 = 0; - } - - /* 0x0 */ const JFWDisplay* field_0x0; - /* 0x4 */ int field_0x4; -}; - class fapGm_HIO_c : public JORReflexible { public: /* 80018944 */ fapGm_HIO_c(); @@ -42,6 +33,10 @@ public: JUT_ASSERT(46, mCaptureScreen != NULL); } + static u8 isCaptureScreen() { + return mCaptureScreenFlag; + } + static void onCpuTimer() { m_CpuTimerOn = TRUE; } @@ -81,7 +76,7 @@ public: /* 0x17 */ u8 mDisplay2D; /* 0x18 */ u8 mDisplayParticle; /* 0x19 */ u8 mDisplayProcessID; - #if DEBUG + #if PLATFORM_WII || PLATFORM_SHIELD /* 0x1A */ u8 mTrapFilter; /* 0x1B */ u8 mGammaCorrection; #endif @@ -119,7 +114,7 @@ inline BOOL fapGmHIO_isMenu() { return g_HIO.mDisplayPrint & 2; } -inline bool fapGmHIO_isPrint() { +inline BOOL fapGmHIO_isPrint() { return g_HIO.mDisplayPrint & 1; } @@ -155,6 +150,20 @@ inline void fapGmHIO_onPrint() { g_HIO.mDisplayPrint |= (u8)0x1; } +inline u8 fapGmHIO_getParticle() { + return g_HIO.mDisplayParticle; +} + +#if PLATFORM_WII || PLATFORM_SHIELD +inline u8 fapGmHIO_getTrapFilter() { + return g_HIO.mTrapFilter; +} + +inline u8 fapGmHIO_getGamma() { + return g_HIO.mGammaCorrection; +} +#endif + struct fapGm_dataMem { enum HeapType_e { HeapType_Error_e, diff --git a/include/m_Do/m_Do_controller_pad.h b/include/m_Do/m_Do_controller_pad.h index 4c77bb7888..8f8f2a2ea9 100644 --- a/include/m_Do/m_Do_controller_pad.h +++ b/include/m_Do/m_Do_controller_pad.h @@ -59,7 +59,7 @@ public: static s16 getSubStickAngle(u32 pad) { return getCpadInfo(pad).mCStickAngle; } static f32 getAnalogR(u32 pad) { return getCpadInfo(pad).mTriggerRight; } static f32 getAnalogL(u32 pad) { return getCpadInfo(pad).mTriggerLeft; } - static BOOL isConnect(u32 pad) { return JUTGamePad::getPortStatus(pad) == 0; } + static BOOL isConnect(u32 pad) { return JUTGamePad::getPortStatus((JUTGamePad::EPadPort)pad) == 0; } static void startMotorWave(u32 pad, void* data, JUTGamePad::CRumble::ERumble rumble, u32 length) { m_gamePad[pad]->startMotorWave(data, rumble, length); } diff --git a/include/m_Do/m_Do_ext2.h b/include/m_Do/m_Do_ext2.h index 45c72fe6ef..2308717bb6 100644 --- a/include/m_Do/m_Do_ext2.h +++ b/include/m_Do/m_Do_ext2.h @@ -12,8 +12,8 @@ public: void check(); void diff(); - static void easyCreate(void*, s32); - static void easyCreate(void*, u32); + static FixedMemoryCheck* easyCreate(void*, s32); + static FixedMemoryCheck* easyCreate(void*, u32); static void checkAll(); static void diffAll(); static void saveAll(); diff --git a/include/m_Do/m_Do_graphic.h b/include/m_Do/m_Do_graphic.h index a0b52e4b95..44685e321f 100644 --- a/include/m_Do/m_Do_graphic.h +++ b/include/m_Do/m_Do_graphic.h @@ -2,13 +2,22 @@ #define M_DO_M_DO_GRAPHIC_H #include "JSystem/JFramework/JFWDisplay.h" -#include "dolphin/mtx.h" +#include "m_Do/m_Do_mtx.h" #include "global.h" +#if WIDESCREEN_SUPPORT +#define FB_WIDTH (640) +#define FB_HEIGHT (456) +#else +#define FB_WIDTH (608) +#define FB_HEIGHT (448) +#endif + int mDoGph_Create(); void mDoGph_drawFilterQuad(s8 param_0, s8 param_1); struct ResTIMG; +class JKRSolidHeap; class mDoGph_gInf_c { public: class bloom_c { @@ -43,6 +52,20 @@ public: /* 0x10 */ void* m_buffer; }; + #if PLATFORM_WII || PLATFORM_SHIELD + class csr_c { + public: + virtual ~csr_c(); + virtual bool isPointer(); + + void particleExecute(); + + static u32 m_blurID; + }; + + static void entryBaseCsr(csr_c*); + #endif + /* 80007E44 */ static void create(); /* 80007F90 */ static void beginRender(); /* 800080D0 */ static void fadeOut(f32); @@ -71,7 +94,7 @@ public: static u8 isFade() { return mFade; } static void fadeIn_f(f32 i_fadeSpeed, _GXColor& i_fadeColor) { fadeOut_f(-i_fadeSpeed, i_fadeColor); } static void offBlure() { mBlureFlag = false; } - static bool isBlure() { return mBlureFlag; } + static u8 isBlure() { return mBlureFlag; } static void setBlureRate(u8 i_rate) { mBlureRate = i_rate; } static u8 getBlureRate() { return mBlureRate; } static MtxP getBlureMtx() { return mBlureMtx; } @@ -80,11 +103,15 @@ public: static void setTickRate(u32 rate) { JFWDisplay::getManager()->setTickRate(rate); } static void waitBlanking(int wait) { JFWDisplay::getManager()->waitBlanking(wait); } + static void setBlureMtx(const Mtx m) { + cMtx_copy(m, mBlureMtx); + } + static f32 getWidthF() { #if PLATFORM_WII || PLATFORM_SHIELD return m_widthF; #else - return 608.0f; + return FB_WIDTH; #endif } @@ -92,12 +119,12 @@ public: #if PLATFORM_WII || PLATFORM_SHIELD return m_heightF; #else - return 448.0f; + return FB_HEIGHT; #endif } - static f32 getWidth() { return 608.0f; } - static f32 getHeight() { return 448.0f; } + static f32 getWidth() { return FB_WIDTH; } + static f32 getHeight() { return FB_HEIGHT; } static f32 getMinYF() { #if PLATFORM_WII || PLATFORM_SHIELD @@ -119,7 +146,7 @@ public: #if PLATFORM_WII || PLATFORM_SHIELD return m_maxYF; #else - return 448.0f; + return FB_HEIGHT; #endif } @@ -127,15 +154,50 @@ public: #if PLATFORM_WII || PLATFORM_SHIELD return m_maxXF; #else - return 608.0f; + return FB_WIDTH; + #endif + } + + static f32 getAspect() { + #if WIDESCREEN_SUPPORT + return m_aspect; + #else + return 1.3571428f; + #endif + } + + static int getMinY() { + #if WIDESCREEN_SUPPORT + return m_minY; + #else + return 0; + #endif + } + + static int getMinX() { + #if WIDESCREEN_SUPPORT + return m_minX; + #else + return 0; + #endif + } + + static int getMaxY() { + #if WIDESCREEN_SUPPORT + return m_maxY; + #else + return FB_HEIGHT; + #endif + } + + static int getMaxX() { + #if WIDESCREEN_SUPPORT + return m_maxX; + #else + return FB_WIDTH; #endif } - static f32 getAspect() { return 1.3571428f; } - static int getMinY() { return 0; } - static int getMinX() { return 0; } - static int getMaxY() { return 448; } - static int getMaxX() { return 608; } static ResTIMG* getFrameBufferTimg() { return mFrameBufferTimg; } static ResTIMG* getZbufferTimg() { return mZbufferTimg; } static void* getFrameBufferTex() { return mFrameBufferTex; } @@ -148,9 +210,6 @@ public: static void endRender() { JFWDisplay::getManager()->endRender(); } static GXTexObj* getZbufferTexObj() { return &mZbufferTexObj; } static GXTexObj* getFrameBufferTexObj() { return &mFrameBufferTexObj; } - static f32 getInvScale() { return 1.0f; } - static f32 getScale() { return 1.0f; } - static void setWideZoomLightProjection(Mtx m) {} static void setFrameRate(u16 i_rate) { JFWDisplay::getManager()->setFrameRate(i_rate); } static int getFrameBufferSize() { @@ -162,22 +221,30 @@ public: return JFWDisplay::getManager()->getXfbManager()->getDisplayingXfb(); } - // NONMATCHING - Need to define all mDoGph_gInf_c shieldD members - static u8 isWide() { - #if PLATFORM_WII || PLATFORM_SHIELD - return mWide == TRUE; + static f32 getInvScale() { + #if WIDESCREEN_SUPPORT + return m_invScale; #else - return false; + return 1.0f; #endif } - static void onWideZoom() { - //TODO - } + static f32 getScale() { return 1.0f; } - static void offWideZoom() { - //TODO - } + #if WIDESCREEN_SUPPORT + static void setTvSize(); + + static void onWide(); + static void offWide(); + static u8 isWide(); + + static void onWideZoom(); + static void offWideZoom(); + static BOOL isWideZoom(); + + static void setWideZoomProjection(Mtx44& m); + static void setWideZoomLightProjection(Mtx& m); + #endif static GXTexObj mFrameBufferTexObj; static GXTexObj mZbufferTexObj; @@ -192,28 +259,57 @@ public: static void* mZbufferTex; static f32 mFadeRate; static f32 mFadeSpeed; - static bool mBlureFlag; + static u8 mBlureFlag; static u8 mBlureRate; static u8 mFade; static bool mAutoForcus; - #if PLATFORM_WII || PLATFORM_SHIELD + #if PLATFORM_SHIELD static JKRHeap* getHeap() { return m_heap; } + static void setHeap(JKRSolidHeap* i_heap) { + m_heap = (JKRHeap*)i_heap; + } + static JKRHeap* m_heap; + #endif + + #if PLATFORM_WII || PLATFORM_SHIELD + static void resetDimming(); + + static csr_c* m_baseCsr; + static csr_c* m_csr; + static cXyz m_nowEffPos; static cXyz m_oldEffPos; static cXyz m_oldOldEffPos; + #endif + + #if WIDESCREEN_SUPPORT static u8 mWide; + static u8 mWideZoom; static ResTIMG* m_fullFrameBufferTimg; static void* m_fullFrameBufferTex; static GXTexObj m_fullFrameBufferTexObj; + + static f32 m_aspect; + static f32 m_scale; + static f32 m_invScale; + static f32 m_minXF; static f32 m_minYF; + static int m_minX; + static int m_minY; + static f32 m_maxXF; static f32 m_maxYF; + static int m_maxX; + static int m_maxY; + + static int m_width; + static int m_height; static f32 m_heightF; static f32 m_widthF; #endif diff --git a/include/m_Do/m_Do_mtx.h b/include/m_Do/m_Do_mtx.h index c82f7ae173..739a0e93ae 100644 --- a/include/m_Do/m_Do_mtx.h +++ b/include/m_Do/m_Do_mtx.h @@ -45,7 +45,7 @@ inline void mDoMtx_multVecArray(Mtx m, const Vec* src, Vec* dst, u32 count) { } inline void mDoMtx_copy(const Mtx src, Mtx dst) { - MTXCopy(src, dst); + PSMTXCopy(src, dst); } inline void mDoMtx_trans(Mtx m, f32 x, f32 y, f32 z) { diff --git a/include/revolution/vi/vifuncs.h b/include/revolution/vi/vifuncs.h index 3c1647b37f..f2ed7ef6ca 100644 --- a/include/revolution/vi/vifuncs.h +++ b/include/revolution/vi/vifuncs.h @@ -29,6 +29,10 @@ void* VIGetCurrentFrameBuffer(void); u32 VIGetScanMode(void); u32 VIGetDTVStatus(void); +void VISetTrapFilter(u8); +void VIEnableDimming(BOOL); +void VISetGamma(int); + #ifdef __cplusplus } #endif diff --git a/src/CaptureScreen.cpp b/src/CaptureScreen.cpp new file mode 100644 index 0000000000..f6b24e63bc --- /dev/null +++ b/src/CaptureScreen.cpp @@ -0,0 +1,30 @@ +#include "CaptureScreen.h" + +CaptureScreen::CaptureScreen(const JFWDisplay* pDisplay) { + mpDisplay = pDisplay; + field_0x4 = 0; +} + +int CaptureScreen::getAlignedWidthBytes(int param_0) { + return ROUND((param_0 * 4) - param_0, 4); +} + +int CaptureScreen::getBmpBufferSize(int param_0, int param_1) { + return param_1 * getAlignedWidthBytes(param_0) + 0x36; +} + +void CaptureScreen::makeBmpFromEfb(void* param_0, int param_1, int param_2, int param_3, int param_4, int param_5, int param_6) { + // NONMATCHING +} + +void CaptureScreen::openBmp(int param_0, int param_1) { + // NONMATCHING +} + +void CaptureScreen::closeBmp() { + // NONMATCHING +} + +void CaptureScreen::saveBmp(void* param_0, u32 param_1) { + // NONMATCHING +} diff --git a/src/JSystem/JKernel/JKRExpHeap.cpp b/src/JSystem/JKernel/JKRExpHeap.cpp index 9bbf37a505..143b05e21b 100644 --- a/src/JSystem/JKernel/JKRExpHeap.cpp +++ b/src/JSystem/JKernel/JKRExpHeap.cpp @@ -826,7 +826,7 @@ bool JKRExpHeap::dump() { } JUTReportConsole_f("%s %08x: %08x %3d %3d (%08x %08x)\n", - block->_isTempMemBlock() ? " temp" : "alloc", block->getContent(), + block->isTempMemBlock() ? " temp" : "alloc", block->getContent(), block->size, block->mGroupId, block->getAlignment(), block->mPrev, block->mNext); usedBytes += sizeof(CMemBlock) + block->size + block->getAlignment(); @@ -886,7 +886,7 @@ bool JKRExpHeap::dump_sort() { int offset = block->getAlignment(); void* content = block->getContent(); - const char* type = block->_isTempMemBlock() ? " temp" : "alloc"; + const char* type = block->isTempMemBlock() ? " temp" : "alloc"; JUTReportConsole_f("%s %08x: %08x %3d %3d (%08x %08x)\n", type, content, block->size, block->getGroupId(), offset, block->mPrev, block->mNext); usedBytes += sizeof(CMemBlock) + block->size + block->getAlignment(); diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/math.h b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/math.h index 23dd1334e9..15465dc7a7 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/math.h +++ b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/math.h @@ -70,7 +70,7 @@ double sqrt(double); double tan(double); float tanf(float); -#if PLATFORM_SHIELD +#if PLATFORM_WII || PLATFORM_SHIELD inline float sqrtf(float mag) { return sqrt(mag); } diff --git a/src/c/c_dylink.cpp b/src/c/c_dylink.cpp index 17dd970f33..1670a38d51 100644 --- a/src/c/c_dylink.cpp +++ b/src/c/c_dylink.cpp @@ -10,6 +10,11 @@ #include "d/d_com_inf_game.h" #include "m_Do/m_Do_ext.h" +#if DEBUG +#include "f_pc/f_pc_debug_sv.h" +#include "m_Do/m_Do_ext2.h" +#endif + /* 80374640-80375DE8 -00001 17A8+00 1/1 0/0 0/0 .rodata DynamicNameTable */ static DynamicNameTableEntry const DynamicNameTable[] = { {PROC_ALLDIE, "d_a_alldie"}, @@ -17,6 +22,9 @@ static DynamicNameTableEntry const DynamicNameTable[] = { {PROC_Obj_Swpush2, "d_a_obj_swpush2"}, {PROC_Obj_Swpush5, "d_a_obj_swpush5"}, {PROC_Tag_Gstart, "d_a_tag_gstart"}, + #if PLATFORM_WII || PLATFORM_SHIELD + {PROC_NO_CHG_ROOM, "d_a_no_chg_room"}, + #endif {PROC_Obj_Lv6ElevtA, "d_a_obj_lv6elevta"}, {PROC_OBJ_SO, "d_a_obj_so"}, {PROC_Obj_Movebox, "d_a_obj_movebox"}, @@ -91,7 +99,9 @@ static DynamicNameTableEntry const DynamicNameTable[] = { {PROC_Obj_BkDoor, "d_a_obj_bkdoor"}, {PROC_Obj_Cboard, "d_a_obj_cboard"}, {PROC_Obj_MGate, "d_a_obj_mgate"}, + #if !PLATFORM_SHIELD {PROC_Obj_Ikada, "d_a_obj_ikada"}, + #endif {PROC_Obj_Ice_l, "d_a_obj_ice_l"}, {PROC_Obj_Ice_s, "d_a_obj_ice_s"}, {PROC_Obj_E_CREATE, "d_a_obj_enemy_create"}, @@ -530,14 +540,18 @@ static DynamicNameTableEntry const DynamicNameTable[] = { {PROC_Obj_LifeContainer, "d_a_obj_life_container"}, {PROC_Obj_Shield, "d_a_obj_shield"}, {PROC_Demo_Item, "d_a_demo_item"}, + #if !PLATFORM_SHIELD {PROC_ShopItem, "d_a_shop_item"}, + #endif {PROC_Obj_Drop, "d_a_obj_drop"}, {PROC_OBJ_RW, "d_a_obj_rw"}, {PROC_NBOMB, "d_a_nbomb"}, {PROC_TAG_CSW, "d_a_tag_csw"}, {PROC_TAG_QS, "d_a_tag_qs"}, {PROC_HOZELDA, "d_a_hozelda"}, + #if !PLATFORM_SHIELD {PROC_SWC00, "d_a_swc00"}, + #endif {PROC_KNOB20, "d_a_door_knob00"}, {PROC_DBDOOR, "d_a_door_dbdoor00"}, {PROC_BOSS_DOOR, "d_a_door_boss"}, @@ -549,7 +563,9 @@ static DynamicNameTableEntry const DynamicNameTable[] = { {PROC_Tag_ChgRestart, "d_a_tag_chgrestart"}, {PROC_Tag_Restart, "d_a_tag_setrestart"}, {PROC_ANDSW, "d_a_andsw"}, + #if !PLATFORM_SHIELD {PROC_ANDSW2, "d_a_andsw2"}, + #endif {PROC_MYNA, "d_a_myna"}, {PROC_NPC_GND, "d_a_npc_gnd"}, {PROC_NPC_GRA, "d_a_npc_gra"}, @@ -668,10 +684,14 @@ static DynamicNameTableEntry const DynamicNameTable[] = { {PROC_NPC_CHIN, "d_a_npc_chin"}, {PROC_NPC_INS, "d_a_npc_ins"}, {PROC_NPC_SHOP0, "d_a_npc_shop0"}, + #if !PLATFORM_SHIELD {PROC_NPC_MK, "d_a_npc_mk"}, + #endif {PROC_NPC_P2, "d_a_npc_p2"}, {PROC_KYTAG00, "d_a_kytag00"}, + #if !PLATFORM_SHIELD {PROC_KYTAG01, "d_a_kytag01"}, + #endif {PROC_KYTAG02, "d_a_kytag02"}, {PROC_KYTAG03, "d_a_kytag03"}, {PROC_KYTAG04, "d_a_kytag04"}, @@ -709,11 +729,15 @@ static DynamicNameTableEntry const DynamicNameTable[] = { {PROC_DEMO00, "d_a_demo00"}, {PROC_TAG_CAMERA, "d_a_tag_camera"}, {PROC_TAG_CHKPOINT, "d_a_tag_chkpoint"}, + #if !PLATFORM_SHIELD {PROC_TAG_EVENT, "d_a_tag_event"}, + #endif {PROC_TAG_EVT, "d_a_tag_evt"}, {PROC_TAG_TELOP, "d_a_tag_telop"}, {PROC_TAG_HOWL, "d_a_tag_howl"}, + #if !PLATFORM_SHIELD {PROC_TAG_MSG, "d_a_tag_msg"}, + #endif {PROC_TAG_LANTERN, "d_a_tag_lantern"}, {PROC_Tag_Mist, "d_a_tag_mist"}, {PROC_DMIDNA, "d_a_dmidna"}, @@ -724,7 +748,9 @@ static DynamicNameTableEntry const DynamicNameTable[] = { {PROC_BG_OBJ, "d_a_bg_obj"}, {PROC_MIRROR, "d_a_mirror"}, {PROC_MOVIE_PLAYER, "d_a_movie_player"}, + #if !PLATFORM_SHIELD {PROC_TITLE, "d_a_title"}, + #endif {PROC_FR, "d_a_fr"}, {PROC_ECONT, "d_a_econt"}, {PROC_MG_ROD, "d_a_mg_rod"}, @@ -767,70 +793,134 @@ static DynamicNameTableEntry const DynamicNameTable[] = { {PROC_Obj_Timer, "d_a_obj_timer"}, {PROC_SCENE_EXIT, "d_a_scene_exit"}, {PROC_SUSPEND, "d_a_suspend"}, + #if !PLATFORM_SHIELD {PROC_GRASS, "d_a_grass"}, + #endif {0xFFFF, NULL}, }; /* 803F0F50-803F1BB0 01DC70 0C60+00 4/4 0/0 0/0 .bss DMC */ -static DynamicModuleControlBase* DMC[792]; +static DynamicModuleControlBase* DMC[PROC_MAX_NUM]; /* 80450CA8-80450CAC 0001A8 0004+00 1/1 0/0 0/0 .sbss None */ static bool DMC_initialized; +/* 80450CAC-80450CB0 0001AC 0004+00 2/2 0/0 0/0 .sbss cDyl_Initialized */ +static BOOL cDyl_Initialized; + /* 800183DC-80018544 012D1C 0168+00 1/1 0/0 0/0 .text cCc_Init__Fv */ -static int cCc_Init() { - JKRHeap* arcHeap = mDoExt_getArchiveHeap(); - JKRSolidHeap* heap = JKRSolidHeap::create(0x8820, arcHeap, false); - JKRHeap* prev = heap->becomeCurrentHeap(); +int cCc_Init() { + JUT_ASSERT(37, !DMC_initialized); + + #if PLATFORM_GCN + JKRHeap* parentHeap = mDoExt_getArchiveHeap(); + #else + JKRHeap* parentHeap = DynamicModuleControlBase::getHeap(); + #endif + u32 dmcHeapSize = sizeof(DynamicModuleControl) * PROC_MAX_NUM; + + JKRSolidHeap* dmcHeap = JKRCreateSolidHeap(dmcHeapSize, parentHeap, false); + JKRHeap* prevHeap = JKRSetCurrentHeap(dmcHeap); memset(&DMC, 0, sizeof(DMC)); - for (int i = 0; i < ARRAY_SIZEU(DynamicNameTable); i++) { - const DynamicNameTableEntry* d = &DynamicNameTable[i]; - if (d->name != NULL) { + for (int i = 0; i < ARRAY_SIZEU(DynamicNameTable); i++) { + const DynamicNameTableEntry& d = DynamicNameTable[i]; + + if (d.name != NULL) { + JUT_ASSERT(52, d.mKey < ARRAY_SIZEU(DMC)); + JUT_ASSERT(53, DMC[d.mKey] == NULL); + for (int j = 0; j < ARRAY_SIZEU(DMC); j++) { if (DMC[j] != NULL) { - if (!strcmp(d->name, DMC[j]->getModuleName())) { - DMC[d->mKey] = DMC[j]; + if (!strcmp(d.name, DMC[j]->getModuleName())) { + DMC[d.mKey] = DMC[j]; break; } } } - if (DMC[d->mKey] == NULL) { - DMC[d->mKey] = new DynamicModuleControl(d->name); + if (DMC[d.mKey] == NULL) { + DMC[d.mKey] = new DynamicModuleControl(d.name); } } } - heap->adjustSize(); - prev->becomeCurrentHeap(); + dmcHeap->adjustSize(); + JKRSetCurrentHeap(prevHeap); + + #if DEBUG + FixedMemoryCheck* check = FixedMemoryCheck::easyCreate(DMC, sizeof(DMC)); + #endif + DMC_initialized = true; return 1; } +BOOL cCc_Check() { + BOOL rt = TRUE; + for (int i = 0; i < ARRAY_SIZEU(DynamicNameTable); i++) { + uintptr_t ptr = (uintptr_t)DMC[i]; + if (ptr != NULL) { + u32 ptr_hi_byte = ptr >> 0x18; + if (ptr_hi_byte < 0x80 || ptr_hi_byte > 0x83) { + // "cCc_Check invalid pointer detected" + OS_REPORT_ERROR("cCc_Check ポインタ破壊を発見 %d %08x\n", i, ptr); + rt = FALSE; + } + } + } + + return rt; +} + +BOOL cDyl_IsInitialized() { + return cDyl_Initialized; +} + /* 80018544-8001857C 012E84 0038+00 0/0 1/1 0/0 .text cDyl_IsLinked__Fs */ BOOL cDyl_IsLinked(s16 i_ProfName) { - if (DMC[i_ProfName] != NULL) { - return DMC[i_ProfName]->isLinked(); + JUT_ASSERT(183, cDyl_Initialized); + + + DynamicModuleControlBase* d = DMC[i_ProfName]; + BOOL rt; + if (d != NULL) { + rt = d->isLinked(); + } else { + rt = TRUE; } - return true; + + return rt; } /* 8001857C-800185C0 012EBC 0044+00 1/1 1/1 0/0 .text cDyl_Unlink__Fs */ BOOL cDyl_Unlink(s16 i_ProfName) { - if (DMC[i_ProfName] != NULL) { - return DMC[i_ProfName]->unlink(); - } - return false; -} + #if DEBUG + cCc_Check(); + #endif -/* 80450CAC-80450CB0 0001AC 0004+00 2/2 0/0 0/0 .sbss cDyl_Initialized */ -static BOOL cDyl_Initialized; + JUT_ASSERT(206, cDyl_Initialized); + JUT_ASSERT(207, i_ProfName < ARRAY_SIZEU(DMC)); + + DynamicModuleControlBase* d = DMC[i_ProfName]; + if (d != NULL) { + return d->unlink(); + } + + return FALSE; +} /* 800185C0-80018688 012F00 00C8+00 1/1 1/1 0/0 .text cDyl_LinkASync__Fs */ int cDyl_LinkASync(s16 i_ProfName) { - if (cDyl_Initialized == false) { + #if DEBUG + cCc_Check(); + #endif + + JUT_ASSERT(266, DMC_initialized); + + if (!cDyl_Initialized) { + OS_REPORT_ERROR("初期化が終わってないのに呼んでもらっても困ります %d %s\n", i_ProfName, fpcDbSv_getNameString(i_ProfName)); return cPhs_INIT_e; } @@ -839,8 +929,12 @@ int cDyl_LinkASync(s16 i_ProfName) { return cPhs_ERROR_e; } + JUT_ASSERT(282, i_ProfName < ARRAY_SIZEU(DMC)); + DynamicModuleControlBase* d = DMC[i_ProfName]; if (d != NULL) { + JUT_ASSERT(286, cDyl_Initialized); + if (d->load_async()) { if (d->link()) { return cPhs_COMPLEATE_e; @@ -859,71 +953,85 @@ int cDyl_LinkASync(s16 i_ProfName) { /* 80018688-80018764 012FC8 00DC+00 1/1 0/0 0/0 .text cDyl_InitCallback__FPv */ static int cDyl_InitCallback(void* param_0) { - JKRExpHeap* heap = mDoExt_getArchiveHeap(); - JKRFileLoader* loader = JKRFileCache::mount("/", heap, NULL); + JUT_ASSERT(335, !cDyl_Initialized); + + #if PLATFORM_GCN + JKRHeap* parentHeap = mDoExt_getArchiveHeap(); + #else + JKRHeap* parentHeap = DynamicModuleControlBase::getHeap(); + #endif + + JKRFileCache* loader = JKRMountDvdDrive("/", parentHeap, NULL); DynamicModuleControl::initialize(); - void* strTbl = JKRFileLoader::getGlbResource("/dvd/str/Final/Release/frameworkF.str"); - JKRFileLoader::detachResource(strTbl, loader); - loader->unmount(); + #if PLATFORM_GCN + void* strTbl = JKRGetResource("/dvd/str/Final/Release/frameworkF.str"); + #elif PLATFORM_WII + void* strTbl = JKRGetResource("/dvd/str/Rfinal/Release/RframeworkF.str"); + #else + void* strTbl = JKRGetResource("/dvd/str/Final/Release/frameworkF.str"); + #endif + + JKRDetachResource(strTbl, loader); + JKRUnmountDvdDrive(loader); OSSetStringTable(strTbl); DynamicModuleControl dmc("f_pc_profile_lst"); dmc.link(); cDyl_Initialized = true; - fopScnM_CreateReq(PROC_LOGO_SCENE, 0x7FFF, 0, 0); + fopScnM_CreateReq(PROC_LOGO_SCENE, 0x7FFF, 0, 0); return 1; } -/* ############################################################################################## */ /* 80450CB0-80450CB8 0001B0 0004+04 2/2 0/0 0/0 .sbss cDyl_DVD */ static mDoDvdThd_callback_c* cDyl_DVD; /* 80018764-80018798 0130A4 0034+00 0/0 1/1 0/0 .text cDyl_InitAsync__Fv */ void cDyl_InitAsync() { cCc_Init(); + JUT_ASSERT(367, cDyl_DVD == NULL); cDyl_DVD = mDoDvdThd_callback_c::create((mDoDvdThd_callback_func)cDyl_InitCallback, NULL); } /* 80018798-80018804 0130D8 006C+00 0/0 2/1 0/0 .text cDyl_InitAsyncIsDone__Fv */ -int cDyl_InitAsyncIsDone() { +BOOL cDyl_InitAsyncIsDone() { if (cDyl_DVD == NULL) { - return 1; + return TRUE; } if (cDyl_DVD->sync()) { cDyl_DVD->destroy(); cDyl_DVD = NULL; - return 1; + return TRUE; } - return 0; + return FALSE; } /* 80018804-8001880C 013144 0008+00 1/0 0/0 0/0 .text phase_01__7cDylPhsFPv */ int cDylPhs::phase_01(void* param_0) { - return 2; + return cPhs_NEXT_e; } /* 8001880C-80018844 01314C 0038+00 1/0 0/0 0/0 .text phase_02__7cDylPhsFPs */ int cDylPhs::phase_02(s16* p_profName) { int ret = cDyl_LinkASync(*p_profName); - - if (ret != 4) { - return ret; + if (ret == cPhs_COMPLEATE_e) { + return cPhs_NEXT_e; } - return 2; + + return ret; } /* 80018844-8001884C 013184 0008+00 1/0 0/0 0/0 .text phase_03__7cDylPhsFPv */ int cDylPhs::phase_03(void* param_0) { - return 0; + return cPhs_INIT_e; } /* 8001884C-80018890 01318C 0044+00 0/0 2/2 0/0 .text * Link__7cDylPhsFP30request_of_phase_process_classs */ -int cDylPhs::Link(request_of_phase_process_class* i_phase, s16 param_1) { +int cDylPhs::Link(request_of_phase_process_class* i_phase, s16 i_ProfName) { static request_of_phase_process_fn l_method[3] = { (request_of_phase_process_fn)cDylPhs::phase_01, (request_of_phase_process_fn)cDylPhs::phase_02, @@ -934,20 +1042,19 @@ int cDylPhs::Link(request_of_phase_process_class* i_phase, s16 param_1) { return cPhs_COMPLEATE_e; } - return dComLbG_PhaseHandler(i_phase, l_method, ¶m_1); + return dComLbG_PhaseHandler(i_phase, l_method, &i_ProfName); } /* 80018890-800188DC 0131D0 004C+00 0/0 1/1 0/0 .text * Unlink__7cDylPhsFP30request_of_phase_process_classs */ int cDylPhs::Unlink(request_of_phase_process_class* i_phase, s16 i_ProfName) { - int ret; + JUT_ASSERT(460, i_phase->id != cPhs_LOADING_e); if (i_phase->id == cPhs_NEXT_e) { - ret = cDyl_Unlink(i_ProfName); + int ret = cDyl_Unlink(i_ProfName); i_phase->id = cPhs_INIT_e; - } else { - ret = 0; + return ret; } - return ret; + return 0; } diff --git a/src/d/actor/d_a_alink_kandelaar.inc b/src/d/actor/d_a_alink_kandelaar.inc index afea666b31..0a24d7516c 100644 --- a/src/d/actor/d_a_alink_kandelaar.inc +++ b/src/d/actor/d_a_alink_kandelaar.inc @@ -207,7 +207,7 @@ void daAlink_c::preKandelaarDraw() { var_f3 = 0.0f; } - if (proj.x > 0.0f && proj.x < 608.0f && proj.y > var_f3 && proj.y < 448.0f - var_f3) { + if (proj.x > 0.0f && proj.x < FB_WIDTH && proj.y > var_f3 && proj.y < FB_HEIGHT - var_f3) { dComIfGd_peekZ(proj.x, proj.y, &field_0x32c8); } else { field_0x32c8 = 0; diff --git a/src/d/actor/d_a_balloon_2D.cpp b/src/d/actor/d_a_balloon_2D.cpp index c177fb2230..6a49136da8 100644 --- a/src/d/actor/d_a_balloon_2D.cpp +++ b/src/d/actor/d_a_balloon_2D.cpp @@ -567,7 +567,7 @@ void daBalloon2D_c::setHIO(bool param_1) { field_0x5a0->paneTrans(l_HOSTIO.m.mBalloonSmallPosX, l_HOSTIO.m.mBalloonSmallPosY); field_0x5a0->scale(l_HOSTIO.m.mBalloonSmallSize, l_HOSTIO.m.mBalloonSmallSize); field_0x5a0->setAlphaRate(l_HOSTIO.m.mBalloonSmallAlpha * mAllAlpha); -#if DEBUG +#if WIDESCREEN_SUPPORT if (mDoGph_gInf_c::isWide()) { field_0x5a4->paneTrans(l_HOSTIO.m.m2DNumberCombo2PosX, l_HOSTIO.m.m2DNumberCombo2PosY); } else { diff --git a/src/d/actor/d_a_e_fk.cpp b/src/d/actor/d_a_e_fk.cpp index 9fa0e46915..38c369b538 100644 --- a/src/d/actor/d_a_e_fk.cpp +++ b/src/d/actor/d_a_e_fk.cpp @@ -466,7 +466,7 @@ void daE_FK_c::DamageAction() { bool daE_FK_c::checkViewArea() { Vec proj; mDoLib_project(¤t.pos, &proj); - return (proj.x >= 0.0f && proj.x <= 608.0f) && (proj.y >= 0.0f && proj.y <= 448.0f); + return (proj.x >= 0.0f && proj.x <= FB_WIDTH) && (proj.y >= 0.0f && proj.y <= FB_HEIGHT); } namespace { diff --git a/src/d/actor/d_a_e_fs.cpp b/src/d/actor/d_a_e_fs.cpp index d8582fb900..d5b8edaaa8 100644 --- a/src/d/actor/d_a_e_fs.cpp +++ b/src/d/actor/d_a_e_fs.cpp @@ -480,7 +480,7 @@ static bool checkViewArea(cXyz* i_pos) { Vec proj; mDoLib_project(i_pos, &proj); bool ret = false; - if (proj.x >= 0.0f && proj.x <= 608.0f && proj.y >= 0.0f && proj.y <= 448.0f) { + if (proj.x >= 0.0f && proj.x <= FB_WIDTH && proj.y >= 0.0f && proj.y <= FB_HEIGHT) { ret = true; } return ret; diff --git a/src/d/actor/d_a_e_sm.cpp b/src/d/actor/d_a_e_sm.cpp index cdd670aefb..18125a1db4 100644 --- a/src/d/actor/d_a_e_sm.cpp +++ b/src/d/actor/d_a_e_sm.cpp @@ -1394,7 +1394,7 @@ bool daE_SM_c::CheckViewArea() { mDoLib_project(¤t.pos, &vec); bool rv = false; - if (vec.x >= 0.0f && vec.x <= 608.0f && vec.y >= 0.0f && vec.y <= 448.0f) { + if (vec.x >= 0.0f && vec.x <= FB_WIDTH && vec.y >= 0.0f && vec.y <= FB_HEIGHT) { rv = true; } diff --git a/src/d/actor/d_a_mg_fshop.cpp b/src/d/actor/d_a_mg_fshop.cpp index 8b0c6f5980..7e94d1bbf6 100644 --- a/src/d/actor/d_a_mg_fshop.cpp +++ b/src/d/actor/d_a_mg_fshop.cpp @@ -6,57 +6,62 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_mg_fshop.h" -#include "JSystem/J3DGraphBase/J3DMaterial.h" #include "d/actor/d_a_npc_henna.h" +#include "d/actor/d_a_mg_rod.h" #include "d/actor/d_a_player.h" -#include "d/d_bg_w.h" -#include "d/d_kankyo.h" -#include "f_op/f_op_actor_mng.h" #include "f_op/f_op_camera_mng.h" #include "d/d_timer.h" -#include "dol2asm.h" -#include "m_Do/m_Do_controller_pad.h" -#include "SSystem/SComponent/c_math.h" +#include "d/d_s_play.h" #include "Z2AudioLib/Z2Instances.h" /* 8086C06C-8086C08C 0000EC 0020+00 1/1 0/0 0/0 .text * ride_call_back__FP4dBgWP10fopAc_ac_cP10fopAc_ac_c */ -static void ride_call_back(dBgW* param_0, fopAc_ac_c* param_1, fopAc_ac_c* param_2) { - if (param_2->field_0x567 == 0) { - param_2->field_0x567 = 1; - ((fshop_class*)param_2)->field_0x428c = 0; +static void ride_call_back(dBgW* i_bgw, fopAc_ac_c* i_bgActor, fopAc_ac_c* i_rideActor) { + if (i_rideActor->field_0x567 == 0) { + i_rideActor->field_0x567 = 1; + ((fshop_class*)i_rideActor)->field_0x428c = 0; } } /* 8086C08C-8086C140 00010C 00B4+00 1/1 0/0 0/0 .text Reel_CallBack__FP8J3DJointi */ -static int Reel_CallBack(J3DJoint* param_0, int param_1) { +static int Reel_CallBack(J3DJoint* i_joint, int param_1) { + s32 userarea; + J3DJoint* var_r27; + if (param_1 == 0) { - u16 uVar1 = param_0->getJntNo(); + var_r27 = i_joint; + int jnt_no = var_r27->getJntNo(); J3DModel* model = j3dSys.getModel(); - s32 iVar2 = model->getUserArea(); - MTXCopy(model->getAnmMtx(uVar1), (MtxP)calc_mtx); - cMtx_XrotM((MtxP)calc_mtx, (int)*(short*)(iVar2 + 0x58)); - model->setAnmMtx(uVar1, (MtxP)calc_mtx); - PSMTXCopy((MtxP)calc_mtx, (MtxP) J3DSys::mCurrentMtx); + userarea = model->getUserArea(); + MTXCopy(model->getAnmMtx(jnt_no), *calc_mtx); + cMtx_XrotM(*calc_mtx, *(s16*)(userarea + 0x58)); // fakematch, unknown type for userarea + model->setAnmMtx(jnt_no, *calc_mtx); + MTXCopy(*calc_mtx, J3DSys::mCurrentMtx); } + return 1; } /* 8086C140-8086C214 0001C0 00D4+00 1/1 0/0 0/0 .text frog_CallBack__FP8J3DJointi */ -static int frog_CallBack(J3DJoint* param_0, int param_1) { +static int frog_CallBack(J3DJoint* i_joint, int param_1) { + int userarea; + J3DJoint* var_r27; + if (param_1 == 0) { - s32 sVar2 = param_0->getJntNo(); + var_r27 = i_joint; + int jnt_no = var_r27->getJntNo(); J3DModel* model = j3dSys.getModel(); - model->getUserArea(); - if (sVar2 == 1) { - MtxP uVar1 = model->getAnmMtx(sVar2); - MTXCopy(uVar1, (MtxP)calc_mtx); - cMtx_YrotM((MtxP)calc_mtx, -8800); - MtxScale(2.0f, 1.0f, 1.5f, 1); - model->setAnmMtx(sVar2, (MtxP)calc_mtx); - MTXCopy((MtxP)calc_mtx, (MtxP)J3DSys::mCurrentMtx); + userarea = model->getUserArea(); // unknown type + + if (jnt_no == 1) { + MTXCopy(model->getAnmMtx(jnt_no), *calc_mtx); + cMtx_YrotM(*calc_mtx, JREG_S(7) + -8800); + MtxScale(JREG_F(10) + 2.0f, JREG_F(11) + 1.0f, JREG_F(12) + 1.5f, 1); + model->setAnmMtx(jnt_no, *calc_mtx); + MTXCopy(*calc_mtx, J3DSys::mCurrentMtx); } } + return 1; } @@ -70,19 +75,23 @@ static cXyz BallEndPos; static J3DModel* ArcIX_A_crwaku_model[1]; /* 8086C214-8086C310 000294 00FC+00 1/1 0/0 0/0 .text koro2_draw__FP11fshop_class */ -static void koro2_draw(fshop_class* param_1) { +static void koro2_draw(fshop_class* i_this) { + fopAc_ac_c* actor = &i_this->actor; - if (param_1->scale.x > 5.0f) { + if (actor->scale.x > 5.0f) { dComIfGd_setListBG(); } - g_env_light.setLightTevColorType_MAJI(ArcIX_A_crwaku_model[0], ¶m_1->tevStr); + + g_env_light.setLightTevColorType_MAJI(ArcIX_A_crwaku_model[0], &actor->tevStr); mDoExt_modelUpdateDL(ArcIX_A_crwaku_model[0]); - for (s32 iVar1 = 0; iVar1 < ARRAY_SIZE(param_1->mKoro2); iVar1++) { - if (param_1->mKoro2[iVar1].mpModel != NULL) { - g_env_light.setLightTevColorType_MAJI(param_1->mKoro2[iVar1].mpModel, ¶m_1->tevStr); - mDoExt_modelUpdateDL(param_1->mKoro2[iVar1].mpModel); + + for (int i = 0; i < ARRAY_SIZE(i_this->mKoro2); i++) { + if (i_this->mKoro2[i].mpModel != NULL) { + g_env_light.setLightTevColorType_MAJI(i_this->mKoro2[i].mpModel, &actor->tevStr); + mDoExt_modelUpdateDL(i_this->mKoro2[i].mpModel); } } + dComIfGd_setList(); } @@ -983,91 +992,94 @@ static J3DModel* ArcIX_A_crcurve_b_model[4]; static J3DModel* ArcIX_A_crsaka_model[8]; /* 80870704-8087071C -00001 0018+00 0/1 0/0 0/0 .data koro2_union_model */ -static void* koro2_union_model[6] = { - (void*)&ArcIX_A_crstart_model, (void*)&ArcIX_A_crgoal_model, (void*)&ArcIX_A_crbox_model, - (void*)&ArcIX_A_crcurve_a_model, (void*)&ArcIX_A_crcurve_b_model, (void*)&ArcIX_A_crsaka_model, -}; - -/* 8087071C-80870728 000498 000C+00 1/1 0/0 0/0 .data rod_color$3900 */ -static GXColor rod_color[3] = { - {0x96, 0x50, 0x14, 0xFF}, {0x64, 0x96, 0x14, 0xFF}, {0x96, 0x14, 0x14, 0xFF}, -}; - -/* 80870728-8087072C 0004A4 0004+00 1/1 0/0 0/0 .data l_color$3912 */ -static GXColor l_color = { - 0x32, - 0x64, - 0x1E, - 0xFF, +static J3DModel** koro2_union_model[6] = { + ArcIX_A_crstart_model, ArcIX_A_crgoal_model, ArcIX_A_crbox_model, + ArcIX_A_crcurve_a_model, ArcIX_A_crcurve_b_model, ArcIX_A_crsaka_model, }; /* 8086C310-8086C6E4 000390 03D4+00 1/0 0/0 0/0 .text daFshop_Draw__FP11fshop_class */ -// NONMATCHING regalloc -static int daFshop_Draw(fshop_class* param_0) { - g_env_light.settingTevStruct(0x10, ¶m_0->current.pos, ¶m_0->tevStr); +static int daFshop_Draw(fshop_class* i_this) { + fopAc_ac_c* actor = &i_this->actor; + g_env_light.settingTevStruct(0x10, &actor->current.pos, &actor->tevStr); - if (param_0->field_0x4070 != NULL) { - g_env_light.setLightTevColorType_MAJI(param_0->field_0x4070, ¶m_0->tevStr); - param_0->field_0x4070->getModelData()->getMaterialNodePointer(0)->getTevKColor(1)->r = 0; - mDoExt_modelUpdateDL(param_0->field_0x4070); + if (i_this->field_0x4070 != NULL) { + g_env_light.setLightTevColorType_MAJI(i_this->field_0x4070, &actor->tevStr); + + J3DMaterial* sp1C = i_this->field_0x4070->getModelData()->getMaterialNodePointer(0); + sp1C->getTevKColor(1)->r = 0; + + mDoExt_modelUpdateDL(i_this->field_0x4070); dComIfGd_setSimpleShadow( - ¶m_0->current.pos, param_0->field_0x40b4.GetGroundH(), 66.6f * param_0->scale.x, - param_0->field_0x40b4.m_gnd, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); + &actor->current.pos, i_this->field_0x40b4.GetGroundH(), (TREG_F(8) + 66.6f) * actor->scale.x, + i_this->field_0x40b4.m_gnd, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); return 1; } - if (param_0->field_0x400e != 0) { - if (param_0->field_0x400d == 0) { - koro2_draw(param_0); - param_0->field_0x400d = 1; + if (i_this->field_0x400e != 0) { + if (i_this->field_0x400d == 0) { + koro2_draw(i_this); + i_this->field_0x400d = 1; } return 1; } - int cVar11 = fopAcM_GetRoomNo(param_0); - camera_class* camera = dComIfGp_getCamera(0); + int roomNo = fopAcM_GetRoomNo(actor); + camera_class* camera = (camera_class*)dComIfGp_getCamera(0); - for (int iVar12 = 0; iVar12 < 48; iVar12++) { - f32 fVar4 = param_0->mLure[iVar12].field_0x00.x - camera->lookat.eye.x; - f32 fVar5 = param_0->mLure[iVar12].field_0x00.z - camera->lookat.eye.z; - if (fVar4 * fVar4 + fVar5 * fVar5 > 1200.0f) { - g_env_light.setLightTevColorType_MAJI(param_0->mLure[iVar12].field_0x14, ¶m_0->tevStr); - mDoExt_modelUpdateDL(param_0->mLure[iVar12].field_0x14); - if (param_0->mLure[iVar12].field_0x24 != 3) { - for (int local_50 = 0; local_50 < 2; local_50++) { - dComIfGp_entrySimpleModel(param_0->mLure[iVar12].field_0x18[local_50], cVar11); + for (int i = 0; i < 48; i++) { + f32 fVar4 = i_this->mLure[i].field_0x00.x - camera->lookat.eye.x; + f32 fVar5 = i_this->mLure[i].field_0x00.z - camera->lookat.eye.z; + if (SQUARE(fVar4) + SQUARE(fVar5) > KREG_F(11) + 1200.0f) { + g_env_light.setLightTevColorType_MAJI(i_this->mLure[i].field_0x14, &actor->tevStr); + mDoExt_modelUpdateDL(i_this->mLure[i].field_0x14); + + if (i_this->mLure[i].field_0x24 != 3) { + for (int j = 0; j < 2; j++) { + dComIfGp_entrySimpleModel(i_this->mLure[i].field_0x18[j], roomNo); } } } } - for (int iVar9 = 0; iVar9 < 3; iVar9++) { - g_env_light.setLightTevColorType_MAJI(param_0->mRod[iVar9].field_0x14, ¶m_0->tevStr); - mDoExt_modelUpdateDL(param_0->mRod[iVar9].field_0x14); - param_0->mRod[iVar9].line_mat.update(8, rod_color[iVar9], ¶m_0->tevStr); - dComIfGd_set3DlineMat(¶m_0->mRod[iVar9].line_mat); - for (int local_54 = 0; local_54 < 6; local_54++) { - dComIfGp_entrySimpleModel(param_0->mRod[iVar9].field_0x18[local_54], cVar11); + for (int i = 0; i < 3; i++) { + g_env_light.setLightTevColorType_MAJI(i_this->mRod[i].field_0x14, &actor->tevStr); + mDoExt_modelUpdateDL(i_this->mRod[i].field_0x14); + + static GXColor rod_color[3] = { + {0x96, 0x50, 0x14, 0xFF}, + {0x64, 0x96, 0x14, 0xFF}, + {0x96, 0x14, 0x14, 0xFF}, + }; + i_this->mRod[i].line_mat.update(8, rod_color[i], &actor->tevStr); + dComIfGd_set3DlineMat(&i_this->mRod[i].line_mat); + + for (int j = 0; j < 6; j++) { + dComIfGp_entrySimpleModel(i_this->mRod[i].field_0x18[j], roomNo); } } - for (int local_58 = 0; local_58 < 2; local_58++) { - g_env_light.setLightTevColorType_MAJI(param_0->mTsubo[local_58].field_0x14, ¶m_0->tevStr); - mDoExt_modelUpdateDL(param_0->mTsubo[local_58].field_0x14); + + for (int i = 0; i < 2; i++) { + g_env_light.setLightTevColorType_MAJI(i_this->mTsubo[i].field_0x14, &actor->tevStr); + mDoExt_modelUpdateDL(i_this->mTsubo[i].field_0x14); } - param_0->field_0x3f88.update(0xf, 1.2f, l_color, 2, ¶m_0->tevStr); - dComIfGd_set3DlineMat(¶m_0->field_0x3f88); - g_env_light.setLightTevColorType_MAJI(param_0->field_0x6b30, ¶m_0->tevStr); - mDoExt_modelUpdateDL(param_0->field_0x6b30); - g_env_light.setLightTevColorType_MAJI(param_0->field_0x3ff4, ¶m_0->tevStr); - mDoExt_modelUpdateDL(param_0->field_0x3ff4); - if (param_0->field_0x4004 != NULL) { + static GXColor l_color = {0x32, 0x64, 0x1E, 0xFF}; + i_this->field_0x3f88.update(15, TREG_F(11) + 1.2f, l_color, 2, &actor->tevStr); + dComIfGd_set3DlineMat(&i_this->field_0x3f88); + + g_env_light.setLightTevColorType_MAJI(i_this->field_0x6b30, &actor->tevStr); + mDoExt_modelUpdateDL(i_this->field_0x6b30); + + g_env_light.setLightTevColorType_MAJI(i_this->field_0x3ff4, &actor->tevStr); + mDoExt_modelUpdateDL(i_this->field_0x3ff4); + + if (i_this->field_0x4004 != NULL) { mDoMtx_stack_c::transS(0.0f, 0.0f, 0.0f); - MtxP pfVar10 = mDoMtx_stack_c::get(); - param_0->field_0x4004->setBaseTRMtx(pfVar10); - g_env_light.setLightTevColorType_MAJI(param_0->field_0x4004, ¶m_0->tevStr); - mDoExt_modelUpdateDL(param_0->field_0x4004); + i_this->field_0x4004->setBaseTRMtx(mDoMtx_stack_c::get()); + g_env_light.setLightTevColorType_MAJI(i_this->field_0x4004, &actor->tevStr); + mDoExt_modelUpdateDL(i_this->field_0x4004); } + return 1; } @@ -1097,9 +1109,10 @@ static f32 hook_2_offy[3] = { }; /* 8086C6E4-8086C9D0 000764 02EC+00 1/1 0/0 0/0 .text lure_set__FP11fshop_class */ -static void lure_set(fshop_class* param_0) { +static void lure_set(fshop_class* i_this) { static f32 lure_ofy[3] = {-12.0f, -10.0f, -14.0f}; - fs_lure_s* pLure = param_0->mLure; + fs_lure_s* pLure = i_this->mLure; + for (int i = 0; i < 48; i++, pLure++) { if (daPy_getPlayerActorClass()->checkFrontRollCrash()) { pLure->field_0x34 = cM_rndF(65536.0f); @@ -1107,12 +1120,15 @@ static void lure_set(fshop_class* param_0) { pLure->field_0x38 = cM_rndF(1000.0f) + 500.0f; pLure->field_0x3c = cM_rndF(1000.0f) + 500.0f; } + pLure->field_0x34 += 4000; pLure->field_0x36 += 4000; pLure->field_0x32 = pLure->field_0x3c * cM_ssin(pLure->field_0x36); pLure->field_0x30 = pLure->field_0x38 * cM_ssin(pLure->field_0x34); + cLib_addCalc0(&pLure->field_0x3c, 1.0f, 40.0f); cLib_addCalc0(&pLure->field_0x38, 1.0f, 40.0f); + f32 fVar1 = 0.0f; f32 fVar2; if (pLure->field_0x24 != 3) { @@ -1121,6 +1137,7 @@ static void lure_set(fshop_class* param_0) { } else { fVar2 = 12.0f; } + mDoMtx_stack_c::transS( pLure->field_0x00.x, pLure->field_0x00.y + fVar1, @@ -1135,6 +1152,7 @@ static void lure_set(fshop_class* param_0) { mDoMtx_stack_c::scaleM(pLure->field_0x2c, pLure->field_0x2c, pLure->field_0x28); mDoMtx_stack_c::transM(0.0f, 0.0f, 0.0f); pLure->field_0x14->setBaseTRMtx(mDoMtx_stack_c::get()); + if (pLure->field_0x24 != 3) { mDoMtx_stack_c::push(); mDoMtx_stack_c::transM(0.0f, hook_1_offy[pLure->field_0x24], 1.0f); @@ -1150,9 +1168,10 @@ static void lure_set(fshop_class* param_0) { } /* 8086C9D0-8086CC30 000A50 0260+00 1/1 0/0 0/0 .text rod_set__FP11fshop_class */ -static void rod_set(fshop_class* param_0) { - fs_rod_s* pRod = param_0->mRod; - for (s32 i = 0; i < 3; i++, pRod++) { +static void rod_set(fshop_class* i_this) { + fs_rod_s* pRod = i_this->mRod; + + for (int i = 0; i < 3; i++, pRod++) { mDoMtx_stack_c::transS(pRod->field_0x00.x, pRod->field_0x00.y, pRod->field_0x00.z); if (i == 0) { mDoMtx_stack_c::YrotM(-12000.0f); @@ -1164,6 +1183,7 @@ static void rod_set(fshop_class* param_0) { mDoMtx_stack_c::XrotM(1300); mDoMtx_stack_c::YrotM(0); pRod->field_0x14->setBaseTRMtx(mDoMtx_stack_c::get()); + cXyz* local_64 = pRod->line_mat.getPos(0); if (pRod->field_0x4c == 0) { mDoMtx_stack_c::transM(0.0f, 15.0f, 0.0f); @@ -1174,11 +1194,11 @@ static void rod_set(fshop_class* param_0) { cXyz cStack_1c; cXyz cStack_28; cXyz local_34; - for (s32 local_68 = 0; local_68 < 8; local_68++) { + for (int j = 0; j < 8; j++) { mDoMtx_stack_c::multVecZero(local_64); - if (local_68 == 0) { + if (j == 0) { cStack_1c = *local_64; - } else if (local_68 == 7) { + } else if (j == 7) { cStack_28 = *local_64; } mDoMtx_stack_c::transM(0.0f, pRod->field_0x54, 0.0f); @@ -1187,33 +1207,35 @@ static void rod_set(fshop_class* param_0) { static f32 guide_p[6] = {0.0f, 0.1f, 0.22f, 0.36f, 0.52f, 0.7f}; static f32 guide_s[6] = {0.5f, 0.5f, 0.55f, 0.6f, 0.65f, 0.8f}; - for (s32 local_6c = 0; local_6c < 6; local_6c++) { - cXyz local_34 = cStack_28 + (cStack_1c - cStack_28) * guide_p[local_6c]; + for (int j = 0; j < 6; j++) { + cXyz local_34 = cStack_28 + (cStack_1c - cStack_28) * guide_p[j]; mDoMtx_stack_c::transS(local_34.x, local_34.y, local_34.z); - mDoMtx_stack_c::scaleM(guide_s[local_6c], guide_s[local_6c], guide_s[local_6c]); + mDoMtx_stack_c::scaleM(guide_s[j], guide_s[j], guide_s[j]); mDoMtx_stack_c::transM(0.0f, 4.0f, 0.0f); mDoMtx_stack_c::YrotM(0x4000); - pRod->field_0x18[local_6c]->setBaseTRMtx(mDoMtx_stack_c::get()); + pRod->field_0x18[j]->setBaseTRMtx(mDoMtx_stack_c::get()); } } } /* 8086CC6C-8086CD70 000CEC 0104+00 1/1 0/0 0/0 .text s_fish_sub__FPvPv */ -static void* s_fish_sub(void* param_0, void* param_1) { - fopAc_ac_c* actor = (fopAc_ac_c*)param_0; - fs_weed_s* weed = (fs_weed_s*)param_1; - if (fopAcM_IsActor(param_0) && fopAcM_GetName(param_0) == PROC_MG_FISH && actor->speedF > 0.1f) { - f32 dVar9 = actor->current.pos.x - weed->field_0x00[0].x; - f32 dVar8 = actor->current.pos.y - weed->field_0x00[0].y; - f32 dVar10 = actor->current.pos.z - weed->field_0x00[0].z; - f32 dVar3 = ((f32*)actor)[0x16F]; +static void* s_fish_sub(void* i_actor, void* i_data) { + mg_fish_class* fish = (mg_fish_class*)i_actor; + fs_weed_s* weed = (fs_weed_s*)i_data; + + if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_MG_FISH && fish->actor.speedF > 0.1f) { + f32 x_dist = fish->actor.current.pos.x - weed->field_0x00[0].x; + f32 y_dist = fish->actor.current.pos.y - weed->field_0x00[0].y; + f32 z_dist = fish->actor.current.pos.z - weed->field_0x00[0].z; + + f32 dVar3 = fish->mJointScale; if (dVar3 > 0.7f) { dVar3 = 0.7f; } - if (fabsf(dVar8) < 60.0f * weed->field_0xb4 && - JMAFastSqrt(((dVar9 * dVar9) + (dVar10 * dVar10))) < dVar3 * 35.0f){ + + if (fabsf(y_dist) < 60.0f * weed->field_0xb4 && JMAFastSqrt(SQUARE(x_dist) + SQUARE(z_dist)) < dVar3 * 35.0f) { cLib_addCalc2(&weed->field_0xb8, dVar3, 0.1f, 0.05f); - return (fopAc_ac_c*)param_0; + return i_actor; } } @@ -1221,132 +1243,148 @@ static void* s_fish_sub(void* param_0, void* param_1) { } /* 8086CD70-8086CF8C 000DF0 021C+00 1/1 0/0 0/0 .text tsubo_set__FP11fshop_class */ -static void tsubo_set(fshop_class* param_1) { +static void tsubo_set(fshop_class* i_this) { fopAc_ac_c* pfVar5 = dComIfGp_getPlayer(0); - fs_tsubo_s* pTsubo = param_1->mTsubo; + fs_tsubo_s* pTsubo = i_this->mTsubo; + cXyz local_40; s16 xrot; s16 zrot; - for (s32 local_48 = 0; local_48 < 2; local_48++, pTsubo++) { + for (int i = 0; i < 2; i++, pTsubo++) { local_40.x = pTsubo->field_0x00.x - pfVar5->current.pos.x; local_40.z = pTsubo->field_0x00.z - pfVar5->current.pos.z; - if (daPy_getPlayerActorClass()->checkFrontRollCrash() && - JMAFastSqrt((local_40.x * local_40.x + local_40.z * local_40.z)) < 150.0f) - { - if (local_48 == 0) { + if (daPy_getPlayerActorClass()->checkFrontRollCrash() && JMAFastSqrt(SQUARE(local_40.x) + SQUARE(local_40.z)) < 150.0f) { + if (i == 0) { pTsubo->field_0x1c = 1200.0f; - pTsubo->field_0x24 = 0x708; + pTsubo->field_0x24 = 1800; } else { pTsubo->field_0x1c = 1800.0f; - pTsubo->field_0x24 = 0xaf0; + pTsubo->field_0x24 = 2800; } pTsubo->field_0x20 = cM_rndF(65536.0f); pTsubo->field_0x22 = cM_rndF(65536.0f); + npc_henna_class* henna = (npc_henna_class*)fopAcM_SearchByName(PROC_NPC_HENNA); if (henna != NULL) { - henna->field_0x7b5 = 0x3c; + henna->field_0x7b5 = 60; } } + xrot = cM_ssin(pTsubo->field_0x20) * pTsubo->field_0x1c; zrot = cM_ssin(pTsubo->field_0x22) * pTsubo->field_0x1c; pTsubo->field_0x20 += pTsubo->field_0x24; pTsubo->field_0x22 += pTsubo->field_0x24 + 700; cLib_addCalcAngleS2(&pTsubo->field_0x24, 9000, 1, 200); + mDoMtx_stack_c::transS(pTsubo->field_0x00.x, pTsubo->field_0x00.y, pTsubo->field_0x00.z); mDoMtx_stack_c::XrotM(xrot); mDoMtx_stack_c::ZrotM(zrot); mDoMtx_stack_c::scaleM(1.0f, 1.0f, 1.0f); pTsubo->field_0x14->setBaseTRMtx(mDoMtx_stack_c::get()); + cLib_addCalc0(&pTsubo->field_0x1c, 1.0f, 50.0f); } } /* 8086CF8C-8086D1A0 00100C 0214+00 1/1 0/0 0/0 .text weed_control__FP11fshop_classP9fs_weed_s */ -static void weed_control(fshop_class* param_1, fs_weed_s* param_2) { - int iVar6; +static void weed_control(fshop_class* i_this, fs_weed_s* i_weed) { + int i; cXyz local_84; cXyz local_90; - cXyz* pfVar7 = param_2->field_0x00 + 1; + cXyz* pfVar7 = i_weed->field_0x00 + 1; + local_84.x = 0.0f; local_84.y = 0.0f; - local_84.z = param_2->field_0xb4 * 5.0f; - f32 dVar11 = param_2->field_0xb8 + 0.5f; - param_2->field_0xbc += (s16)(param_2->field_0xb8 * 600.0f + 200.0f); - cLib_addCalc0(¶m_2->field_0xb8, 0.05f, 0.02f); - for (iVar6 = 1; iVar6 < 0xf; iVar6++, pfVar7++) { - f32 dVar10 = dVar11 * cM_ssin(param_2->field_0xbc + iVar6 * -5000); - f32 dVar8 = cM_ssin(param_2->field_0xbc + iVar6 * -5500); - f32 dVar4 = dVar10 + (pfVar7[0].x - pfVar7[0 - 1].x); - f32 dVar12 = (pfVar7[0].y - pfVar7[0 - 1].y) + 3.0f; - f32 dVar6 = dVar11 * dVar8 + (pfVar7[0].z - pfVar7[0 - 1].z); - mDoMtx_XrotS((MtxP)calc_mtx, -cM_atan2s(dVar12, dVar6)); - mDoMtx_YrotM((MtxP)calc_mtx, (s32)cM_atan2s(dVar4, JMAFastSqrt(dVar12 * dVar12 + dVar6 * dVar6))); + local_84.z = i_weed->field_0xb4 * 5.0f; + + f32 dVar11 = i_weed->field_0xb8 + 0.5f; + i_weed->field_0xbc += (s16)(i_weed->field_0xb8 * 600.0f + 200.0f); + cLib_addCalc0(&i_weed->field_0xb8, 0.05f, 0.02f); + + for (i = 1; i < 15; i++, pfVar7++) { + f32 dVar10 = dVar11 * cM_ssin(i_weed->field_0xbc + i * -5000); + f32 dVar8 = cM_ssin(i_weed->field_0xbc + i * -5500); + f32 dVar4 = dVar10 + (pfVar7[0].x - pfVar7[-1].x); + f32 dVar12 = (pfVar7[0].y - pfVar7[-1].y) + 3.0f; + f32 dVar6 = dVar11 * dVar8 + (pfVar7[0].z - pfVar7[-1].z); + cMtx_XrotS(*calc_mtx, -cM_atan2s(dVar12, dVar6)); + cMtx_YrotM(*calc_mtx, (s16)cM_atan2s(dVar4, JMAFastSqrt(SQUARE(dVar12) + SQUARE(dVar6)))); MtxPosition(&local_84, &local_90); - pfVar7[0].x = pfVar7[0 - 1].x + local_90.x; - pfVar7[0].y = pfVar7[0 - 1].y + local_90.y; - pfVar7[0].z = pfVar7[0 - 1].z + local_90.z; + + pfVar7[0].x = pfVar7[-1].x + local_90.x; + pfVar7[0].y = pfVar7[-1].y + local_90.y; + pfVar7[0].z = pfVar7[-1].z + local_90.z; } } /* 8086D1A0-8086D1EC 001220 004C+00 1/1 0/0 0/0 .text stage_copy__FP11fshop_classP11fshop_class */ -static void stage_copy(fshop_class* param_0, fshop_class* param_1) { - param_0->field_0x4014 = param_1->field_0x4014; - param_0->field_0x4020 = param_1->field_0x4020; - param_0->scale = param_1->scale; +static void stage_copy(fshop_class* i_dst, fshop_class* i_src) { + i_dst->field_0x4014 = i_src->field_0x4014; + i_dst->field_0x4020 = i_src->field_0x4020; + i_dst->actor.scale = i_src->actor.scale; } /* 8086D1EC-8086D48C 00126C 02A0+00 1/1 0/0 0/0 .text koro2_mtx_set__FP11fshop_class */ -// NONMATCHING float load order -static void koro2_mtx_set(fshop_class* param_1) { +static void koro2_mtx_set(fshop_class* i_this) { + fopAc_ac_c* actor = &i_this->actor; + cXyz cStack_44; cXyz cStack_50; - if (param_1->field_0x400d) { + if (i_this->field_0x400d) { mDoMtx_stack_c::transS(0.0f, -10000.0f, 0.0f); - MTXCopy(mDoMtx_stack_c::get(), param_1->field_0x4030); - param_1->field_0x402c->Move(); - for (int local_58 = 0; local_58 < 100; local_58++) { - fs_koro2_s* pmVar4 = ¶m_1->mKoro2[local_58]; - if (param_1->mKoro2[local_58].mpModel != NULL) { - MTXCopy(mDoMtx_stack_c::get(), param_1->mKoro2[local_58].field_0x04); - param_1->mKoro2[local_58].mpBgW->Move(); + MTXCopy(mDoMtx_stack_c::get(), i_this->field_0x4030); + i_this->field_0x402c->Move(); + + for (int i = 0; i < 100; i++) { + if (i_this->mKoro2[i].mpModel != NULL) { + MTXCopy(mDoMtx_stack_c::get(), i_this->mKoro2[i].field_0x04); + i_this->mKoro2[i].mpBgW->Move(); } } } else { - mDoMtx_stack_c::transS(param_1->field_0x4014.x, param_1->field_0x4014.y, param_1->field_0x4014.z); - mDoMtx_stack_c::YrotM(param_1->field_0x4020.y); - mDoMtx_stack_c::XrotM(param_1->field_0x4020.x); - mDoMtx_stack_c::ZrotM(param_1->field_0x4020.z); - mDoMtx_stack_c::scaleM(param_1->scale.x, param_1->scale.x, param_1->scale.x); + mDoMtx_stack_c::transS(i_this->field_0x4014.x, i_this->field_0x4014.y, i_this->field_0x4014.z); + mDoMtx_stack_c::YrotM(i_this->field_0x4020.y); + mDoMtx_stack_c::XrotM(i_this->field_0x4020.x); + mDoMtx_stack_c::ZrotM(i_this->field_0x4020.z); + mDoMtx_stack_c::scaleM(actor->scale.x, actor->scale.x, actor->scale.x); mDoMtx_stack_c::push(); mDoMtx_stack_c::scaleM(0.01f, 0.01f, 0.01f); - param_1->mpA_crwaku_model->setBaseTRMtx(mDoMtx_stack_c::get()); - MTXCopy(mDoMtx_stack_c::get(), param_1->field_0x4030); - param_1->field_0x402c->Move(); + i_this->mpA_crwaku_model->setBaseTRMtx(mDoMtx_stack_c::get()); + MTXCopy(mDoMtx_stack_c::get(), i_this->field_0x4030); + + i_this->field_0x402c->Move(); mDoMtx_stack_c::pop(); - for (int iVar8 = 0; iVar8 < 100; iVar8++) { - if (param_1->mKoro2[iVar8].mpModel != NULL) { + + f32 var_f31 = VREG_F(2) + -10.0f; + f32 var_f30 = VREG_F(4) + -18.0f; + + for (int i = 0; i < 100; i++) { + if (i_this->mKoro2[i].mpModel != NULL) { mDoMtx_stack_c::push(); - mDoMtx_stack_c::transM(param_1->mKoro2[iVar8].field_0x38.x + -10.0f, - param_1->mKoro2[iVar8].field_0x38.y, - param_1->mKoro2[iVar8].field_0x38.z + -18.0f); - mDoMtx_stack_c::YrotM(param_1->mKoro2[iVar8].field_0x50); - mDoMtx_stack_c::scaleM(param_1->mKoro2[iVar8].field_0x44.x, - param_1->mKoro2[iVar8].field_0x44.y, - param_1->mKoro2[iVar8].field_0x44.z); + mDoMtx_stack_c::transM(i_this->mKoro2[i].field_0x38.x + var_f31, + i_this->mKoro2[i].field_0x38.y, + i_this->mKoro2[i].field_0x38.z + var_f30); + mDoMtx_stack_c::YrotM(i_this->mKoro2[i].field_0x50); + mDoMtx_stack_c::scaleM(i_this->mKoro2[i].field_0x44.x, + i_this->mKoro2[i].field_0x44.y, + i_this->mKoro2[i].field_0x44.z); mDoMtx_stack_c::push(); mDoMtx_stack_c::scaleM(0.01f, 0.01f, 0.01f); - param_1->mKoro2[iVar8].mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); - MTXCopy(mDoMtx_stack_c::get(), param_1->mKoro2[iVar8].field_0x04); - param_1->mKoro2[iVar8].mpBgW->Move(); + i_this->mKoro2[i].mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); + MTXCopy(mDoMtx_stack_c::get(), i_this->mKoro2[i].field_0x04); + + i_this->mKoro2[i].mpBgW->Move(); mDoMtx_stack_c::pop(); - mDoMtx_stack_c::multVecZero(¶m_1->mKoro2[iVar8].field_0x54); - if (param_1->mKoro2[iVar8].field_0x34 == 6) { + mDoMtx_stack_c::multVecZero(&i_this->mKoro2[i].field_0x54); + + if (i_this->mKoro2[i].field_0x34 == 6) { cStack_44.set(0.0f, 0.0f, 2.5f); mDoMtx_stack_c::multVec(&cStack_44, &BallStartPos); - } else if (param_1->mKoro2[iVar8].field_0x34 == 7) { + } else if (i_this->mKoro2[i].field_0x34 == 7) { cStack_44.set(0.0f, 0.0f, -2.0f); mDoMtx_stack_c::multVec(&cStack_44, &BallEndPos); } + mDoMtx_stack_c::pop(); } } @@ -1354,12 +1392,10 @@ static void koro2_mtx_set(fshop_class* param_1) { } /* 8086D48C-8086D500 00150C 0074+00 1/1 0/0 0/0 .text s_sel_sub__FPvPv */ -static void* s_sel_sub(void* param_1, void* param_2) { - if (fopAcM_IsActor(param_1) && fopAcM_GetName(param_1) == PROC_FSHOP) { - u8 uVar1 = ((fshop_class*)param_1)->field_0x400e; - u8 uVar2 = (((fshop_class*)param_2)->field_0x400c & 7) + 1; - if (uVar1 == uVar2) { - return param_1; +static void* s_sel_sub(void* i_actor, void* i_data) { + if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_FSHOP) { + if (((fshop_class*)i_actor)->field_0x400e == (u8)((((fshop_class*)i_data)->field_0x400c & 7) + 1)) { + return i_actor; } } @@ -1367,10 +1403,9 @@ static void* s_sel_sub(void* param_1, void* param_2) { } /* 8086D500-8086D55C 001580 005C+00 1/1 0/0 0/0 .text s_ball_sub__FPvPv */ -static void* s_ball_sub(void* param_1, void* param_2) { - if (fopAcM_IsActor(param_1) && fopAcM_GetName(param_1) == PROC_FSHOP && - (u8)fopAcM_GetParam(param_1) == 0x23) { - return param_1; +static void* s_ball_sub(void* i_actor, void* i_data) { + if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_FSHOP && (fopAcM_GetParam(i_actor) & 0xFF) == 0x23) { + return i_actor; } return NULL; @@ -1378,9 +1413,11 @@ static void* s_ball_sub(void* param_1, void* param_2) { /* 8086D55C-8086D854 0015DC 02F8+00 1/1 0/0 0/0 .text koro2_game__FP11fshop_class */ static void koro2_game(fshop_class* i_this) { + fopAc_ac_c* actor = &i_this->actor; + cXyz sp5C; cXyz sp68; - i_this->scale.x = 1.0f; + actor->scale.x = 1.0f; switch (i_this->field_0x4010) { case 0: @@ -1399,7 +1436,7 @@ static void koro2_game(fshop_class* i_this) { cLib_addCalcAngleS2(&i_this->field_0x4020.x, 0, 2, 0x200); cLib_addCalcAngleS2(&i_this->field_0x4020.z, 0, 2, 0x200); case 2: - i_this->scale.x = 10.0f; + actor->scale.x = 10.0f; if (i_this->field_0x4010 == 2) { static f32 old_stick_x = 0.0f; @@ -1460,151 +1497,165 @@ static void koro2_game(fshop_class* i_this) { } } -/* 80870AC4-80870AC8 000174 0004+00 1/1 0/0 0/0 .bss None */ -static u8 data_80870AC4[4]; - /* 8086D854-8086DA00 0018D4 01AC+00 1/1 0/0 0/0 .text ball_wall_check__FP11fshop_class */ -static int ball_wall_check(fshop_class* param_1) { - if (!param_1->field_0x40b4.ChkWallHit()) { +static int ball_wall_check(fshop_class* i_this) { + if (!i_this->field_0x40b4.ChkWallHit()) { return 0; } - fopAc_ac_c* actor = param_1; + fopAc_ac_c* actor = (fopAc_ac_c*)&i_this->actor; dBgS_LinChk adStack_88; cXyz cStack_94; cXyz cStack_a0; cXyz local_ac; local_ac.y = 0.0f; + cStack_94 = actor->current.pos; - cStack_94.y +=5.0f; - for (int iVar1 = 0; iVar1 < 4; iVar1++) { + cStack_94.y += nREG_F(7) + 5.0f; + + for (int i = 0; i < 4; i++) { static f32 c_x[4] = {14.0f, -14.0f, 0.0f, 0.0f}; static f32 c_z[4] = {0.0f, 0.0f, 14.0f, -14.0f}; - local_ac.x = c_x[iVar1]; - local_ac.z = c_z[iVar1]; + local_ac.x = c_x[i]; + local_ac.z = c_z[i]; cStack_a0 = cStack_94 + local_ac; + adStack_88.Set(&cStack_94, &cStack_a0, actor); if (dComIfG_Bgsp().LineCross(&adStack_88)) { - if ((iVar1 == 0 && actor->speed.x > 0.0f) || - (iVar1 == 1 && actor->speed.x < 0.0f)) + if ((i == 0 && actor->speed.x > 0.0f) || + (i == 1 && actor->speed.x < 0.0f)) { actor->speed.x = 0.0f; } - if ((iVar1 == 2 && actor->speed.z > 0.0f) || - (iVar1 == 3 && actor->speed.z < 0.0f)) + + if ((i == 2 && actor->speed.z > 0.0f) || + (i == 3 && actor->speed.z < 0.0f)) { actor->speed.z = 0.0f; } } } + return 0; } /* 8086DA00-8086E6C4 001A80 0CC4+00 2/1 0/0 0/0 .text daFshop_Execute__FP11fshop_class */ -static int daFshop_Execute(fshop_class* param_1) { +static int daFshop_Execute(fshop_class* i_this) { + fopAc_ac_c* actor = &i_this->actor; fopAc_ac_c* pPlayer = dComIfGp_getPlayer(0); cXyz local_c0; - param_1->field_0x0570++; - if (param_1->field_0x400e != 0) { - if (param_1->field_0x428d != 0) { - param_1->field_0x428d--; + + i_this->field_0x0570++; + + if (i_this->field_0x400e != 0) { + if (i_this->field_0x428d != 0) { + i_this->field_0x428d--; } - koro2_mtx_set(param_1); + + koro2_mtx_set(i_this); return 1; } - if (param_1->field_0x4070 != NULL) { - param_1->scale.x = 0.024f; + + if (i_this->field_0x4070 != NULL) { + actor->scale.x = 0.024f; cXyz local_cc; cXyz local_d8; BOOL bVar5 = FALSE; - if (param_1->field_0x428d != 0) { - param_1->field_0x428d--; + + if (i_this->field_0x428d != 0) { + i_this->field_0x428d--; } - switch (param_1->field_0x0572) { + + switch (i_this->field_0x0572) { case 0: - param_1->current.pos = BallStartPos; - param_1->current.pos.y += 4.0f; - param_1->old.pos = param_1->current.pos; - param_1->field_0x428d = 10; + actor->current.pos = BallStartPos; + actor->current.pos.y += 4.0f; + actor->old.pos = actor->current.pos; + i_this->field_0x428d = 10; break; case 1: - param_1->current.pos = BallStartPos; - param_1->current.pos.y += 4.0f; - param_1->old.pos = param_1->current.pos; - param_1->speed.zero(); - param_1->field_0x0572++; - param_1->field_0x428c = 3; - param_1->field_0x567 = 0; - param_1->field_0x428d = 10; + actor->current.pos = BallStartPos; + actor->current.pos.y += 4.0f; + actor->old.pos = actor->current.pos; + actor->speed.zero(); + + i_this->field_0x0572++; + i_this->field_0x428c = 3; + actor->field_0x567 = 0; + i_this->field_0x428d = 10; case 2: bVar5 = TRUE; - param_1->scale.x = 0.24000001f; + actor->scale.x = 0.24000001f; break; } if (bVar5) { - cMtx_YrotS((MtxP)calc_mtx, param_1->field_0x4020.y); - cMtx_XrotM((MtxP)calc_mtx, param_1->field_0x4020.x); - cMtx_ZrotM((MtxP)calc_mtx, param_1->field_0x4020.z); - MtxPosition(¶m_1->speed, ¶m_1->field_0x4064); - param_1->field_0x4064 = param_1->speed; - param_1->current.pos += param_1->field_0x4064; - if (param_1->speed.x || param_1->speed.z) { - param_1->current.angle.y = cM_atan2s(param_1->speed.x, param_1->speed.z); + cMtx_YrotS(*calc_mtx, i_this->field_0x4020.y); + cMtx_XrotM(*calc_mtx, i_this->field_0x4020.x); + cMtx_ZrotM(*calc_mtx, i_this->field_0x4020.z); + MtxPosition(&actor->speed, &i_this->field_0x4064); + i_this->field_0x4064 = actor->speed; + actor->current.pos += i_this->field_0x4064; + + if (actor->speed.x || actor->speed.z) { + actor->current.angle.y = cM_atan2s(actor->speed.x, actor->speed.z); } - param_1->speed.y -= 3.5f; - if (param_1->speed.y <= -15.0f) { - param_1->speed.y = -15.0f; + + actor->speed.y -= 3.5f; + if (actor->speed.y <= -15.0f) { + actor->speed.y = -15.0f; } - param_1->field_0x40b4.m_gnd.OffWall(); - param_1->field_0x40b4.CrrPos(dComIfG_Bgsp()); - ball_wall_check(param_1); - fshop_class* iVar6 = param_1->field_0x4008; - for (int local_124 = 0; local_124 < 100; local_124++) { - if (iVar6->mKoro2[local_124].mpModel != NULL) { - local_cc.x = iVar6->mKoro2[local_124].field_0x54.x - param_1->current.pos.x; - local_cc.z = iVar6->mKoro2[local_124].field_0x54.z - param_1->current.pos.z; + + i_this->field_0x40b4.m_gnd.OffWall(); + i_this->field_0x40b4.CrrPos(dComIfG_Bgsp()); + ball_wall_check(i_this); + + fshop_class* iVar6 = i_this->field_0x4008; + for (int i = 0; i < 100; i++) { + if (iVar6->mKoro2[i].mpModel != NULL) { + local_cc.x = iVar6->mKoro2[i].field_0x54.x - actor->current.pos.x; + local_cc.z = iVar6->mKoro2[i].field_0x54.z - actor->current.pos.z; if (JMAFastSqrt(local_cc.x * local_cc.x + local_cc.z * local_cc.z) < 40.0f) { - iVar6->mKoro2[local_124].field_0x60 = 0; + iVar6->mKoro2[i].field_0x60 = 0; } } } - if (param_1->current.pos.y < -2500.0f) { - param_1->field_0x567 = 1; + + if (actor->current.pos.y < -2500.0f) { + actor->field_0x567 = 1; } npc_henna_class* henna = (npc_henna_class*)fopAcM_SearchByName(PROC_NPC_HENNA); - if (henna != NULL && henna->field_0x7b9 != 0 && - (param_1->field_0x567 == 1 || dTimer_getRestTimeMs() == 0)) - { + if (henna != NULL && henna->field_0x7b9 != 0 && (actor->field_0x567 == 1 || dTimer_getRestTimeMs() == 0)) { BOOL bVar5 = FALSE; - for (int local_130 = 0; local_130 < 100; local_130++) { - if (iVar6->mKoro2[local_130].mpModel != NULL && iVar6->mKoro2[local_130].field_0x60) { + for (int i = 0; i < 100; i++) { + if (iVar6->mKoro2[i].mpModel != NULL && iVar6->mKoro2[i].field_0x60) { bVar5 = TRUE; break; } } + if (!bVar5) { henna->actor.health = 1; - } else if (param_1->field_0x567 == 1) { + } else if (actor->field_0x567 == 1) { henna->actor.health = 0; } else { henna->actor.health = 2; } - henna->cam_mode = 0x49; + henna->cam_mode = 73; henna->field_0x754 = 0; henna->field_0x7b9 = 0; - param_1->field_0x567 = 2; + actor->field_0x567 = 2; } else { - if (param_1->field_0x567 == 0) { - local_cc = BallEndPos - param_1->current.pos; + if (actor->field_0x567 == 0) { + local_cc = BallEndPos - actor->current.pos; if (local_cc.abs() < 65.0f) { npc_henna_class* henna = (npc_henna_class*)fopAcM_SearchByName(PROC_NPC_HENNA); if (henna != NULL) { BOOL bVar5 = FALSE; - for (int local_13c = 0; local_13c < 100; local_13c++) { - if (iVar6->mKoro2[local_13c].mpModel != NULL && iVar6->mKoro2[local_13c].field_0x60) { + for (int i = 0; i < 100; i++) { + if (iVar6->mKoro2[i].mpModel != NULL && iVar6->mKoro2[i].field_0x60) { bVar5 = TRUE; break; } @@ -1612,601 +1663,734 @@ static int daFshop_Execute(fshop_class* param_1) { if (bVar5) { henna->actor.health = 3; - henna->cam_mode = 0x49; + henna->cam_mode = 73; } else { - henna->cam_mode = 0x4c; + henna->cam_mode = 76; } + henna->field_0x754 = 0; henna->field_0x7b9 = 0; - param_1->field_0x567 = 2; + actor->field_0x567 = 2; } } } } - if (param_1->field_0x40b4.ChkGroundHit()) { - if (param_1->field_0x428c == 0) { - param_1->speed.y = 7.0f; - } else if (param_1->field_0x428c == 1) { - param_1->speed.y = 2.5f; - } else if (param_1->field_0x428c == 2) { - param_1->speed.y = 1.0f; + + if (i_this->field_0x40b4.ChkGroundHit()) { + if (i_this->field_0x428c == 0) { + actor->speed.y = 7.0f; + } else if (i_this->field_0x428c == 1) { + actor->speed.y = 2.5f; + } else if (i_this->field_0x428c == 2) { + actor->speed.y = 1.0f; } else { - param_1->speed.y = -5.0f; - param_1->field_0x428c = 2; + actor->speed.y = -5.0f; + i_this->field_0x428c = 2; } - param_1->field_0x428c++; + + i_this->field_0x428c++; + dBgS_GndChk adStack_b4; - cXyz local_e4 = param_1->current.pos; + cXyz local_e4 = actor->current.pos; local_e4.y += 10.0f; local_e4.z += 1.0f; adStack_b4.SetPos(&local_e4); local_e4.y = dComIfG_Bgsp().GroundCross(&adStack_b4); - s16 local_160 = -cM_atan2s(local_e4.y - param_1->current.pos.y, - local_e4.z - param_1->current.pos.z); + s16 local_160 = -cM_atan2s(local_e4.y - actor->current.pos.y, + local_e4.z - actor->current.pos.z); if (local_160 > 0x3000) { local_160 = 0x3000; } else if (local_160 < -0x3000) { local_160 = -0x3000; } - local_e4 = param_1->current.pos; + local_e4 = actor->current.pos; local_e4.y += 10.0f; local_e4.x += 1.0f; adStack_b4.SetPos(&local_e4); local_e4.y = dComIfG_Bgsp().GroundCross(&adStack_b4); - s16 local_162 = (s16)cM_atan2s(local_e4.y - param_1->current.pos.y, - local_e4.x - param_1->current.pos.x); + s16 local_162 = (s16)cM_atan2s(local_e4.y - actor->current.pos.y, + local_e4.x - actor->current.pos.x); if (local_162 > 0x3000) { local_162 = 0x3000; } else if (local_162 < -0x3000) { local_162 = -0x3000; } - cMtx_XrotS((MtxP)calc_mtx, local_160); - cMtx_ZrotM((MtxP)calc_mtx, local_162); + + cMtx_XrotS(*calc_mtx, local_160); + cMtx_ZrotM(*calc_mtx, local_162); local_cc.x = 0.0f; local_cc.y = 30.0f; local_cc.z = 0.0f; MtxPosition(&local_cc, &local_d8); - cLib_addCalc2(¶m_1->speed.x, local_d8.x, 0.05f, - (fabsf(local_d8.x) * 0.1f + 0.2f)); - cLib_addCalc2(¶m_1->speed.z, local_d8.z, 0.05f, - (fabsf(local_d8.z) * 0.1f + 0.2f)); + + cLib_addCalc2(&actor->speed.x, local_d8.x, 0.05f, fabsf(local_d8.x) * 0.1f + 0.2f); + cLib_addCalc2(&actor->speed.z, local_d8.z, 0.05f, fabsf(local_d8.z) * 0.1f + 0.2f); } } camera_class* pmVar11 = (camera_class*)dComIfGp_getCamera(0); - mDoMtx_stack_c::transS(param_1->current.pos.x, param_1->current.pos.y, - param_1->current.pos.z); - mDoMtx_stack_c::scaleM(param_1->scale.x, param_1->scale.x, - param_1->scale.x); - mDoMtx_stack_c::transM(0.0f, 190.0f * param_1->scale.x, 0.0f); - local_cc = pmVar11->lookat.eye - param_1->current.pos; + mDoMtx_stack_c::transS(actor->current.pos.x, actor->current.pos.y, + actor->current.pos.z); + mDoMtx_stack_c::scaleM(actor->scale.x, actor->scale.x, + actor->scale.x); + mDoMtx_stack_c::transM(0.0f, 190.0f * actor->scale.x, 0.0f); + local_cc = pmVar11->lookat.eye - actor->current.pos; mDoMtx_stack_c::YrotM(cM_atan2s(local_cc.x, local_cc.z)); mDoMtx_stack_c::XrotM(-cM_atan2s(local_cc.y, JMAFastSqrt((local_cc.x * local_cc.x + local_cc.z * local_cc.z)))); - param_1->field_0x4070->setBaseTRMtx(mDoMtx_stack_c::get()); + i_this->field_0x4070->setBaseTRMtx(mDoMtx_stack_c::get()); return 1; } else { - lure_set(param_1); - rod_set(param_1); - tsubo_set(param_1); - fs_weed_s* pWeed = param_1->mWeed; - for (s32 local_14c = 0; local_14c < 60; local_14c++, pWeed++) { - weed_control(param_1, pWeed); - cXyz* local_148 = param_1->field_0x3f88.getPos(local_14c); - for (s32 local_150 = 0; local_150 < 15; local_150++, local_148++) { + lure_set(i_this); + rod_set(i_this); + tsubo_set(i_this); + + fs_weed_s* pWeed = i_this->mWeed; + for (int i = 0; i < 60; i++, pWeed++) { + weed_control(i_this, pWeed); + cXyz* local_148 = i_this->field_0x3f88.getPos(i); + for (int local_150 = 0; local_150 < 15; local_150++, local_148++) { *local_148 = pWeed->field_0x00[local_150]; } fpcM_Search(s_fish_sub, pWeed); } + cXyz cStack_f0(-720.0f, 30.0f, 70.0f); cXyz cStack_fc(0.5f, 0.5f, 0.5f); - for (int local_154 = 0; local_154 < 2; local_154++) { - if (local_154 == 0) { + for (int i = 0; i < 2; i++) { + if (i == 0) { cStack_f0.z = -30.0f; } else { cStack_f0.z = 220.0f; } - param_1->field_0x6b6c[local_154] = dComIfGp_particle_set( - param_1->field_0x6b6c[local_154], 0x1e8, &cStack_f0, 0, &cStack_fc); + + i_this->field_0x6b6c[i] = dComIfGp_particle_set(i_this->field_0x6b6c[i], ID_ZI_J_LK_ABUKU_A, &cStack_f0, 0, &cStack_fc); } + if (daPy_getPlayerActorClass()->checkFrontRollCrash()) { - param_1->field_0x6b34 = 0x1e; + i_this->field_0x6b34 = 30; } - s16 iVar6 = param_1->field_0x6b34 * cM_ssin(param_1->field_0x6b34 * 5000) * 30.0f; - if (param_1->field_0x6b34 != 0) { - param_1->field_0x6b34--; + + s16 iVar6 = i_this->field_0x6b34 * cM_ssin(i_this->field_0x6b34 * 5000) * 30.0f; + if (i_this->field_0x6b34 != 0) { + i_this->field_0x6b34--; } + mDoMtx_stack_c::transS(-450.0f, 25.0f, -250.0f); mDoMtx_stack_c::YrotM(0x4000); mDoMtx_stack_c::ZrotM(iVar6 + 2000); - param_1->field_0x6b30->setBaseTRMtx(mDoMtx_stack_c::get()); + i_this->field_0x6b30->setBaseTRMtx(mDoMtx_stack_c::get()); mDoMtx_stack_c::transS(-450.0f, 0.0f, -250.0f); mDoMtx_stack_c::scaleM(4.0f, 1.5f, 1.0f); - MTXCopy(mDoMtx_stack_c::get(), param_1->field_0x6b38); - param_1->field_0x6b68->Move(); + MTXCopy(mDoMtx_stack_c::get(), i_this->field_0x6b38); + + i_this->field_0x6b68->Move(); + local_c0.x = 325.0f - pPlayer->current.pos.x; local_c0.z = 237.0f - pPlayer->current.pos.z; - if (daPy_getPlayerActorClass()->checkFrontRollCrash() && - JMAFastSqrt((local_c0.x * local_c0.x + local_c0.z * local_c0.z)) < 150.0f) - { - param_1->field_0x3ff8 = cM_rndF(65536.0f); - param_1->field_0x3ffa = cM_rndF(65536.0f); - param_1->field_0x3ffc = cM_rndF(600.0f) + 1300.0f; - param_1->field_0x4000 = cM_rndF(600.0f) + 1300.0f; + if (daPy_getPlayerActorClass()->checkFrontRollCrash() && JMAFastSqrt(SQUARE(local_c0.x) + SQUARE(local_c0.z)) < 150.0f) { + i_this->field_0x3ff8 = cM_rndF(65536.0f); + i_this->field_0x3ffa = cM_rndF(65536.0f); + i_this->field_0x3ffc = cM_rndF(600.0f) + 1300.0f; + i_this->field_0x4000 = cM_rndF(600.0f) + 1300.0f; } - param_1->field_0x3ff8 += 4000; - param_1->field_0x3ffa += 4000; - s16 iVar10 = param_1->field_0x4000 * cM_ssin(param_1->field_0x3ffa); - s16 iVar11 = param_1->field_0x3ffc * cM_ssin(param_1->field_0x3ff8); - cLib_addCalc0(¶m_1->field_0x3ffc, 1.0f, 40.0f); - cLib_addCalc0(¶m_1->field_0x4000, 1.0f, 40.0f); + + i_this->field_0x3ff8 += 4000; + i_this->field_0x3ffa += 4000; + s16 iVar10 = i_this->field_0x4000 * cM_ssin(i_this->field_0x3ffa); + s16 iVar11 = i_this->field_0x3ffc * cM_ssin(i_this->field_0x3ff8); + cLib_addCalc0(&i_this->field_0x3ffc, 1.0f, 40.0f); + cLib_addCalc0(&i_this->field_0x4000, 1.0f, 40.0f); + mDoMtx_stack_c::transS(325.0f, 140.0f, 237.0f); mDoMtx_stack_c::XrotM((s16)iVar10); mDoMtx_stack_c::ZrotM(iVar11 + 15000); mDoMtx_stack_c::transM(-10.0f, -7.0f, 0.0f); - param_1->field_0x3ff4->setBaseTRMtx(mDoMtx_stack_c::get()); - koro2_game(param_1); + i_this->field_0x3ff4->setBaseTRMtx(mDoMtx_stack_c::get()); + + koro2_game(i_this); } + return 1; } /* 8086E6C4-8086E6CC 002744 0008+00 1/0 0/0 0/0 .text daFshop_IsDelete__FP11fshop_class */ -static int daFshop_IsDelete(fshop_class* param_0) { +static int daFshop_IsDelete(fshop_class* i_this) { return 1; } /* 8086E6CC-8086E7F0 00274C 0124+00 1/0 0/0 0/0 .text daFshop_Delete__FP11fshop_class */ -static int daFshop_Delete(fshop_class* param_1) { - fopAcM_GetID(param_1); - if (param_1->field_0x6b7c != 0) { +static int daFshop_Delete(fshop_class* i_this) { + fopAc_ac_c* actor = &i_this->actor; + fopAcM_GetID(i_this); + + if (i_this->field_0x6b7c != 0) { J3DModelData* pModelData = (J3DModelData*) dComIfG_getObjectRes("Fshop", 5); - dComIfGp_removeSimpleModel(pModelData, fopAcM_GetRoomNo(param_1)); + dComIfGp_removeSimpleModel(pModelData, fopAcM_GetRoomNo(actor)); pModelData = (J3DModelData*) dComIfG_getObjectRes("Fshop", 6); - dComIfGp_removeSimpleModel(pModelData, fopAcM_GetRoomNo(param_1)); + dComIfGp_removeSimpleModel(pModelData, fopAcM_GetRoomNo(actor)); } - dComIfG_resDelete(¶m_1->mPhase, "Fshop"); - dComIfG_Bgsp().Release(param_1->field_0x6b68); - if (param_1->field_0x400e != 0) { - dComIfG_Bgsp().Release(param_1->field_0x402c); + + dComIfG_resDelete(&i_this->mPhase, "Fshop"); + dComIfG_Bgsp().Release(i_this->field_0x6b68); + + if (i_this->field_0x400e != 0) { + dComIfG_Bgsp().Release(i_this->field_0x402c); for (int i = 0; i < 100; i++) { - if (param_1->mKoro2[i].mpBgW != NULL) { - dComIfG_Bgsp().Release(param_1->mKoro2[i].mpBgW); + if (i_this->mKoro2[i].mpBgW != NULL) { + dComIfG_Bgsp().Release(i_this->mKoro2[i].mpBgW); } } } + return 1; } /* 8086E7F0-8086ECC8 002870 04D8+00 1/1 0/0 0/0 .text koro2_heapinit__FP10fopAc_ac_c */ -// NONMATCHING mapPtr definition and stack issue -static int koro2_heapinit(fopAc_ac_c* param_1) { - static s32 koro2_bmd[15] = { +static int koro2_heapinit(fopAc_ac_c* actor) { + static int koro2_bmd[15] = { 0x0A, 0x0B, 0x0B, 0x0B, 0x0B, 0x0F, 0x0D, 0x0C, 0x0C, 0x0C, 0x0C, 0x0E, 0x0E, 0x0E, 0x0E, }; + static u32 koro2_dzb[15] = { 0x1F, 0x20, 0x20, 0x20, 0x20, 0x24, 0x22, 0x21, 0x21, 0x21, 0x21, 0x23, 0x23, 0x23, 0x23, }; + static u8 pande_d[16] = { 0x00, 0x01, 0x03, 0x02, 0x05, 0x04, 0x06, 0x07, 0x09, 0x08, 0x0B, 0x0A, 0x0C, 0x0D, 0x0F, 0x0E, }; - fshop_class* pShop = (fshop_class*) param_1; - pShop->field_0x402c = new dBgW(); - if (pShop->field_0x402c == NULL) { - return 0; - } - cBgD_t* pcVar3 = (cBgD_t*)dComIfG_getObjectRes("Fshop", 37); - if (pShop->field_0x402c->Set(pcVar3, 1, &pShop->field_0x4030) == 1) { - return 0; - } - pShop->field_0x402c->SetCrrFunc(dBgS_MoveBGProc_Typical); - pShop->field_0x402c->SetRideCallback(ride_call_back); - pShop->mpA_crwaku_model = ArcIX_A_crwaku_model[0]; + fshop_class* i_this = (fshop_class*)actor; - int local_30 = 0; - int flag567 = pShop->field_0x567 & 8; + i_this->field_0x402c = new dBgW(); + if (i_this->field_0x402c == NULL) { + return 0; + } + + cBgD_t* dzb = (cBgD_t*)dComIfG_getObjectRes("Fshop", 37); + if (i_this->field_0x402c->Set(dzb, 1, &i_this->field_0x4030) == 1) { + return 0; + } + + i_this->field_0x402c->SetCrrFunc(dBgS_MoveBGProc_Typical); + i_this->field_0x402c->SetRideCallback(ride_call_back); + i_this->mpA_crwaku_model = ArcIX_A_crwaku_model[0]; + + int part_no = 0; + int flag567 = actor->field_0x567 & 8; int r29 = 0; int r28 = 0; int r30 = 0; int r27 = 0; int r26 = 0; int r25 = 0; - s8* mapPtr = koro2_map_d[pShop->field_0x567 & 7]; - for (int local_5c = 0; local_5c < 9; local_5c++) { + s8* mapData = koro2_map_d[actor->field_0x567 & 7]; + + for (int i = 0; i < 9; i++) { for (int local_60 = 0; local_60 < 15; local_60++) { - int index = local_60 * 9 + local_5c; - if (mapPtr[index] != 0) { + int index = local_60 * 9 + i; + if (mapData[index] != 0) { if (flag567 != 0) { - pShop->mKoro2[local_30].field_0x34 = pande_d[mapPtr[index]]; - pShop->mKoro2[local_30].field_0x38.x = 2.5f * (8 - local_5c); + i_this->mKoro2[part_no].field_0x34 = pande_d[mapData[index]]; + i_this->mKoro2[part_no].field_0x38.x = 2.5f * (8 - i); } else { - pShop->mKoro2[local_30].field_0x34 = mapPtr[index]; - pShop->mKoro2[local_30].field_0x38.x = 2.5f * local_5c; + i_this->mKoro2[part_no].field_0x34 = mapData[index]; + i_this->mKoro2[part_no].field_0x38.x = 2.5f * i; } - pShop->mKoro2[local_30].field_0x38.y = 2.0f; - pShop->mKoro2[local_30].field_0x38.z = 2.5f * local_60; - if (pShop->mKoro2[local_30].field_0x34 == 6) { - pShop->mKoro2[local_30].field_0x38.z -= 2.5f; - } else if (pShop->mKoro2[local_30].field_0x34 == 8) { - pShop->mKoro2[local_30].field_0x38.z -= 2.5f; - pShop->mKoro2[local_30].field_0x38.x -= 2.5f; - } else if (pShop->mKoro2[local_30].field_0x34 == 11) { - pShop->mKoro2[local_30].field_0x38.z += 2.5f; - pShop->mKoro2[local_30].field_0x38.x += 2.5f; + + i_this->mKoro2[part_no].field_0x38.y = 2.0f; + i_this->mKoro2[part_no].field_0x38.z = 2.5f * local_60; + + if (i_this->mKoro2[part_no].field_0x34 == 6) { + i_this->mKoro2[part_no].field_0x38.z -= 2.5f; + } else if (i_this->mKoro2[part_no].field_0x34 == 8) { + i_this->mKoro2[part_no].field_0x38.z -= 2.5f; + i_this->mKoro2[part_no].field_0x38.x -= 2.5f; + } else if (i_this->mKoro2[part_no].field_0x34 == 11) { + i_this->mKoro2[part_no].field_0x38.z += 2.5f; + i_this->mKoro2[part_no].field_0x38.x += 2.5f; } - pShop->mKoro2[local_30].field_0x44.set(2.5f, 2.5f, 2.5f); - if (pShop->mKoro2[local_30].field_0x34 == 2 || - pShop->mKoro2[local_30].field_0x34 == 8) - { - pShop->mKoro2[local_30].field_0x50 = -16384; - } else if (pShop->mKoro2[local_30].field_0x34 == 4 || - pShop->mKoro2[local_30].field_0x34 == 10) - { - pShop->mKoro2[local_30].field_0x50 = -32768; - } else if (pShop->mKoro2[local_30].field_0x34 == 5 || - pShop->mKoro2[local_30].field_0x34 == 11) - { - pShop->mKoro2[local_30].field_0x50 = 16384; - } else if (pShop->mKoro2[local_30].field_0x34 == 12) { - pShop->mKoro2[local_30].field_0x50 = -32768; - } else if (pShop->mKoro2[local_30].field_0x34 == 14) { - pShop->mKoro2[local_30].field_0x50 = -16384; - } else if (pShop->mKoro2[local_30].field_0x34 == 15) { - pShop->mKoro2[local_30].field_0x50 = 16384; + + i_this->mKoro2[part_no].field_0x44.set(2.5f, 2.5f, 2.5f); + + if (i_this->mKoro2[part_no].field_0x34 == 2 || i_this->mKoro2[part_no].field_0x34 == 8) { + i_this->mKoro2[part_no].field_0x50 = -0x4000; + } else if (i_this->mKoro2[part_no].field_0x34 == 4 || i_this->mKoro2[part_no].field_0x34 == 10) { + i_this->mKoro2[part_no].field_0x50 = -0x8000; + } else if (i_this->mKoro2[part_no].field_0x34 == 5 || i_this->mKoro2[part_no].field_0x34 == 11) { + i_this->mKoro2[part_no].field_0x50 = 0x4000; + } else if (i_this->mKoro2[part_no].field_0x34 == 12) { + i_this->mKoro2[part_no].field_0x50 = -0x8000; + } else if (i_this->mKoro2[part_no].field_0x34 == 14) { + i_this->mKoro2[part_no].field_0x50 = -0x4000; + } else if (i_this->mKoro2[part_no].field_0x34 == 15) { + i_this->mKoro2[part_no].field_0x50 = 0x4000; } - if (koro2_bmd[pShop->mKoro2[local_30].field_0x34 - 1] == 10) { - pShop->mKoro2[local_30].mpModel = ArcIX_A_crbox_model[r30]; + if (koro2_bmd[i_this->mKoro2[part_no].field_0x34 - 1] == 10) { + i_this->mKoro2[part_no].mpModel = ArcIX_A_crbox_model[r30]; r30++; - } else if (koro2_bmd[pShop->mKoro2[local_30].field_0x34 - 1] == 15) { - pShop->mKoro2[local_30].mpModel = ArcIX_A_crstart_model[r29]; + } else if (koro2_bmd[i_this->mKoro2[part_no].field_0x34 - 1] == 15) { + i_this->mKoro2[part_no].mpModel = ArcIX_A_crstart_model[r29]; r29++; - } else if (koro2_bmd[pShop->mKoro2[local_30].field_0x34 - 1] == 13) { - pShop->mKoro2[local_30].mpModel = ArcIX_A_crgoal_model[r28]; + } else if (koro2_bmd[i_this->mKoro2[part_no].field_0x34 - 1] == 13) { + i_this->mKoro2[part_no].mpModel = ArcIX_A_crgoal_model[r28]; r28++; - } else if (koro2_bmd[pShop->mKoro2[local_30].field_0x34 - 1] == 11) { - pShop->mKoro2[local_30].mpModel = ArcIX_A_crcurve_a_model[r27]; + } else if (koro2_bmd[i_this->mKoro2[part_no].field_0x34 - 1] == 11) { + i_this->mKoro2[part_no].mpModel = ArcIX_A_crcurve_a_model[r27]; r27++; - } else if (koro2_bmd[pShop->mKoro2[local_30].field_0x34 - 1] == 12) { - pShop->mKoro2[local_30].mpModel = ArcIX_A_crcurve_b_model[r26]; + } else if (koro2_bmd[i_this->mKoro2[part_no].field_0x34 - 1] == 12) { + i_this->mKoro2[part_no].mpModel = ArcIX_A_crcurve_b_model[r26]; r26++; - } else if (koro2_bmd[pShop->mKoro2[local_30].field_0x34 - 1] == 14) { - pShop->mKoro2[local_30].mpModel = ArcIX_A_crsaka_model[r25]; + } else if (koro2_bmd[i_this->mKoro2[part_no].field_0x34 - 1] == 14) { + i_this->mKoro2[part_no].mpModel = ArcIX_A_crsaka_model[r25]; r25++; } - if (pShop->mKoro2[local_30].mpModel == NULL) { + if (i_this->mKoro2[part_no].mpModel == NULL) { return 0; } - pShop->mKoro2[local_30].mpBgW = new dBgW(); - if (pShop->mKoro2[local_30].mpBgW == NULL) { + i_this->mKoro2[part_no].mpBgW = new dBgW(); + if (i_this->mKoro2[part_no].mpBgW == NULL) { return 0; } - cBgD_t* pcVar3 = (cBgD_t*)dComIfG_getObjectRes("Fshop",koro2_dzb[pShop->mKoro2[local_30].field_0x34 - 1]); - if (pShop->mKoro2[local_30].mpBgW->Set(pcVar3, 1, &pShop->mKoro2[local_30].field_0x04) == 1) { + + cBgD_t* dzb = (cBgD_t*)dComIfG_getObjectRes("Fshop",koro2_dzb[i_this->mKoro2[part_no].field_0x34 - 1]); + if (i_this->mKoro2[part_no].mpBgW->Set(dzb, 1, &i_this->mKoro2[part_no].field_0x04) == 1) { return 0; } - pShop->mKoro2[local_30].mpBgW->SetCrrFunc(dBgS_MoveBGProc_Typical); - local_30++; - if (local_30 >= 100) { + + i_this->mKoro2[part_no].mpBgW->SetCrrFunc(dBgS_MoveBGProc_Typical); + + part_no++; + if (part_no >= 100) { + OS_REPORT("//////////////KORO2 PART MAX OVER !!\n"); return 0; } } } } + return 1; } -/* ############################################################################################## */ -/* 808701D4-808701D8 000140 0004+00 0/1 0/0 0/0 .rodata @5206 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5206 = -370.0f; -COMPILER_STRIP_GATE(0x808701D4, &lit_5206); -#pragma pop - -/* 808701D8-808701DC 000144 0004+00 0/1 0/0 0/0 .rodata @5207 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5207 = 16.0f; -COMPILER_STRIP_GATE(0x808701D8, &lit_5207); -#pragma pop - -/* 808701DC-808701E0 000148 0004+00 0/2 0/0 0/0 .rodata @5208 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5208 = 215.0f; -COMPILER_STRIP_GATE(0x808701DC, &lit_5208); -#pragma pop - -/* 808701E0-808701E4 00014C 0004+00 0/1 0/0 0/0 .rodata @5209 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5209 = 43.0f; -COMPILER_STRIP_GATE(0x808701E0, &lit_5209); -#pragma pop - -/* 808701E4-808701E8 000150 0004+00 0/1 0/0 0/0 .rodata @5210 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5210 = 593.0f; -COMPILER_STRIP_GATE(0x808701E4, &lit_5210); -#pragma pop - -/* 808701E8-808701EC 000154 0004+00 0/1 0/0 0/0 .rodata @5211 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5211 = 32768.0f; -COMPILER_STRIP_GATE(0x808701E8, &lit_5211); -#pragma pop - -/* 808701EC-808701F0 000158 0004+00 0/1 0/0 0/0 .rodata @5212 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5212 = 3.0f / 10.0f; -COMPILER_STRIP_GATE(0x808701EC, &lit_5212); -#pragma pop - -/* 808701F0-808701F4 00015C 0004+00 0/1 0/0 0/0 .rodata @5213 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_5213 = 0x403F5C29; -COMPILER_STRIP_GATE(0x808701F0, &lit_5213); -#pragma pop - -/* 808701F4-808701F8 000160 0004+00 0/1 0/0 0/0 .rodata @5214 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_5214 = 0x3F3851EB; -COMPILER_STRIP_GATE(0x808701F4, &lit_5214); -#pragma pop - -/* 808701F8-808701FC 000164 0004+00 0/1 0/0 0/0 .rodata @5215 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_5215 = 0x3FFEB852; -COMPILER_STRIP_GATE(0x808701F8, &lit_5215); -#pragma pop - -/* 808701FC-80870200 000168 0004+00 0/1 0/0 0/0 .rodata @5216 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5216 = -685.0f; -COMPILER_STRIP_GATE(0x808701FC, &lit_5216); -#pragma pop - -/* 80870200-80870204 00016C 0004+00 0/1 0/0 0/0 .rodata @5217 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5217 = 18.0f; -COMPILER_STRIP_GATE(0x80870200, &lit_5217); -#pragma pop - -/* 80870204-80870208 000170 0004+00 0/1 0/0 0/0 .rodata @5218 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5218 = 565.0f; -COMPILER_STRIP_GATE(0x80870204, &lit_5218); -#pragma pop - -/* 80870208-8087020C 000174 0004+00 0/1 0/0 0/0 .rodata @5219 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5219 = 177.0f; -COMPILER_STRIP_GATE(0x80870208, &lit_5219); -#pragma pop - -/* 8087020C-80870210 000178 0004+00 0/1 0/0 0/0 .rodata @5220 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5220 = 290.0f; -COMPILER_STRIP_GATE(0x8087020C, &lit_5220); -#pragma pop - -/* 80870210-80870214 00017C 0004+00 0/1 0/0 0/0 .rodata @5221 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5221 = 550.0f; -COMPILER_STRIP_GATE(0x80870210, &lit_5221); -#pragma pop - -/* 80870214-80870218 000180 0004+00 0/1 0/0 0/0 .rodata @5222 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5222 = 560.0f; -COMPILER_STRIP_GATE(0x80870214, &lit_5222); -#pragma pop - -/* 80870218-8087021C 000184 0004+00 0/1 0/0 0/0 .rodata @5223 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5223 = -16384.0f; -COMPILER_STRIP_GATE(0x80870218, &lit_5223); -#pragma pop - -/* 8087021C-80870220 000188 0004+00 0/2 0/0 0/0 .rodata @5224 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5224 = 2000.0f; -COMPILER_STRIP_GATE(0x8087021C, &lit_5224); -#pragma pop - -/* 8087084C-8087085C 0005C8 0010+00 0/1 0/0 0/0 .data lure_d$5019 */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 lure_d[16] = { - 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x14, -}; -#pragma pop - -/* 8087085C-80870864 0005D8 0008+00 0/1 0/0 0/0 .data rod_d$5056 */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 rod_d[8] = { - 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x18, -}; -#pragma pop - -/* 80870864-80870884 0005E0 0020+00 0/1 0/0 0/0 .data rod_w$5087 */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 rod_w[32] = { - 0x3F, 0x80, 0x00, 0x00, 0x3F, 0x66, 0x66, 0x66, 0x3F, 0x4C, 0xCC, 0xCD, 0x3F, 0x33, 0x33, 0x33, - 0x3F, 0x19, 0x99, 0x9A, 0x3F, 0x00, 0x00, 0x00, 0x3E, 0xCC, 0xCC, 0xCD, 0x3E, 0x99, 0x99, 0x9A, -}; -#pragma pop - -/* 80870884-8087089C 000600 0018+00 0/1 0/0 0/0 .data koro2_union_bmd$5117 */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 koro2_union_bmd[24] = { - 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0A, - 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0E, -}; -#pragma pop - -/* 8087089C-808708B4 000618 0018+00 0/1 0/0 0/0 .data koro2_union_no$5118 */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 koro2_union_no[24] = { - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1F, - 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, -}; -#pragma pop - /* 8086ECC8-8086F5C8 002D48 0900+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ -static void useHeapInit(fopAc_ac_c* param_0) { - // NONMATCHING +static int useHeapInit(fopAc_ac_c* actor) { + fshop_class* i_this = (fshop_class*)actor; + cM_initRnd2(JREG_S(8) + 37, 123, 70); + + void* modelData; + for (int i = 0; i < 48; i++) { + i_this->mLure[i].field_0x00.x = -370.0f + VREG_F(6) + (-(i & 15) * (16.0f + VREG_F(8))) + cM_rndFX(2.5f); + i_this->mLure[i].field_0x00.y = (215.0f + VREG_F(7)) - (((i >> 4) & 3) * (43.0f + VREG_F(9))); + i_this->mLure[i].field_0x00.z = 593.0f + JREG_F(1); + + if (i >= 32 && i <= 33) { + i_this->mLure[i].field_0x24 = 3; + i_this->mLure[i].field_0x0c = JREG_S(4) - 0x4000; + i_this->mLure[i].field_0x0e = cM_rndFX2(32768.0f); + i_this->mLure[i].field_0x28 = 1.2f + JREG_F(0); + i_this->mLure[i].field_0x2c = 1.2f + JREG_F(0); + i_this->mLure[i].field_0x00.y += 13.0f; + } else { + if (cM_rndF2(1.0f) < 0.3f) { + i_this->mLure[i].field_0x24 = cM_rndF2(2.99f); + } else { + i_this->mLure[i].field_0x24 = i + (i >> 4); + i_this->mLure[i].field_0x24 &= 3; + if (i_this->mLure[i].field_0x24 == 3) { + i_this->mLure[i].field_0x24 = cM_rndF2(2.99f); + } + } + + i_this->mLure[i].field_0x0c = JREG_S(3) + 0x4000; + i_this->mLure[i].field_0x0e = cM_rndFX2(65536.0f); + i_this->mLure[i].field_0x28 = 0.8f + JREG_F(0) + cM_rndFX2(0.1f); + + if (i_this->mLure[i].field_0x24 == 2) { + i_this->mLure[i].field_0x2c = (0.71999997f + JREG_F(0)) - cM_rndF2(0.15f); + } else { + i_this->mLure[i].field_0x2c = 0.8f + JREG_F(0) + cM_rndFX2(0.1f); + } + } + + static int lure_d[] = {0x16, 0x17, 0x1C, 0x14}; + modelData = dComIfG_getObjectRes("Fshop", lure_d[i_this->mLure[i].field_0x24]); + JUT_ASSERT(2832, modelData != NULL); + + i_this->mLure[i].field_0x14 = mDoExt_J3DModel__create((J3DModelData*)modelData, 0x80000, 0x11000084); + if (i_this->mLure[i].field_0x14 == NULL) { + return 0; + } + + if (i_this->mLure[i].field_0x24 == 3) { + i_this->mLure[i].field_0x14->setUserArea((uintptr_t)&i_this->mLure[i]); + + for (u16 j = 0; j < ((J3DModelData*)modelData)->getJointNum(); j++) { + if (j == 1) { + ((J3DModelData*)modelData)->getJointNodePointer(j)->setCallBack(frog_CallBack); + } + } + } else { + modelData = dComIfG_getObjectRes("Fshop", 5); + JUT_ASSERT(2852, modelData != NULL); + + for (int j = 0; j < 2; j++) { + i_this->mLure[i].field_0x18[j] = mDoExt_J3DModel__create((J3DModelData*)modelData, 0x20000, 0x11000084); + if (i_this->mLure[i].field_0x18[j] == NULL) { + return 0; + } + } + } + } + + cM_initRnd2(JREG_S(9) + 79, JREG_S(8) + 133, 70); + + for (int i = 0; i < 3; i++) { + i_this->mRod[i].field_0x4c = cM_rndF2(1.99f); + i_this->mRod[i].field_0x00.x = -685.0f + YREG_F(2); + i_this->mRod[i].field_0x00.y = 18.0f + YREG_F(3); + i_this->mRod[i].field_0x00.z = 565.0f + YREG_F(4); + + if (i == 1) { + i_this->mRod[i].field_0x00.x -= 15.0f; + } else if (i == 2) { + i_this->mRod[i].field_0x00.z += 15.0f; + } + + if (i_this->mRod[i].field_0x4c == 0) { + i_this->mRod[i].field_0x54 = 30.0f * (1.2f + cM_rndF2(0.15f)); + } else { + i_this->mRod[i].field_0x54 = 30.0f * (1.0f + cM_rndF2(0.15f)); + } + + static int rod_d[] = {0x19, 0x18,}; + modelData = dComIfG_getObjectRes("Fshop", rod_d[i_this->mRod[i].field_0x4c]); + JUT_ASSERT(2903, modelData != NULL); + i_this->mRod[i].field_0x14 = mDoExt_J3DModel__create((J3DModelData*)modelData, 0x80000, 0x11000084); + if (i_this->mRod[i].field_0x14 == NULL) { + return 0; + } + + i_this->mRod[i].field_0x14->setUserArea((uintptr_t)&i_this->mRod[i]); + i_this->mRod[i].field_0x58 = cM_rndF2(65536.0f); + + for (u16 j = 0; j < ((J3DModelData*)modelData)->getJointNum(); j++) { + if (j == 1) { + ((J3DModelData*)modelData)->getJointNodePointer(j)->setCallBack(Reel_CallBack); + } + } + + modelData = dComIfG_getObjectRes("Fshop", 6); + JUT_ASSERT(2923, modelData != NULL); + + for (int j = 0; j < 6; j++) { + i_this->mRod[i].field_0x18[j] = mDoExt_J3DModel__create((J3DModelData*)modelData, 0x20000, 0x11000084); + if (i_this->mRod[i].field_0x18[j] == NULL) { + return 0; + } + } + + if (!i_this->mRod[i].line_mat.init(1, 8, 1)) { + return 0; + } + + f32* sp1C = i_this->mRod[i].line_mat.getSize(0); + for (int j = 0; j < 8; j++, sp1C++) { + static f32 rod_w[8] = { + 1.0f, + 0.89999998f, + 0.8f, + 0.69999999f, + 0.6f, + 0.5f, + 0.4f, + 0.3f, + }; + + *sp1C = rod_w[j]; + } + } + + for (int i = 0; i < 2; i++) { + if (i == 0) { + i_this->mTsubo[i].field_0x00.set(177.0f, 290.0f, 550.0f); + modelData = dComIfG_getObjectRes("Fshop", 0x1A); + } else { + i_this->mTsubo[i].field_0x00.set(40.0f, 290.0f, 560.0f); + modelData = dComIfG_getObjectRes("Fshop", 0x1B); + } + + JUT_ASSERT(2969, modelData != NULL); + + i_this->mTsubo[i].field_0x14 = mDoExt_J3DModel__create((J3DModelData*)modelData, 0x80000, 0x11000084); + if (i_this->mTsubo[i].field_0x14 == NULL) { + return 0; + } + } + + if (!i_this->field_0x3f88.init(60, 15, 0)) { + return 0; + } + + modelData = dComIfG_getObjectRes("Fshop", 0x12); + JUT_ASSERT(3035, modelData != NULL); + i_this->field_0x6b30 = mDoExt_J3DModel__create((J3DModelData*)modelData, 0x80000, 0x11000084); + if (i_this->field_0x6b30 == NULL) { + return 0; + } + + i_this->field_0x6b68 = new dBgW(); + if (i_this->field_0x6b68 == NULL) { + return 0; + } + + if (i_this->field_0x6b68->Set((cBgD_t*)dComIfG_getObjectRes("Fshop", 0x26), 1, &i_this->field_0x6b38) == 1) { + return 0; + } + + i_this->field_0x6b68->SetCrrFunc(dBgS_MoveBGProc_Typical); + + modelData = dComIfG_getObjectRes("Fshop", 0x15); + JUT_ASSERT(3069, modelData != NULL); + i_this->field_0x3ff4 = mDoExt_J3DModel__create((J3DModelData*)modelData, 0x80000, 0x11000084); + if (i_this->field_0x3ff4 == 0) { + return 0; + } + + #if !PLATFORM_SHIELD + i_this->field_0x4020.y = cM_rndFX(2000.0f) + -16384.0f; + + modelData = dComIfG_getObjectRes("Fshop", 16); + JUT_ASSERT(3069, modelData != NULL); + ArcIX_A_crwaku_model[0] = mDoExt_J3DModel__create((J3DModelData*)modelData, 0x80000, 0x11000084); + if (ArcIX_A_crwaku_model[0] == NULL) { + return 0; + } + + J3DModel** var_r24; + for (int i = 0; i < 6; i++) { + static int koro2_union_bmd[] = { + 0xF, + 0xD, + 0xA, + 0xB, + 0xC, + 0xE, + }; + + modelData = dComIfG_getObjectRes("Fshop", koro2_union_bmd[i]); + + static int koro2_union_no[] = { + 1, + 1, + 31, + 16, + 4, + 8, + }; + + var_r24 = koro2_union_model[i]; + for (int j = 0; j < koro2_union_no[i]; j++, var_r24++) { + *var_r24 = mDoExt_J3DModel__create((J3DModelData*)modelData, 0x80000, 0x11000084); + if (*var_r24 == NULL) { + return 0; + } + } + } + #endif + + #if PLATFORM_SHIELD + if (!koro2_heapinit(actor)) { + return 0; + } + #endif + + if ((int)dComIfGs_getEventReg(0xF47F) >= 10) { + modelData = dComIfG_getObjectRes("Fshop", 0x11); + JUT_ASSERT(3137, modelData != NULL); + i_this->field_0x4004 = mDoExt_J3DModel__create((J3DModelData*)modelData, 0x80000, 0x11000084); + if (i_this->field_0x4004 == 0) { + return 0; + } + } + + return 1; } /* 8086F5C8-8086F634 003648 006C+00 1/1 0/0 0/0 .text BalluseHeapInit__FP10fopAc_ac_c */ -static void BalluseHeapInit(fopAc_ac_c* param_0) { - // NONMATCHING +static int BalluseHeapInit(fopAc_ac_c* actor) { + fshop_class* i_this = (fshop_class*)actor; + + void* modelData = dComIfG_getObjectRes("Fshop", 9); + JUT_ASSERT(3157, modelData != NULL); + i_this->field_0x4070 = mDoExt_J3DModel__create((J3DModelData*)modelData, 0x80000, 0x11000084); + if (i_this->field_0x4070 == 0) { + return 0; + } + + return 1; } -/* ############################################################################################## */ -/* 80870220-80870240 00018C 0020+00 0/0 0/0 0/0 .rodata @5249 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_5249[32] = { - 0x00, 0x00, 0x84, 0xA0, 0x00, 0x00, 0x9A, 0xC0, 0x00, 0x00, 0xB4, 0x40, 0x00, 0x00, 0xE1, 0x00, - 0x00, 0x00, 0x82, 0x20, 0x00, 0x00, 0x9A, 0x40, 0x00, 0x00, 0x64, 0xE0, 0x00, 0x00, 0xA9, 0xE0, -}; -COMPILER_STRIP_GATE(0x80870220, &lit_5249); -#pragma pop - -/* 80870240-80870244 0001AC 0004+00 0/1 0/0 0/0 .rodata @5476 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5476 = 9.0f; -COMPILER_STRIP_GATE(0x80870240, &lit_5476); -#pragma pop - -/* 80870244-80870248 0001B0 0004+00 0/1 0/0 0/0 .rodata @5477 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5477 = 11.0f; -COMPILER_STRIP_GATE(0x80870244, &lit_5477); -#pragma pop - -/* 80870248-8087024C 0001B4 0004+00 0/1 0/0 0/0 .rodata @5478 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5478 = 20.0f; -COMPILER_STRIP_GATE(0x80870248, &lit_5478); -#pragma pop - -/* 8087024C-80870250 0001B8 0004+00 0/1 0/0 0/0 .rodata @5479 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5479 = 67.0f; -COMPILER_STRIP_GATE(0x8087024C, &lit_5479); -#pragma pop - -/* 80870250-80870254 0001BC 0004+00 0/1 0/0 0/0 .rodata @5480 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5480 = 9.0f / 10.0f; -COMPILER_STRIP_GATE(0x80870250, &lit_5480); -#pragma pop - -/* 80870254-80870258 0001C0 0004+00 0/1 0/0 0/0 .rodata @5481 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5481 = 3.0f / 5.0f; -COMPILER_STRIP_GATE(0x80870254, &lit_5481); -#pragma pop - -/* 80870258-8087025C 0001C4 0004+00 0/1 0/0 0/0 .rodata @5482 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5482 = 127.0f / 50.0f; -COMPILER_STRIP_GATE(0x80870258, &lit_5482); -#pragma pop - -/* 8087025C-80870260 0001C8 0004+00 0/1 0/0 0/0 .rodata @5483 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5483 = -648.0f; -COMPILER_STRIP_GATE(0x8087025C, &lit_5483); -#pragma pop - -/* 80870260-80870264 0001CC 0004+00 0/1 0/0 0/0 .rodata @5484 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5484 = 380.0f; -COMPILER_STRIP_GATE(0x80870260, &lit_5484); -#pragma pop - -/* 80870264-80870268 0001D0 0004+00 0/1 0/0 0/0 .rodata @5485 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5485 = -131.0f; -COMPILER_STRIP_GATE(0x80870264, &lit_5485); -#pragma pop - -/* 80870268-8087026C 0001D4 0004+00 0/1 0/0 0/0 .rodata @5486 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5486 = 3000.0f; -COMPILER_STRIP_GATE(0x80870268, &lit_5486); -#pragma pop - -/* 8087026C-80870270 0001D8 0004+00 0/1 0/0 0/0 .rodata @5487 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5487 = -4500.0f; -COMPILER_STRIP_GATE(0x8087026C, &lit_5487); -#pragma pop - -/* 80870270-80870274 0001DC 0004+00 0/1 0/0 0/0 .rodata @5488 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5488 = -878.0f; -COMPILER_STRIP_GATE(0x80870270, &lit_5488); -#pragma pop - -/* 80870274-8087027C 0001E0 0008+00 0/1 0/0 0/0 .rodata @5490 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_5490[8] = { - 0x43, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80870274, &lit_5490); -#pragma pop - -/* 808708B4-808708BC 000630 0008+00 1/1 0/0 0/0 .data check_kind$5285 */ -SECTION_DATA static u8 check_kind[8] = { - 0xF5, 0x7F, 0xF4, 0x7F, 0xF3, 0x7F, 0xF2, 0x7F, -}; - /* 8086F634-8086FD78 0036B4 0744+00 1/0 0/0 0/0 .text daFshop_Create__FP10fopAc_ac_c */ -static void daFshop_Create(fopAc_ac_c* param_0) { - // NONMATCHING - fopAcM_ct(param_0, fshop_class); +static int daFshop_Create(fopAc_ac_c* actor) { + fshop_class* i_this = (fshop_class*)actor; + fopAcM_ct(actor, fshop_class); + + int sp3C = dComIfG_resLoad(&i_this->mPhase, "Fshop"); + if (sp3C == cPhs_COMPLEATE_e) { + OS_REPORT("FSHOP PARAM %x\n", fopAcM_GetParam(actor)); + if ((fopAcM_GetParam(actor) & 0xFF) == 0x23) { + if (!fopAcM_entrySolidHeap(actor, BalluseHeapInit, 0x800)) { + OS_REPORT("//////////////FSHOP BALL SET NON !!\n"); + return 5; + } + + i_this->field_0x40b4.Set(fopAcM_GetPosition_p(actor), fopAcM_GetOldPosition_p(actor), actor, 1, &i_this->field_0x4074, fopAcM_GetSpeed_p(actor), NULL, NULL); + i_this->field_0x4074.SetWall(9.0f, 11.0f); + i_this->field_0x40b4.OnWallSort(); + return sp3C; + } + + if ((s8)(fopAcM_GetParam(actor) & 0xFF) >= 100) { + i_this->field_0x400e = (fopAcM_GetParam(actor) & 0xFF) - 100; + actor->field_0x567 = ((i_this->field_0x400e - 1) | (dComIfGs_getEventReg(0xF63F) & 8)); + + u32 sp58[] = { + 0x84A0, + 0x9AC0, + 0xB440, + 0xE100, + 0x8220, + 0x9A40, + 0x64E0, + 0xA9E0, + }; + + if (!fopAcM_entrySolidHeap(actor, koro2_heapinit, sp58[i_this->field_0x400e - 1])) { + OS_REPORT("//////////////FSHOP KORO222 SET NON !!\n"); + return 5; + } + + if (i_this->field_0x402c != NULL && dComIfG_Bgsp().Regist(i_this->field_0x402c, actor)) { + return 5; + } + + for (int i = 0; i < 100; i++) { + if (i_this->mKoro2[i].mpBgW != NULL && dComIfG_Bgsp().Regist(i_this->mKoro2[i].mpBgW, actor)) { + return 5; + } + } + + i_this->field_0x428d = 30; + i_this->field_0x400d = 1; + return sp3C; + } + + fopAcM_SetParam(actor, 0); + i_this->field_0x400c = dComIfGs_getEventReg(0xF63F) & 0xFF; + + OS_REPORT("FSHOP//////////////FSHOP SET 1 !!\n"); + + if (!fopAcM_entrySolidHeap(actor, useHeapInit, 0x5B000)) { + OS_REPORT("//////////////FSHOP SET NON !!\n"); + return 5; + } + + OS_REPORT("//////////////FSHOP SET 2 !!\n"); + + if (i_this->field_0x6b68 != NULL && dComIfG_Bgsp().Regist(i_this->field_0x6b68, actor)) { + return 5; + } + + for (int i = 0; i < 60; i++) { + if (i < 30) { + i_this->mWeed[i].field_0x00[0].z = -30.0f + cM_rndFX2(20.0f); + i_this->mWeed[i].field_0x00[0].y = 67.0f; + i_this->mWeed[i].field_0xb4 = 0.9f + cM_rndF2(0.6f); + } else { + i_this->mWeed[i].field_0x00[0].z = 220.0f + cM_rndFX2(20.0f); + i_this->mWeed[i].field_0x00[0].y = 67.0f; + i_this->mWeed[i].field_0xb4 = 0.9f + cM_rndF2(0.6f); + } + + i_this->mWeed[i].field_0x00[0].x = -720.0f + cM_rndFX2(20.0f); + i_this->mWeed[i].field_0xbc = cM_rndF2(65536.0f); + } + + daFshop_Execute(i_this); + + void* modelData = dComIfG_getObjectRes("Fshop", 5); + JUT_ASSERT(3354, modelData != NULL); + if (dComIfGp_addSimpleModel((J3DModelData*)modelData, fopAcM_GetRoomNo(actor), 0) == -1) { + OS_REPORT("\x1B[43;30m針のシンプルモデル登録失敗しました。\n\x1B[m"); + } + + modelData = dComIfG_getObjectRes("Fshop", 6); + JUT_ASSERT(3362, modelData != NULL); + if (dComIfGp_addSimpleModel((J3DModelData*)modelData, fopAcM_GetRoomNo(actor), 0) == -1) { + OS_REPORT("\x1B[43;30mリングのシンプルモデル登録失敗しました。\n\x1B[m"); + } + + i_this->field_0x6b7c = 1; + + for (int i = 0; i < 8; i++) { + fopAcM_createChild(PROC_FSHOP, fopAcM_GetID(actor), i - 155, &actor->current.pos, fopAcM_GetRoomNo(actor), NULL, NULL, -1, NULL); + } + + fopAcM_createChild(PROC_FSHOP, fopAcM_GetID(actor), 0xFFFFFF23, &actor->current.pos, fopAcM_GetRoomNo(actor), NULL, NULL, -1, NULL); + + u8 sp10 = 1; + #if VERSION == VERSION_GCN_PAL || VERSION == VERSION_WII_PAL || PLATFORM_SHIELD + if (dComIfGs_getPalLanguage() == 1) { + sp10 = 2; + } else { + sp10 = 0; + } + #endif + + for (int i = 0; i <= 3; i++) { + static u16 check_kind[] = { + 0xF57F, + 0xF47F, + 0xF37F, + 0xF27F, + }; + + int sp24; + if (sp10 == 1) { + sp24 = 2.54f * dComIfGs_getEventReg(check_kind[i]); + } else { + sp24 = dComIfGs_getEventReg(check_kind[i]); + } + + if (sp24 >= 0xA) { + u32 sp28 = (sp24 << 8) | 0xFFFF0000 | i; + fopAcM_create(PROC_MG_FISH, sp28, &actor->current.pos, fopAcM_GetRoomNo(actor), NULL, NULL, -1); + } + } + + cXyz sp48(-648.0f + YREG_F(7), 215.0f + YREG_F(8), 380.0f + YREG_F(9)); + csXyz sp40(0, 0, 0); + fopAcM_create(PROC_OBJ_KAGE, 0xFFFFFF01, &sp48, fopAcM_GetRoomNo(actor), &sp40, NULL, -1); + + for (int i = 0; i < 8; i++) { + fopAcM_create(PROC_MG_FISH, 0xFFFF2005, &actor->current.pos, fopAcM_GetRoomNo(actor), NULL, NULL, -1); + } + + sp48.set(-131.0f, 3000.0f + nREG_F(7), -4500.0f); + fopAcM_create(PROC_NPC_TK, -1, &sp48, fopAcM_GetRoomNo(actor), NULL, NULL, -1); + + for (int i = 0; i < 5; i++) { + sp48.set(-450.0f, 0.0f, -878.0f); + fopAcM_create(PROC_BD, 0xFFFFFFFF, &sp48, fopAcM_GetRoomNo(actor), NULL, NULL, -1); + } + } + + return sp3C; } /* 808708BC-808708DC -00001 0020+00 1/0 0/0 0/0 .data l_daFshop_Method */ diff --git a/src/d/actor/d_a_mirror.cpp b/src/d/actor/d_a_mirror.cpp index 06812298a1..792f1e7fe9 100644 --- a/src/d/actor/d_a_mirror.cpp +++ b/src/d/actor/d_a_mirror.cpp @@ -342,16 +342,16 @@ void dMirror_packet_c::mainDraw() { f32 var_f5; f32 var_f6; if (view_port->x_orig != 0.0f) { - var_f3 = (((view_port->x_orig * 2.0f) + view_port->width) * 0.5f) - (608.0f / 2); - var_f5 = 608.0f; + var_f3 = (((view_port->x_orig * 2.0f) + view_port->width) * 0.5f) - (FB_WIDTH / 2); + var_f5 = FB_WIDTH; } else { var_f3 = view_port->x_orig; var_f5 = view_port->width; } if (view_port->y_orig != 0.0f) { - var_f4 = (((view_port->y_orig * 2.0f) + view_port->height) * 0.5f) - (448.0f / 2); - var_f6 = 448.0f; + var_f4 = (((view_port->y_orig * 2.0f) + view_port->height) * 0.5f) - (FB_HEIGHT / 2); + var_f6 = FB_HEIGHT; } else { var_f4 = view_port->y_orig; var_f6 = view_port->height; diff --git a/src/d/actor/d_a_movie_player.cpp b/src/d/actor/d_a_movie_player.cpp index 97976d4e39..0a0b1ff8d3 100644 --- a/src/d/actor/d_a_movie_player.cpp +++ b/src/d/actor/d_a_movie_player.cpp @@ -2977,9 +2977,9 @@ static void daMP_THPGXYuv2RgbSetup(GXRenderModeObj const* param_0) { int height = param_0->efbHeight; f32 var_f31 = 0.0f; - #if PLATFORM_WII || PLATFORM_SHIELD + #if WIDESCREEN_SUPPORT if (!mDoGph_gInf_c::isWide()) { - var_f31 = ((u16)height - (width * 808.0f) / 608.0f) * 0.5f; + var_f31 = ((u16)height - (width * 808.0f) / FB_WIDTH) * 0.5f; } #endif diff --git a/src/d/actor/d_a_npc.cpp b/src/d/actor/d_a_npc.cpp index 3e0835750c..5bbea1652e 100644 --- a/src/d/actor/d_a_npc.cpp +++ b/src/d/actor/d_a_npc.cpp @@ -2646,7 +2646,7 @@ BOOL daNpcT_chkActorInScreen(fopAc_ac_c* i_ActorP, f32 param_1, f32 param_2, f32 for (int i = 0; i < 8; i++) { mDoLib_project(&pos_array[i], &proj); - if (0.0f < proj.x && proj.x < 608.0f && 0.0f < proj.y && proj.y < 448.0f) { + if (0.0f < proj.x && proj.x < FB_WIDTH && 0.0f < proj.y && proj.y < FB_HEIGHT) { continue; } return false; diff --git a/src/d/actor/d_a_npc_henna.cpp b/src/d/actor/d_a_npc_henna.cpp index 5f123d08c7..ca7879f6f3 100644 --- a/src/d/actor/d_a_npc_henna.cpp +++ b/src/d/actor/d_a_npc_henna.cpp @@ -1868,14 +1868,14 @@ static void demo_camera_shop(npc_henna_class* i_this) { } case 73: { koro_shop = (fshop_class*)fpcM_Search(s_koro2ball_sub, i_this); - unkXyz_54 = koro_shop->current.pos; + unkXyz_54 = koro_shop->actor.current.pos; fshop = (fshop_class*)fpcM_Search(s_shop_sub, i_this); cMtx_YrotS(*calc_mtx, fshop->field_0x4060); unkXyz_78.x = -500.0f; unkXyz_78.y = 600.0f; unkXyz_78.z = 0.0f; MtxPosition(&unkXyz_78, &unkXyz_60); - unkXyz_60 += koro_shop->current.pos; + unkXyz_60 += koro_shop->actor.current.pos; if (koro2_reset != 0) { koro2_reset = 0; i_this->field_0x76c = unkXyz_54; diff --git a/src/d/actor/d_a_obj_ari.cpp b/src/d/actor/d_a_obj_ari.cpp index e8e614956b..0a5a9044f7 100644 --- a/src/d/actor/d_a_obj_ari.cpp +++ b/src/d/actor/d_a_obj_ari.cpp @@ -531,7 +531,7 @@ void daObjARI_c::Z_BufferChk() { } else { trim_height = 0.0f; } - if (vec2.x > 0.0f && vec2.x < 608.0f && vec2.y > trim_height && vec2.y < 448.0f - trim_height) { + if (vec2.x > 0.0f && vec2.x < FB_WIDTH && vec2.y > trim_height && vec2.y < FB_HEIGHT - trim_height) { dComIfGd_peekZ(vec2.x, vec2.y, &mBufferZ); } diff --git a/src/d/actor/d_a_obj_cho.cpp b/src/d/actor/d_a_obj_cho.cpp index 3425ccf1ac..e41241cb7e 100644 --- a/src/d/actor/d_a_obj_cho.cpp +++ b/src/d/actor/d_a_obj_cho.cpp @@ -316,7 +316,7 @@ void daObjCHO_c::Z_BufferChk() { } else { trim_height = 0.0f; } - if (vec2.x > 0.0f && vec2.x < 608.0f && vec2.y > trim_height && vec2.y < 448.0f - trim_height) { + if (vec2.x > 0.0f && vec2.x < FB_WIDTH && vec2.y > trim_height && vec2.y < FB_HEIGHT - trim_height) { dComIfGd_peekZ(vec2.x, vec2.y, &mBufferZ); } diff --git a/src/d/actor/d_a_obj_crvfence.cpp b/src/d/actor/d_a_obj_crvfence.cpp index 4803d1ddaa..2c80397efe 100644 --- a/src/d/actor/d_a_obj_crvfence.cpp +++ b/src/d/actor/d_a_obj_crvfence.cpp @@ -242,7 +242,7 @@ bool daObjCRVFENCE_c::checkViewArea(cXyz* param_1) { #ifdef DEBUG if (sp24.x >= 0.0f) { - if (sp24.y <= 640.0f) { + if (sp24.y <= FB_WIDTH) { bVar1 = true; } } @@ -251,7 +251,7 @@ bool daObjCRVFENCE_c::checkViewArea(cXyz* param_1) { bVar1 = false; if (sp24.y >= 0.0f) { - if (sp24.y <= 456.0f) { + if (sp24.y <= FB_HEIGHT) { bVar1 = true; } } @@ -261,7 +261,7 @@ bool daObjCRVFENCE_c::checkViewArea(cXyz* param_1) { } } #else - if (sp24.x >= 0.0f && sp24.x <= 608.0f && sp24.y >= 0.0f && sp24.y <= 448.0f) { + if (sp24.x >= 0.0f && sp24.x <= FB_WIDTH && sp24.y >= 0.0f && sp24.y <= FB_HEIGHT) { rv = true; } #endif diff --git a/src/d/actor/d_a_obj_crvhahen.cpp b/src/d/actor/d_a_obj_crvhahen.cpp index 20a6163d9a..f0e40a0b18 100644 --- a/src/d/actor/d_a_obj_crvhahen.cpp +++ b/src/d/actor/d_a_obj_crvhahen.cpp @@ -151,7 +151,7 @@ bool daObjCRVHAHEN_c::checkViewArea(cXyz* i_this) { bool ret = false; - if (proj.x >= 0.0f && proj.x <= 608.0f && proj.y >= 0.0f && proj.y <= 448.0f) { + if (proj.x >= 0.0f && proj.x <= FB_WIDTH && proj.y >= 0.0f && proj.y <= FB_HEIGHT) { ret = true; } diff --git a/src/d/actor/d_a_obj_dan.cpp b/src/d/actor/d_a_obj_dan.cpp index 01fdcdee3a..33af5795ea 100644 --- a/src/d/actor/d_a_obj_dan.cpp +++ b/src/d/actor/d_a_obj_dan.cpp @@ -292,7 +292,7 @@ void daObjDAN_c::Z_BufferChk() { } else { trim_height = 0.0f; } - if (vec2.x > 0.0f && vec2.x < 608.0f && vec2.y > trim_height && vec2.y < 448.0f - trim_height) { + if (vec2.x > 0.0f && vec2.x < FB_WIDTH && vec2.y > trim_height && vec2.y < FB_HEIGHT - trim_height) { dComIfGd_peekZ(vec2.x, vec2.y, &mBufferZ); } diff --git a/src/d/actor/d_a_obj_gomikabe.cpp b/src/d/actor/d_a_obj_gomikabe.cpp index ea19451152..590ae92c7e 100644 --- a/src/d/actor/d_a_obj_gomikabe.cpp +++ b/src/d/actor/d_a_obj_gomikabe.cpp @@ -219,7 +219,7 @@ bool daObjGOMIKABE_c::checkViewArea(cXyz param_1) { Vec local_24; mDoLib_project(¶m_1, &local_24); bool rv = false; - if (local_24.x >= 0.0f && local_24.x <= 608.0f && local_24.y >= 0.0f && local_24.y <= 448.0f) { + if (local_24.x >= 0.0f && local_24.x <= FB_WIDTH && local_24.y >= 0.0f && local_24.y <= FB_HEIGHT) { rv = true; } diff --git a/src/d/actor/d_a_obj_groundwater.cpp b/src/d/actor/d_a_obj_groundwater.cpp index 1bc17a6c36..8ca9c0c65a 100644 --- a/src/d/actor/d_a_obj_groundwater.cpp +++ b/src/d/actor/d_a_obj_groundwater.cpp @@ -324,7 +324,9 @@ int daGrdWater_c::Draw() { Mtx afStack_50; C_MTXLightPerspective(afStack_50, dComIfGd_getView()->fovy, dComIfGd_getView()->aspect, 1.0f, 1.0f, -0.01f, 0.0f); + #if WIDESCREEN_SUPPORT mDoGph_gInf_c::setWideZoomLightProjection(afStack_50); + #endif mtxInfo->setEffectMtx(afStack_50); modelData2->simpleCalcMaterial(0, (MtxP)j3dDefaultMtx); } diff --git a/src/d/actor/d_a_obj_hhashi.cpp b/src/d/actor/d_a_obj_hhashi.cpp index 1f30fa0e73..0b2dbd0d7e 100644 --- a/src/d/actor/d_a_obj_hhashi.cpp +++ b/src/d/actor/d_a_obj_hhashi.cpp @@ -229,7 +229,7 @@ bool daObjHHASHI_c::checkViewArea(int param_1) { Vec local_20; mDoLib_project(&field_0x5b0[param_1], &local_20); bool rv = false; - if (local_20.x >= 0.0f && local_20.x <= 608.0f && local_20.y >= 0.0f && local_20.y <= 448.0f) { + if (local_20.x >= 0.0f && local_20.x <= FB_WIDTH && local_20.y >= 0.0f && local_20.y <= FB_HEIGHT) { rv = true; } return rv; diff --git a/src/d/actor/d_a_obj_kabuto.cpp b/src/d/actor/d_a_obj_kabuto.cpp index a19eca796c..0d387d56d2 100644 --- a/src/d/actor/d_a_obj_kabuto.cpp +++ b/src/d/actor/d_a_obj_kabuto.cpp @@ -457,7 +457,7 @@ void daObjKABUTO_c::Z_BufferChk() { } else { trim_height = 0.0f; } - if (vec2.x > 0.0f && vec2.x < 608.0f && vec2.y > trim_height && vec2.y < 448.0f - trim_height) { + if (vec2.x > 0.0f && vec2.x < FB_WIDTH && vec2.y > trim_height && vec2.y < FB_HEIGHT - trim_height) { dComIfGd_peekZ(vec2.x, vec2.y, &mBufferZ); } diff --git a/src/d/actor/d_a_obj_kamakiri.cpp b/src/d/actor/d_a_obj_kamakiri.cpp index 86e48c13fa..51ed44d686 100644 --- a/src/d/actor/d_a_obj_kamakiri.cpp +++ b/src/d/actor/d_a_obj_kamakiri.cpp @@ -543,11 +543,11 @@ void daObjKAM_c::Z_BufferChk() { cameraHeight = 0.0f; } #ifdef DEBUG -#define Z_BUFFERCHK_X_MAX 640.0f -#define Z_BUFFERCHK_Y_MAX 456.0f +#define Z_BUFFERCHK_X_MAX FB_WIDTH +#define Z_BUFFERCHK_Y_MAX FB_HEIGHT #else -#define Z_BUFFERCHK_X_MAX 608.0f -#define Z_BUFFERCHK_Y_MAX 448.0f +#define Z_BUFFERCHK_X_MAX FB_WIDTH +#define Z_BUFFERCHK_Y_MAX FB_HEIGHT #endif if (currentProj.x > 0.0f && currentProj.x < Z_BUFFERCHK_X_MAX && currentProj.y > cameraHeight && currentProj.y < Z_BUFFERCHK_Y_MAX - cameraHeight) diff --git a/src/d/actor/d_a_obj_katatsumuri.cpp b/src/d/actor/d_a_obj_katatsumuri.cpp index f65c412676..8493976d02 100644 --- a/src/d/actor/d_a_obj_katatsumuri.cpp +++ b/src/d/actor/d_a_obj_katatsumuri.cpp @@ -622,10 +622,10 @@ void daObjKAT_c::Z_BufferChk() { #if DEBUG #define KAT_Z_BUFFERCHK_MAX_X 640.0f -#define KAT_Z_BUFFERCHK_MAX_Y 456.0f +#define KAT_Z_BUFFERCHK_MAX_Y FB_HEIGHT #else -#define KAT_Z_BUFFERCHK_MAX_X 608.0f -#define KAT_Z_BUFFERCHK_MAX_Y 448.0f +#define KAT_Z_BUFFERCHK_MAX_X FB_WIDTH +#define KAT_Z_BUFFERCHK_MAX_Y FB_HEIGHT #endif if (projected.x > 0.0f && projected.x < KAT_Z_BUFFERCHK_MAX_X && projected.y > unkFloat1 && projected.y < KAT_Z_BUFFERCHK_MAX_Y - unkFloat1) diff --git a/src/d/actor/d_a_obj_kuwagata.cpp b/src/d/actor/d_a_obj_kuwagata.cpp index 69354bbd35..484e3400c1 100644 --- a/src/d/actor/d_a_obj_kuwagata.cpp +++ b/src/d/actor/d_a_obj_kuwagata.cpp @@ -558,8 +558,8 @@ void daObjKUW_c::Z_BufferChk() { trimHeight = 0.0f; } - if (local_5c.x > 0.0f && local_5c.x < 608.0f && - local_5c.y > trimHeight && local_5c.y < 448.0f - trimHeight) { + if (local_5c.x > 0.0f && local_5c.x < FB_WIDTH && + local_5c.y > trimHeight && local_5c.y < FB_HEIGHT - trimHeight) { dComIfGd_peekZ(local_5c.x, local_5c.y, &field_0x9bc); } diff --git a/src/d/actor/d_a_obj_lv3Water2.cpp b/src/d/actor/d_a_obj_lv3Water2.cpp index db18100211..c6ce4fab6f 100644 --- a/src/d/actor/d_a_obj_lv3Water2.cpp +++ b/src/d/actor/d_a_obj_lv3Water2.cpp @@ -236,7 +236,7 @@ int daLv3Water2_c::Draw() { Mtx lightProjMtx; C_MTXLightPerspective(lightProjMtx, dComIfGd_getView()->fovy, dComIfGd_getView()->aspect, 1.0f, 1.0f, -0.01f, 0); - #ifdef DEBUG + #if WIDESCREEN_SUPPORT mDoGph_gInf_c::setWideZoomLightProjection(lightProjMtx); /* TODO: Handle screen capture perspective calculations */ #endif diff --git a/src/d/actor/d_a_obj_mhole.cpp b/src/d/actor/d_a_obj_mhole.cpp index 53074c05ca..c7229120dd 100644 --- a/src/d/actor/d_a_obj_mhole.cpp +++ b/src/d/actor/d_a_obj_mhole.cpp @@ -342,7 +342,9 @@ int daObjMHole_c::draw() { Mtx effect_mtx; MTXLightPerspective(effect_mtx, dComIfGd_getView()->fovy, dComIfGd_getView()->aspect, 1.0f, 1.0f, -0.01f, 0.0f); + #if WIDESCREEN_SUPPORT mDoGph_gInf_c::setWideZoomLightProjection(effect_mtx); + #endif tex_mtx_info->setEffectMtx(effect_mtx); modelData->simpleCalcMaterial((MtxP)j3dDefaultMtx); } diff --git a/src/d/actor/d_a_obj_mirror_chain.cpp b/src/d/actor/d_a_obj_mirror_chain.cpp index 3436a0d3b0..63368abb13 100644 --- a/src/d/actor/d_a_obj_mirror_chain.cpp +++ b/src/d/actor/d_a_obj_mirror_chain.cpp @@ -7,186 +7,280 @@ #include "d/actor/d_a_obj_mirror_chain.h" #include "d/d_com_inf_game.h" -#include "dol2asm.h" /* 80C98080-80C98084 -00001 0004+00 3/3 0/0 0/0 .data l_arcName */ static char const* l_arcName = "MR-Chain"; -/* ############################################################################################## */ -/* 80C98028-80C9802C 000000 0004+00 2/2 0/0 0/0 .rodata @3915 */ -SECTION_RODATA static u32 const lit_3915 = 0x3C8EFA35; -COMPILER_STRIP_GATE(0x80C98028, &lit_3915); - -/* 80C9802C-80C98030 000004 0004+00 0/1 0/0 0/0 .rodata @3916 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3916 = 0.5f; -COMPILER_STRIP_GATE(0x80C9802C, &lit_3916); -#pragma pop - -/* 80C98034-80C98038 00000C 0004+00 0/1 0/0 0/0 .rodata @3918 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3918 = 2.0f; -COMPILER_STRIP_GATE(0x80C98034, &lit_3918); -#pragma pop - -/* 80C98038-80C9803C 000010 0004+00 0/1 0/0 0/0 .rodata @3919 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3919 = 304.0f; -COMPILER_STRIP_GATE(0x80C98038, &lit_3919); -#pragma pop - -/* 80C9803C-80C98040 000014 0004+00 0/1 0/0 0/0 .rodata @3920 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3920 = 608.0f; -COMPILER_STRIP_GATE(0x80C9803C, &lit_3920); -#pragma pop - -/* 80C98040-80C98044 000018 0004+00 0/1 0/0 0/0 .rodata @3921 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3921 = 224.0f; -COMPILER_STRIP_GATE(0x80C98040, &lit_3921); -#pragma pop - -/* 80C98044-80C98048 00001C 0004+00 0/1 0/0 0/0 .rodata @3922 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3922 = 448.0f; -COMPILER_STRIP_GATE(0x80C98044, &lit_3922); -#pragma pop - -/* 80C98048-80C98050 000020 0004+04 1/3 0/0 0/0 .rodata @3923 */ -SECTION_RODATA static f32 const lit_3923[1 + 1 /* padding */] = { - 1.0f, - /* padding */ - 0.0f, -}; -COMPILER_STRIP_GATE(0x80C98048, &lit_3923); - -/* 80C98050-80C98058 000028 0008+00 0/1 0/0 0/0 .rodata @3925 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3925[8] = { - 0x43, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80C98050, &lit_3925); -#pragma pop - /* 80C98138-80C98148 000000 0010+00 2/2 0/0 0/0 .bss l_scissor */ static u32 l_scissor[4]; -/* 80C96698-80C96DAC 000078 0714+00 1/0 0/0 0/0 .text draw__22dScissorBegin_packet_cFv */ -void dScissorBegin_packet_c::draw() { - // NONMATCHING -} +#if DEBUG +static u8 l_begin; +#endif -// Temporary fake function to make the cXyz destructor appear here -// delete once dScissorBegin_packet_c::draw() is matched -static void fake() { - cXyz vec; - vec.normalize(); +/* 80C96698-80C96DAC 000078 0714+00 1/0 0/0 0/0 .text draw__22dScissorBegin_packet_cFv */ +// NONMATCHING - slight stack order issue +void dScissorBegin_packet_c::draw() { + GXGetScissor(&l_scissor[0], &l_scissor[1], &l_scissor[2], &l_scissor[3]); + + #if DEBUG + JUT_ASSERT(76, !l_begin); + l_begin = TRUE; + #endif + + f32 var_f31 = FLT_MAX; + f32 var_f30 = FLT_MAX; + f32 sp7C = -FLT_MAX; + f32 sp78 = -FLT_MAX; + f32 sp74 = -FLT_MAX; + + f32 sp70 = l_scissor[0]; + f32 sp6C = sp70 + l_scissor[2]; + f32 sp68 = l_scissor[1]; + f32 sp64 = sp68 + l_scissor[3]; + + cXyz spEC[4]; + cXyz sp11C; + int sp60 = 4; + view_class* view_p = dComIfGd_getView(); + f32 sp58 = -view_p->near; + + cXyz* sp54 = mQuad; + cXyz* var_r30 = spEC; + + int sp50 = 0; + int sp4C = 0; + + for (int i = 0; i < 4; i++) { + cMtx_multVec(view_p->viewMtx, sp54, var_r30); + if (var_r30->z >= sp58) { + sp50++; + } else { + sp4C = i; + } + + sp54++; + var_r30++; + } + + if (sp50 >= 4) { + GXSetScissor(FB_WIDTH + 1, FB_HEIGHT + 1, 0, 0); + return; + } + + if (sp50 != 0) { + int sp44 = -1; + + for (int i = 0; i < 4; i++) { + int sp3C = (sp4C + 1) % 4; + if (sp44 < 0) { + if (spEC[sp3C].z >= sp58) { + sp44 = sp3C; + } + } else if (spEC[sp3C].z < sp58) { + int sp38 = (sp44 + 3) % 4; + cXyz spE0 = spEC[sp44] - spEC[sp38]; + f32 sp34 = (sp58 - spEC[sp38].z) / spE0.z; + spE0 *= sp34; + spEC[sp60] = spEC[sp38] + spE0; + + sp60++; + + spE0 = spEC[sp4C] - spEC[sp3C]; + sp34 = (sp58 - spEC[sp3C].z) / spE0.z; + spE0 *= sp34; + spEC[sp4C] = spEC[sp3C] + spE0; + + for (int sp30 = sp44; sp30 != sp4C; sp30 = (sp30 + 1) % 4) { + spEC[sp30] = spEC[sp4C]; + } + break; + } + + sp4C = (sp4C + 1) % 4; + } + } + + f32 sp2C = view_p->fovy; + f32 sp28 = view_p->aspect; + f32 sp24 = std::tan(0.017453292f * (0.5f * sp2C)); + + f32 sp20, sp1C, sp18, sp14; + view_port_class* viewport_p = dComIfGd_getViewport(); + if (0.0f != viewport_p->x_orig) { + sp20 = (0.5f * ((2.0f * viewport_p->x_orig) + viewport_p->width)) - (FB_WIDTH / 2); + sp18 = FB_WIDTH; + } else { + sp20 = viewport_p->x_orig; + sp18 = viewport_p->width; + } + + if (0.0f != viewport_p->y_orig) { + sp1C = (0.5f * ((2.0f * viewport_p->y_orig) + viewport_p->height)) - (FB_HEIGHT / 2); + sp14 = FB_HEIGHT; + } else { + sp1C = viewport_p->y_orig; + sp14 = viewport_p->height; + } + + var_r30 = spEC; + for (int i = 0; i < sp60; i++) { + var_r30->y = var_r30->y / (var_r30->z * sp24); + var_r30->x = var_r30->x / (sp28 * (-var_r30->z * sp24)); + + #if WIDESCREEN_SUPPORT + if (mDoGph_gInf_c::isWideZoom()) { + var_r30->x *= mDoGph_gInf_c::getScale(); + var_r30->y *= mDoGph_gInf_c::getScale(); + } + #endif + + var_r30->x = sp20 + ((1.0f + var_r30->x) * (0.5f * sp18)); + var_r30->y = sp1C + ((1.0f + var_r30->y) * (0.5f * sp14)); + + if (var_r30->x < var_f31) { + var_f31 = var_r30->x; + } + if (var_r30->x > sp7C) { + sp7C = var_r30->x; + } + if (var_r30->y < var_f30) { + var_f30 = var_r30->y; + } + if (var_r30->y > sp78) { + sp78 = var_r30->y; + } + if (var_r30->z > sp74) { + sp74 = var_r30->z; + } + + var_r30++; + } + + var_r30 = spEC; + cXyz spD4 = var_r30[1] - var_r30[0]; + cXyz spC8; + cXyz spBC(0.0f, 0.0f, 1.0f); + for (int i = 0; i < 2; i++) { + var_r30++; + spC8 = var_r30[1] - var_r30[0]; + if (!spD4.isZero()) { + spBC = spD4.outprod(spC8); + if (spBC.z < 0.0f) { + break; + } + } + + spD4 = spC8; + } + + if (spBC.z < 0.0f || var_f31 > sp6C || sp7C < sp70 || var_f30 > sp64 || sp78 < sp68) { + GXSetScissor(FB_WIDTH + 1, FB_HEIGHT + 1, 0, 0); + } else { + var_f31 = cLib_minLimit(var_f31, sp70); + sp7C = cLib_maxLimit(sp7C, sp6C); + var_f30 = cLib_minLimit(var_f30, sp68); + sp78 = cLib_maxLimit(sp78, sp64); + GXSetScissor((u32)var_f31, (u32)var_f30, (u32)(sp7C - var_f31), (u32)(sp78 - var_f30)); + } } /* 80C96DE8-80C96E20 0007C8 0038+00 1/0 0/0 0/0 .text draw__20dScissorEnd_packet_cFv */ void dScissorEnd_packet_c::draw() { + #if DEBUG + JUT_ASSERT(246, l_begin); + l_begin = FALSE; + #endif + GXSetScissor(l_scissor[0], l_scissor[1], l_scissor[2], l_scissor[3]); } /* 80C96E20-80C96E40 000800 0020+00 1/1 0/0 0/0 .text createSolidHeap__FP10fopAc_ac_c */ static int createSolidHeap(fopAc_ac_c* i_this) { - return static_cast(i_this)->createHeap(); + return ((daObjMirrorChain_c*)i_this)->createHeap(); } -/* ############################################################################################## */ -/* 80C98058-80C98060 000030 0008+00 1/1 0/0 0/0 .rodata @4164 */ -SECTION_RODATA static u8 const lit_4164[8] = { - 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80C98058, &lit_4164); - -extern void* __vt__12J3DFrameCtrl[3]; - /* 80C96E40-80C975A4 000820 0764+00 1/1 0/0 0/0 .text createHeap__18daObjMirrorChain_cFv */ int daObjMirrorChain_c::createHeap() { - J3DModelData* model_data; + J3DModelData* modelData; + /* dSv_event_flag_c::F_0354 - Cutscene - [cutscene] Mirror complete */ if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[354])) { - model_data = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 16); - mpModel = mDoExt_J3DModel__create(model_data, 0x80000, 0x11000284); + modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 16); + JUT_ASSERT(306, modelData != NULL); + mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000284); - J3DAnmTevRegKey* brk_anm = (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName, 21); + J3DAnmTevRegKey* brk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName, 21); + JUT_ASSERT(316, brk != NULL); mpBrkAnm = new mDoExt_brkAnm(); - if (mpBrkAnm == NULL || !mpBrkAnm->init(model_data, brk_anm, 1, 2, 1.0f, 0, -1)) { + if (mpBrkAnm == NULL || !mpBrkAnm->init(modelData, brk, 1, 2, 1.0f, 0, -1)) { return 0; } } else { - model_data = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 15); - mpModel = mDoExt_J3DModel__create(model_data, 0x80000, 0x11000084); + modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 15); + JUT_ASSERT(323, modelData != NULL); + mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); mpBrkAnm = NULL; } + if (mpModel == NULL) { return 0; } /* dSv_event_flag_c::F_0354 - Cutscene - [cutscene] Mirror complete */ if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[354])) { - J3DModelData* portal_model_data = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 12); - mpPortalModel = mDoExt_J3DModel__create(portal_model_data, 0, 0x11000084); + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 12); + JUT_ASSERT(336, modelData != NULL); + mpPortalModel = mDoExt_J3DModel__create(modelData, 0, 0x11000084); if (mpPortalModel == NULL) { return 0; } - J3DAnmTransform* bck_anm = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, 9); + J3DAnmTransform* bck = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, 9); + JUT_ASSERT(344, bck != NULL); mpBckAnm = new mDoExt_bckAnm(); - if (mpBckAnm == NULL - || !mpBckAnm->init(bck_anm, 1, 2, 1.0f, 0, -1, false)) - { + if (mpBckAnm == NULL || !mpBckAnm->init(bck, 1, 2, 1.0f, 0, -1, false)) { return 0; } mpBckAnm->setEndFrame(300); - J3DAnmTevRegKey* portal_brk_anm = (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName, 20); + J3DAnmTevRegKey* brk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName, 20); + JUT_ASSERT(353, brk != NULL); mpPortalBrkAnm = new mDoExt_brkAnm(); - if (mpPortalBrkAnm == NULL - || !mpPortalBrkAnm->init(portal_model_data, portal_brk_anm, 1, 2, 1.0f, 0, -1)) + if (mpPortalBrkAnm == NULL || !mpPortalBrkAnm->init(modelData, brk, 1, 0, 1.0f, 0, -1)) { return 0; } - mpPortalBrkAnm->setFrame(portal_brk_anm->getFrameMax()); + mpPortalBrkAnm->setFrame(brk->getFrameMax()); cBgD_t* dzb = (cBgD_t*)dComIfG_getObjectRes(l_arcName, 26); if (mBgW[1].Set(dzb, 1, &mMtx)) { return 0; } + mBgW[0] = mBgW[1]; } else { - J3DAnmTransform* bck_anm = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, 8); + J3DAnmTransform* bck = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, 8); + JUT_ASSERT(367, bck != NULL); mpBckAnm = new mDoExt_bckAnm(); - bool b = fopAcM_isSwitch(this, getSwitchNo()) - /* dSv_event_flag_c::F_0361 - Arbiter's Grounds - Spun the spinning pillars */ - || dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[361]); - f32 rate = b ? 1.0f : 0.0f; - if (mpBckAnm == NULL - || !mpBckAnm->init(bck_anm, 1, 0, rate, 0, -1, false)) + + /* dSv_event_flag_c::F_0361 - Arbiter's Grounds - Spun the spinning pillars */ + f32 rate = (fopAcM_isSwitch(this, getSwitchNo()) || dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[361])) ? 1.0f : 0.0f; + if (mpBckAnm == NULL || !mpBckAnm->init(bck, 1, 0, rate, 0, -1, false)) { return 0; } - if (fopAcM_isSwitch(this, getSwitchNo()) - /* dSv_event_flag_c::F_0361 - Arbiter's Grounds - Spun the spinning pillars */ - || dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[361])) - { - mpBckAnm->setFrame(bck_anm->getFrameMax()); + + /* dSv_event_flag_c::F_0361 - Arbiter's Grounds - Spun the spinning pillars */ + if (fopAcM_isSwitch(this, getSwitchNo()) || dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[361])) { + mpBckAnm->setFrame(bck->getFrameMax()); } - J3DAnmTevRegKey* brk_anm = (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName, 19); + J3DAnmTevRegKey* brk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName, 19); + JUT_ASSERT(381, brk != NULL); mpBrkAnm = new mDoExt_brkAnm(); - if (mpBrkAnm == NULL - || !mpBrkAnm->init(model_data, brk_anm, 1, 0, 1.0f, 0, -1)) + if (mpBrkAnm == NULL || !mpBrkAnm->init(modelData, brk, 1, 0, 0.0f, 0, -1)) { return 0; } @@ -208,13 +302,6 @@ int daObjMirrorChain_c::createHeap() { return 1; } - -/* 80C975A4-80C975EC 000F84 0048+00 1/0 0/0 0/0 .text __dt__12J3DFrameCtrlFv */ -// J3DFrameCtrl::~J3DFrameCtrl() { -extern "C" void __dt__12J3DFrameCtrlFv() { - // NONMATCHING -} - /* 80C975EC-80C97618 000FCC 002C+00 1/1 0/0 0/0 .text initBaseMtx__18daObjMirrorChain_cFv */ void daObjMirrorChain_c::initBaseMtx() { @@ -228,9 +315,11 @@ void daObjMirrorChain_c::setBaseMtx() { mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::ZXYrotM(shape_angle); mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); + if (mpPortalModel != NULL) { mpPortalModel->setBaseTRMtx(mDoMtx_stack_c::get()); } + MTXCopy(mDoMtx_stack_c::get(), mMtx); mpActiveBgW->Move(); } @@ -243,32 +332,40 @@ static int daObjMirrorChain_Draw(daObjMirrorChain_c* i_this) { /* 80C976B8-80C97968 001098 02B0+00 1/1 0/0 0/0 .text draw__18daObjMirrorChain_cFv */ int daObjMirrorChain_c::draw() { - static f32 const SCISSOR_CENTER_X = 1799.2f; - static f32 const SCISSOR_CENTER_Y = 4779.58f; - static f32 const SCISSOR_CENTER_Z = -23024.53f; - static f32 const SCISSOR_SIZE = 984.0f; + static const f32 SCISSOR_CENTER_X = 1799.2f; + static const f32 SCISSOR_CENTER_Y = 4779.58f; + static const f32 SCISSOR_CENTER_Z = -23024.53f; + static const f32 SCISSOR_SIZE = 984.0f; + g_env_light.settingTevStruct(0x10, ¤t.pos, &tevStr); g_env_light.setLightTevColorType_MAJI(mpModel, &tevStr); + /* dSv_event_flag_c::F_0354 - Cutscene - [cutscene] Mirror complete */ if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[354])) { g_env_light.setLightTevColorType_MAJI(mpPortalModel, &tevStr); + if (mpBckAnm != NULL) { mpBckAnm->entry(mpPortalModel->getModelData()); } + if (mpBrkAnm != NULL) { mpBrkAnm->entry(mpModel->getModelData()); } + if (mpPortalBrkAnm != NULL) { mpPortalBrkAnm->entry(mpPortalModel->getModelData()); } + dComIfGd_setListBG(); mDoExt_modelUpdateDL(mpModel); + static Vec l_offsetScissor[4] = { {SCISSOR_CENTER_X - SCISSOR_SIZE / 2, SCISSOR_CENTER_Y + SCISSOR_SIZE, SCISSOR_CENTER_Z}, {SCISSOR_CENTER_X + SCISSOR_SIZE / 2, SCISSOR_CENTER_Y + SCISSOR_SIZE, SCISSOR_CENTER_Z}, {SCISSOR_CENTER_X + SCISSOR_SIZE / 2, SCISSOR_CENTER_Y, SCISSOR_CENTER_Z}, {SCISSOR_CENTER_X - SCISSOR_SIZE / 2, SCISSOR_CENTER_Y, SCISSOR_CENTER_Z}, }; + cXyz* quad = mScissorBegin.getQuad(); PSMTXMultVecArray(mpModel->getBaseTRMtx(), l_offsetScissor, quad, 4); j3dSys.setDrawBuffer(dComIfGd_getXluListBG(), 0); @@ -276,12 +373,15 @@ int daObjMirrorChain_c::draw() { mDoExt_modelUpdateDL(mpPortalModel); mScissorBegin.entryPacket(); dComIfGd_setList(); + if (mpBckAnm != NULL) { mpBckAnm->remove(mpPortalModel->getModelData()); } + if (mpBrkAnm != NULL) { mpBrkAnm->remove(mpModel->getModelData()); } + if (mpPortalBrkAnm != NULL) { mpPortalBrkAnm->remove(mpPortalModel->getModelData()); } @@ -289,19 +389,24 @@ int daObjMirrorChain_c::draw() { if (mpBckAnm != NULL) { mpBckAnm->entry(mpModel->getModelData()); } + if (mpBrkAnm != NULL) { mpBrkAnm->entry(mpModel->getModelData()); } + dComIfGd_setListBG(); mDoExt_modelUpdateDL(mpModel); dComIfGd_setList(); + if (mpBckAnm != NULL) { mpBckAnm->remove(mpModel->getModelData()); } + if (mpBrkAnm != NULL) { mpBrkAnm->remove(mpModel->getModelData()); } } + return 1; } @@ -311,83 +416,22 @@ static int daObjMirrorChain_Execute(daObjMirrorChain_c* i_this) { return i_this->execute(); } -// this should come automatically from the static data in draw() but it does not - -/* ############################################################################################## */ -/* 80C98060-80C98064 000038 0004+00 0/0 0/0 0/0 .rodata - * SCISSOR_CENTER_X$localstatic3$draw__18daObjMirrorChain_cFv */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const data_80C98060[4] = { - 0x44, - 0xE0, - 0xE6, - 0x66, -}; -COMPILER_STRIP_GATE(0x80C98060, &data_80C98060); -#pragma pop - -/* 80C98064-80C98068 00003C 0004+00 0/0 0/0 0/0 .rodata - * SCISSOR_CENTER_Y$localstatic4$draw__18daObjMirrorChain_cFv */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const data_80C98064[4] = { - 0x45, - 0x95, - 0x5C, - 0xA4, -}; -COMPILER_STRIP_GATE(0x80C98064, &data_80C98064); -#pragma pop - -/* 80C98068-80C9806C 000040 0004+00 0/0 0/0 0/0 .rodata - * SCISSOR_CENTER_Z$localstatic5$draw__18daObjMirrorChain_cFv */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const data_80C98068[4] = { - 0xC6, - 0xB3, - 0xE1, - 0x0F, -}; -COMPILER_STRIP_GATE(0x80C98068, &data_80C98068); -#pragma pop - -/* 80C9806C-80C98070 000044 0004+00 0/0 0/0 0/0 .rodata - * SCISSOR_SIZE$localstatic6$draw__18daObjMirrorChain_cFv */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const data_80C9806C[4] = { - 0x44, - 0x76, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80C9806C, &data_80C9806C); -#pragma pop - -/* 80C98070-80C98074 000048 0004+00 0/1 0/0 0/0 .rodata @4494 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4494 = -1.0f; -COMPILER_STRIP_GATE(0x80C98070, &lit_4494); -#pragma pop - /* 80C97988-80C97BA4 001368 021C+00 1/1 0/0 0/0 .text execute__18daObjMirrorChain_cFv */ int daObjMirrorChain_c::execute() { if (mpBckAnm != NULL) { mpBckAnm->play(); } + if (mpBrkAnm != NULL) { mpBrkAnm->play(); } + if (mpPortalBrkAnm != NULL) { mpPortalBrkAnm->play(); } - /* dSv_event_flag_c::F_0354 - Cutscene - [cutscene] Mirror complete */ - if (!dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[354]) - && mpBckAnm != NULL && mpBckAnm->getPlaySpeed() > 0.0f) { + /* dSv_event_flag_c::F_0354 - Cutscene - [cutscene] Mirror complete */ + if (!dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[354]) && mpBckAnm != NULL && mpBckAnm->getPlaySpeed() > 0.0f) { if (mpActiveBgW == &mBgW[0]) { dComIfG_Bgsp().Release(&mBgW[0]); dComIfG_Bgsp().Regist(&mBgW[1], this); @@ -396,7 +440,7 @@ int daObjMirrorChain_c::execute() { } if (mpEmitter == NULL) { - mpEmitter = dComIfGp_particle_set(0x8acc, ¤t.pos, &shape_angle, NULL); + mpEmitter = dComIfGp_particle_set(dPa_RM(ID_ZF_S_D32_01_MONO02SAND), ¤t.pos, &shape_angle, NULL); cXyz pos; mDoMtx_stack_c::copy(mpModel->getAnmMtx(1)); mDoMtx_stack_c::multVecZero(&pos); @@ -412,7 +456,6 @@ int daObjMirrorChain_c::execute() { return 1; } - /* 80C97BA4-80C97BAC 001584 0008+00 1/0 0/0 0/0 .text * daObjMirrorChain_IsDelete__FP18daObjMirrorChain_c */ static int daObjMirrorChain_IsDelete(daObjMirrorChain_c* i_this) { @@ -423,9 +466,11 @@ daObjMirrorChain_c::~daObjMirrorChain_c() { if (mBgW[0].ChkUsed()) { dComIfG_Bgsp().Release(&mBgW[0]); } + if (mBgW[1].ChkUsed()) { dComIfG_Bgsp().Release(&mBgW[1]); } + dComIfG_resDelete(&mPhaseReq, l_arcName); } @@ -438,40 +483,41 @@ static int daObjMirrorChain_Delete(daObjMirrorChain_c* i_this) { } void daObjMirrorChain_c::create_init() { - if (mpBckAnm != NULL - /* dSv_event_flag_c::F_0354 - Cutscene - [cutscene] Mirror complete */ - && !dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[354])) { + /* dSv_event_flag_c::F_0354 - Cutscene - [cutscene] Mirror complete */ + if (mpBckAnm != NULL && !dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[354])) { mpBckAnm->setPlaySpeed(0.0f); } + mpEmitter = NULL; mBgW[0].SetCrrFunc(NULL); mBgW[0].SetRoomId(fopAcM_GetRoomNo(this)); mBgW[1].SetCrrFunc(NULL); mBgW[1].SetRoomId(fopAcM_GetRoomNo(this)); - bool b = fopAcM_isSwitch(this, getSwitchNo()) - /* dSv_event_flag_c::F_0361 - Arbiter's Grounds - Spun the spinning pillars */ - || dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[361]); - mpActiveBgW = b ? &mBgW[1] : &mBgW[0]; + + /* dSv_event_flag_c::F_0361 - Arbiter's Grounds - Spun the spinning pillars */ + mpActiveBgW = (fopAcM_isSwitch(this, getSwitchNo()) || dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[361])) ? &mBgW[1] : &mBgW[0]; dComIfG_Bgsp().Regist(mpActiveBgW, this); initBaseMtx(); } cPhs__Step daObjMirrorChain_c::create() { fopAcM_ct(this, daObjMirrorChain_c); - cPhs__Step step = (cPhs__Step)dComIfG_resLoad(&mPhaseReq, l_arcName); - if (step == cPhs_COMPLEATE_e) { + + cPhs__Step phase_state = (cPhs__Step)dComIfG_resLoad(&mPhaseReq, l_arcName); + if (phase_state == cPhs_COMPLEATE_e) { if (!fopAcM_entrySolidHeap(this, createSolidHeap, 0x71b0)) { return cPhs_ERROR_e; } create_init(); } - return step; + + return phase_state; } /* 80C97D24-80C97F3C 001704 0218+00 1/0 0/0 0/0 .text daObjMirrorChain_Create__FP10fopAc_ac_c */ static cPhs__Step daObjMirrorChain_Create(fopAc_ac_c* i_this) { fopAcM_GetID(i_this); - return static_cast(i_this)->create(); + return ((daObjMirrorChain_c*)i_this)->create(); } /* 80C980B4-80C980D4 -00001 0020+00 1/0 0/0 0/0 .data l_daObjMirrorChain_Method */ @@ -500,10 +546,3 @@ extern actor_process_profile_definition g_profile_Obj_MirrorChain = { fopAc_ACTOR_e, fopAc_CULLBOX_CUSTOM_e, }; - -/* 80C98104-80C98110 000084 000C+00 2/2 0/0 0/0 .data __vt__12J3DFrameCtrl */ -SECTION_DATA extern void* __vt__12J3DFrameCtrl[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12J3DFrameCtrlFv, -}; diff --git a/src/d/actor/d_a_obj_octhashi.cpp b/src/d/actor/d_a_obj_octhashi.cpp index b291664040..013ab862e4 100644 --- a/src/d/actor/d_a_obj_octhashi.cpp +++ b/src/d/actor/d_a_obj_octhashi.cpp @@ -187,8 +187,8 @@ void daObjOCTHASHI_c::SphAction() { f32 fvals_3888[2] = {2.125f, 0.0f}; f32 fvals_3889[2] = {0.0f, 0.0f}; f32 fval_3890[1] = {2000.0f}; - f32 fval_3903[1] = {608.0f}; - f32 fval_3904[1] = {448.0f}; + f32 fval_3903[1] = {FB_WIDTH}; + f32 fval_3904[1] = {FB_HEIGHT}; for (int idx = 0; idx < mPieceNum; ++idx) { if (mColliders[idx].ChkCoHit()) { fopAc_ac_c* hit_actor = dCc_GetAc(mColliders[idx].GetCoHitObj()->GetAc()); diff --git a/src/d/actor/d_a_obj_rstair.cpp b/src/d/actor/d_a_obj_rstair.cpp index c5f90996f3..5b4d6c90da 100644 --- a/src/d/actor/d_a_obj_rstair.cpp +++ b/src/d/actor/d_a_obj_rstair.cpp @@ -346,7 +346,9 @@ int daObjRotStair_c::Draw() { Mtx lightMtx; C_MTXLightPerspective(lightMtx, dComIfGd_getView()->fovy, dComIfGd_getView()->aspect, 1.0f, 1.0f, -0.01f, 0); + #if WIDESCREEN_SUPPORT mDoGph_gInf_c::setWideZoomLightProjection(lightMtx); + #endif texMtxInfo->setEffectMtx(lightMtx); modelData->simpleCalcMaterial(0, (MtxP)j3dDefaultMtx); } diff --git a/src/d/actor/d_a_obj_ten.cpp b/src/d/actor/d_a_obj_ten.cpp index a6433d378d..ce6e576b2a 100644 --- a/src/d/actor/d_a_obj_ten.cpp +++ b/src/d/actor/d_a_obj_ten.cpp @@ -624,8 +624,8 @@ void daObjTEN_c::Z_BufferChk() { } else { trimHeight = 0.0f; } - if (local_5c.x > 0.0f && local_5c.x < 608.0f && local_5c.y > trimHeight && - local_5c.y < 448.0f - trimHeight) + if (local_5c.x > 0.0f && local_5c.x < FB_WIDTH && local_5c.y > trimHeight && + local_5c.y < FB_HEIGHT - trimHeight) { dComIfGd_peekZ(local_5c.x, local_5c.y, &field_0x61c); } diff --git a/src/d/actor/d_a_obj_thashi.cpp b/src/d/actor/d_a_obj_thashi.cpp index a66b59c8c8..a01da21a5d 100644 --- a/src/d/actor/d_a_obj_thashi.cpp +++ b/src/d/actor/d_a_obj_thashi.cpp @@ -90,8 +90,8 @@ static void dataStripping2() { stripFloat(3.0f); stripFloat(2000.0f); - stripFloat(608.0f); - stripFloat(448.0f); + stripFloat(FB_WIDTH); + stripFloat(FB_HEIGHT); } /* 80D0C298-80D0C2B8 0000D8 0020+00 1/0 0/0 0/0 .text daObjTHASHI_Create__FP10fopAc_ac_c diff --git a/src/d/actor/d_a_obj_tombo.cpp b/src/d/actor/d_a_obj_tombo.cpp index 22c837165a..fea30f10c7 100644 --- a/src/d/actor/d_a_obj_tombo.cpp +++ b/src/d/actor/d_a_obj_tombo.cpp @@ -543,8 +543,8 @@ void daObjTOMBO_c::Z_BufferChk() { } else { trimHeight = 0.0f; } - if (local_5c.x > 0.0f && local_5c.x < 608.0f && local_5c.y > trimHeight && - local_5c.y < 448.0f - trimHeight) + if (local_5c.x > 0.0f && local_5c.x < FB_WIDTH && local_5c.y > trimHeight && + local_5c.y < FB_HEIGHT - trimHeight) { dComIfGd_peekZ(local_5c.x, local_5c.y, &field_0x754); } diff --git a/src/d/actor/d_a_obj_tp.cpp b/src/d/actor/d_a_obj_tp.cpp index 7d1d3a4b1e..15beae19a7 100644 --- a/src/d/actor/d_a_obj_tp.cpp +++ b/src/d/actor/d_a_obj_tp.cpp @@ -39,7 +39,9 @@ static int daObj_Tp_Draw(obj_tp_class* i_this) { Mtx lightProjMtx; C_MTXLightPerspective(lightProjMtx, dComIfGd_getView()->fovy, dComIfGd_getView()->aspect, 1.0f, 1.0f, -0.01f, 0); + #if WIDESCREEN_SUPPORT mDoGph_gInf_c::setWideZoomLightProjection(lightProjMtx); + #endif texMtxInfo->setEffectMtx(lightProjMtx); modelData->simpleCalcMaterial(0, (MtxP)j3dDefaultMtx); } diff --git a/src/d/actor/d_a_obj_zra_freeze.cpp b/src/d/actor/d_a_obj_zra_freeze.cpp index 24b1cff7d0..250bcf5d6e 100644 --- a/src/d/actor/d_a_obj_zra_freeze.cpp +++ b/src/d/actor/d_a_obj_zra_freeze.cpp @@ -44,7 +44,7 @@ BOOL daZraFreeze_c::chkActorInScreen() { PSMTXMultVecArray(mDoMtx_stack_c::get(), vec, vec, 8); for (int i = 0; i < 8; i++) { mDoLib_project(&vec[i], &proj); - if (0.0f < proj.x && proj.x < 608.0f && 0.0f < proj.y && proj.y < 448.0f) { + if (0.0f < proj.x && proj.x < FB_WIDTH && 0.0f < proj.y && proj.y < FB_HEIGHT) { continue; } return false; diff --git a/src/d/actor/d_a_tag_attack_item.cpp b/src/d/actor/d_a_tag_attack_item.cpp index 5a7f51b3c0..23e42f479f 100644 --- a/src/d/actor/d_a_tag_attack_item.cpp +++ b/src/d/actor/d_a_tag_attack_item.cpp @@ -1,114 +1,8 @@ -// -// Generated By: dol2asm -// Translation Unit: d_a_tag_attack_item -// - #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_tag_attack_item.h" #include "SSystem/SComponent/c_math.h" #include "d/actor/d_a_player.h" -#include "d/d_com_inf_game.h" -#include "d/d_event_lib.h" -#include "dol2asm.h" - - -// need to figure out how to use dEvLib_callback_c properly -class daTagAtkItem_c : public fopAc_ac_c , public dEvLib_callback_c { -public: - /* 805A2958 */ void setBaseMtx(); - /* 805A2990 */ int Create(); - /* 805A2A34 */ int create(); - /* 805A2C48 */ int execute(); - /* 805A2CA8 */ void action(); - /* 805A2D58 */ BOOL checkHit(); - /* 805A2F54 */ void createItem(); - /* 805A3038 */ int _delete(); - - /* 805A3118 */ ~daTagAtkItem_c(); - /* 805A2D10 */ bool eventStart(); - /* 805A2D34 */ bool eventEnd(); - - u8 getEvId() { return fopAcM_GetParamBit(this, 0x18, 8); } - u8 getNum() { return fopAcM_GetParamBit(this, 8, 8); } - u8 getItemBit() { return fopAcM_GetParamBit(this, 0x10, 8); } - u8 getItemNo() { return fopAcM_GetParamBit(this, 0, 8); } - - /* 0x568 */ u8 temp[0x57C - 0x568]; // remove when dEvLib_callback_c setup - /* 0x57C */ u8 field_0x57C[0x584 - 0x57C]; - /* 0x584 */ dCcD_Stts mCcStts; - /* 0x5C0 */ dCcD_Cyl mCyl; -}; - -// -// Forward References: -// - -extern "C" void setBaseMtx__14daTagAtkItem_cFv(); -extern "C" void Create__14daTagAtkItem_cFv(); -extern "C" void create__14daTagAtkItem_cFv(); -extern "C" void __dt__8cM3dGCylFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" void __dt__10dCcD_GSttsFv(); -extern "C" void execute__14daTagAtkItem_cFv(); -extern "C" void action__14daTagAtkItem_cFv(); -extern "C" void eventStart__14daTagAtkItem_cFv(); -extern "C" void eventEnd__14daTagAtkItem_cFv(); -extern "C" void checkHit__14daTagAtkItem_cFv(); -extern "C" void createItem__14daTagAtkItem_cFv(); -extern "C" bool _delete__14daTagAtkItem_cFv(); -extern "C" static void daTagAtkItem_Execute__FP14daTagAtkItem_c(); -extern "C" static void daTagAtkItem_Delete__FP14daTagAtkItem_c(); -extern "C" static void daTagAtkItem_Create__FP14daTagAtkItem_c(); -extern "C" void __dt__17dEvLib_callback_cFv(); -extern "C" bool eventRun__17dEvLib_callback_cFv(); -extern "C" bool eventStart__17dEvLib_callback_cFv(); -extern "C" bool eventEnd__17dEvLib_callback_cFv(); -extern "C" static void func_805A3100(); -extern "C" static void func_805A3108(); -extern "C" static void func_805A3110(); -extern "C" void __dt__14daTagAtkItem_cFv(); -extern "C" void __dt__10cCcD_GSttsFv(); - -// -// External References: -// - -extern "C" void transS__14mDoMtx_stack_cFRC4cXyz(); -extern "C" void ZXYrotM__14mDoMtx_stack_cFRC5csXyz(); -extern "C" void __ct__10fopAc_ac_cFv(); -extern "C" void __dt__10fopAc_ac_cFv(); -extern "C" void fopAcM_delete__FP10fopAc_ac_c(); -extern "C" void fopAcM_createItemFromTable__FPC4cXyziiiPC5csXyziPC4cXyzPfPfb(); -extern "C" void eventUpdate__17dEvLib_callback_cFv(); -extern "C" void orderEvent__17dEvLib_callback_cFiii(); -extern "C" void __ct__10dCcD_GSttsFv(); -extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c(); -extern "C" void __ct__12dCcD_GObjInfFv(); -extern "C" void __dt__12dCcD_GObjInfFv(); -extern "C" void ChkTgHit__12dCcD_GObjInfFv(); -extern "C" void GetTgHitObj__12dCcD_GObjInfFv(); -extern "C" void Set__8dCcD_CylFRC11dCcD_SrcCyl(); -extern "C" void Set__4cCcSFP8cCcD_Obj(); -extern "C" void __ct__5csXyzFsss(); -extern "C" void cM_rndFX__Ff(); -extern "C" void SetC__8cM3dGCylFRC4cXyz(); -extern "C" void SetH__8cM3dGCylFf(); -extern "C" void SetR__8cM3dGCylFf(); -extern "C" void __dl__FPv(); -extern "C" void _savegpr_27(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_27(); -extern "C" void _restgpr_29(); -extern "C" extern void* __vt__8dCcD_Cyl[36]; -extern "C" extern void* __vt__9dCcD_Stts[11]; -extern "C" extern void* __vt__12cCcD_CylAttr[25]; -extern "C" extern void* __vt__14cCcD_ShapeAttr[22]; -extern "C" extern void* __vt__9cCcD_Stts[8]; - -// -// Declarations: -// /* 805A2958-805A2990 000078 0038+00 1/1 0/0 0/0 .text setBaseMtx__14daTagAtkItem_cFv */ void daTagAtkItem_c::setBaseMtx() { @@ -143,103 +37,16 @@ int daTagAtkItem_c::Create() { return 1; } -/* ############################################################################################## */ -/* 805A3338-805A3358 -00001 0020+00 1/0 0/0 0/0 .data l_daTagAtkItem_Method */ -SECTION_DATA static void* l_daTagAtkItem_Method[8] = { - (void*)daTagAtkItem_Create__FP14daTagAtkItem_c, - (void*)daTagAtkItem_Delete__FP14daTagAtkItem_c, - (void*)daTagAtkItem_Execute__FP14daTagAtkItem_c, - (void*)NULL, - (void*)NULL, - (void*)NULL, - (void*)NULL, - (void*)NULL, -}; - -/* 805A3358-805A3388 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Tag_AttackItem */ -SECTION_DATA extern void* g_profile_Tag_AttackItem[12] = { - (void*)0xFFFFFFFD, (void*)0x0007FFFD, - (void*)0x01AA0000, (void*)&g_fpcLf_Method, - (void*)0x000006FC, (void*)NULL, - (void*)NULL, (void*)&g_fopAc_Method, - (void*)0x02490000, (void*)&l_daTagAtkItem_Method, - (void*)0x00040000, (void*)0x000E0000, -}; - -/* 805A3388-805A33B4 000094 002C+00 2/2 0/0 0/0 .data __vt__14daTagAtkItem_c */ -SECTION_DATA extern void* __vt__14daTagAtkItem_c[11] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)NULL, - (void*)NULL, - (void*)func_805A3110, - (void*)func_805A3108, - (void*)eventRun__17dEvLib_callback_cFv, - (void*)func_805A3100, - (void*)__dt__14daTagAtkItem_cFv, - (void*)eventStart__14daTagAtkItem_cFv, - (void*)eventEnd__14daTagAtkItem_cFv, -}; - -/* 805A33B4-805A33C0 0000C0 000C+00 3/3 0/0 0/0 .data __vt__10cCcD_GStts */ -SECTION_DATA extern void* __vt__10cCcD_GStts[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10cCcD_GSttsFv, -}; - -/* 805A33C0-805A33CC 0000CC 000C+00 2/2 0/0 0/0 .data __vt__10dCcD_GStts */ -SECTION_DATA extern void* __vt__10dCcD_GStts[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10dCcD_GSttsFv, -}; - -/* 805A33CC-805A33D8 0000D8 000C+00 3/3 0/0 0/0 .data __vt__8cM3dGCyl */ -SECTION_DATA extern void* __vt__8cM3dGCyl[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGCylFv, -}; - -/* 805A33D8-805A33E4 0000E4 000C+00 3/3 0/0 0/0 .data __vt__8cM3dGAab */ -SECTION_DATA extern void* __vt__8cM3dGAab[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGAabFv, -}; - -/* 805A33E4-805A33FC 0000F0 0018+00 3/3 0/0 0/0 .data __vt__17dEvLib_callback_c */ -SECTION_DATA extern void* __vt__17dEvLib_callback_c[6] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__17dEvLib_callback_cFv, - (void*)eventStart__17dEvLib_callback_cFv, - (void*)eventRun__17dEvLib_callback_cFv, - (void*)eventEnd__17dEvLib_callback_cFv, -}; - /* 805A2A34-805A2B5C 000154 0128+00 1/1 0/0 0/0 .text create__14daTagAtkItem_cFv */ int daTagAtkItem_c::create() { - // NONMATCHING -} + fopAcM_ct(this, daTagAtkItem_c); -/* 805A2B5C-805A2BA4 00027C 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGCylFv */ -// cM3dGCyl::~cM3dGCyl() { -extern "C" void __dt__8cM3dGCylFv() { - // NONMATCHING -} + if (!Create()) { + return cPhs_ERROR_e; + } -/* 805A2BA4-805A2BEC 0002C4 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -// cM3dGAab::~cM3dGAab() { -extern "C" void __dt__8cM3dGAabFv() { - // NONMATCHING -} - -/* 805A2BEC-805A2C48 00030C 005C+00 1/0 0/0 0/0 .text __dt__10dCcD_GSttsFv */ -// dCcD_GStts::~dCcD_GStts() { -extern "C" void __dt__10dCcD_GSttsFv() { - // NONMATCHING + OS_REPORT("攻撃反応アイテム:<%x>\n", fopAcM_GetParam(this)); + return cPhs_COMPLEATE_e; } /* 805A2C48-805A2CA8 000368 0060+00 1/1 0/0 0/0 .text execute__14daTagAtkItem_cFv */ @@ -285,10 +92,8 @@ BOOL daTagAtkItem_c::checkHit() { if (hitobj_p != NULL && (hitobj_p->ChkAtType(AT_TYPE_IRON_BALL) || hitobj_p->ChkAtType(AT_TYPE_BOMB))) { -#ifdef DEBUG // "Attack Reaction Item: Rotate attack hit!\n" - OSReport("攻撃反応アイテム:回転アタックヒット!\n"); -#endif + OS_REPORT("攻撃反応アイテム:回転アタックヒット!\n"); return true; } } @@ -297,12 +102,10 @@ BOOL daTagAtkItem_c::checkHit() { if ((player_p->checkFrontRollCrash() || player_p->checkWolfAttackReverse()) && player_p->current.pos.absXZ(current.pos) < scale.x * 50.0f && - fabsf(player_p->current.pos.y - current.pos.y) < scale.y * 100.0f) + std::fabs(player_p->current.pos.y - current.pos.y) < scale.y * 100.0f) { -#ifdef DEBUG // "Attack Reaction Item: Rotate attack hit!\n" - OSReport("攻撃反応アイテム:回転アタックヒット!\n"); -#endif + OS_REPORT("攻撃反応アイテム:回転アタックヒット!\n"); return true; } @@ -353,54 +156,29 @@ static int daTagAtkItem_Create(daTagAtkItem_c* i_this) { return i_this->create(); } -/* 805A30A0-805A30E8 0007C0 0048+00 1/0 0/0 0/0 .text __dt__17dEvLib_callback_cFv */ -// dEvLib_callback_c::~dEvLib_callback_c() { -extern "C" void __dt__17dEvLib_callback_cFv() { - // NONMATCHING -} +/* 805A3338-805A3358 -00001 0020+00 1/0 0/0 0/0 .data l_daTagAtkItem_Method */ +static actor_method_class l_daTagAtkItem_Method = { + (process_method_func)daTagAtkItem_Create, + (process_method_func)daTagAtkItem_Delete, + (process_method_func)daTagAtkItem_Execute, + (process_method_func)NULL, + (process_method_func)NULL, +}; -/* 805A30E8-805A30F0 000808 0008+00 2/0 0/0 0/0 .text eventRun__17dEvLib_callback_cFv */ -// bool dEvLib_callback_c::eventRun() { -extern "C" bool eventRun__17dEvLib_callback_cFv() { - return true; -} - -/* 805A30F0-805A30F8 000810 0008+00 1/0 0/0 0/0 .text eventStart__17dEvLib_callback_cFv - */ -// bool dEvLib_callback_c::eventStart()() { -extern "C" bool eventStart__17dEvLib_callback_cFv() { - return true; -} - -/* 805A30F8-805A3100 000818 0008+00 1/0 0/0 0/0 .text eventEnd__17dEvLib_callback_cFv */ -// bool dEvLib_callback_c::eventEnd() { -extern "C" bool eventEnd__17dEvLib_callback_cFv() { - return true; -} - -/* 805A3100-805A3108 000820 0008+00 1/0 0/0 0/0 .text @1384@eventEnd__14daTagAtkItem_cFv - */ -static void func_805A3100() { - // NONMATCHING -} - -/* 805A3108-805A3110 000828 0008+00 1/0 0/0 0/0 .text @1384@eventStart__14daTagAtkItem_cFv */ -static void func_805A3108() { - // NONMATCHING -} - -/* 805A3110-805A3118 000830 0008+00 1/0 0/0 0/0 .text @1384@__dt__14daTagAtkItem_cFv */ -static void func_805A3110() { - // NONMATCHING -} - -/* 805A3118-805A3278 000838 0160+00 2/1 0/0 0/0 .text __dt__14daTagAtkItem_cFv */ -daTagAtkItem_c::~daTagAtkItem_c() { - // NONMATCHING -} - -/* 805A3278-805A32C0 000998 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */ -// cCcD_GStts::~cCcD_GStts() { -extern "C" void __dt__10cCcD_GSttsFv() { - // NONMATCHING -} +/* 805A3358-805A3388 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Tag_AttackItem */ +extern actor_process_profile_definition g_profile_Tag_AttackItem = { + fpcLy_CURRENT_e, + 7, + fpcPi_CURRENT_e, + PROC_Tag_AttackItem, + &g_fpcLf_Method.base, + sizeof(daTagAtkItem_c), + 0, + 0, + &g_fopAc_Method.base, + 585, + &l_daTagAtkItem_Method, + 0x40000, + fopAc_ACTOR_e, + fopAc_CULLBOX_CUSTOM_e, +}; diff --git a/src/d/actor/d_a_title.cpp b/src/d/actor/d_a_title.cpp index a3c49be95a..98b7c1e9c0 100644 --- a/src/d/actor/d_a_title.cpp +++ b/src/d/actor/d_a_title.cpp @@ -68,7 +68,7 @@ daTit_HIO_c::daTit_HIO_c() { mPSPosX = 303.0f; break; case OS_LANGUAGE_FRENCH: - mPSPosX = 304.0f; + mPSPosX = FB_WIDTH / 2; break; } #else diff --git a/src/d/d_camera.cpp b/src/d/d_camera.cpp index 232eb6a3cf..b2239a9c4e 100644 --- a/src/d/d_camera.cpp +++ b/src/d/d_camera.cpp @@ -2127,10 +2127,10 @@ f32 dCamera_c::radiusActorInSight(fopAc_ac_c* i_actor1, fopAc_ac_c* i_actor2, cX dDlst_window_c* window = get_window(field_0x0); scissor_class* scissor = window->getScissor(); f32 dVar3 = cAngle::d2r(i_fovY) * 0.5f; - f32 tmp = (scissor->height - mTrimHeight * 2.0f) / 448.0f * dVar3; + f32 tmp = (scissor->height - mTrimHeight * 2.0f) / FB_HEIGHT * dVar3; f32 fVar8 = tmp * (mTrimHeight < 0.01f ? 0.95f : 1.0f); dVar3 *= mWindowAspect; - f32 fVar7 = dVar3 * (scissor->width / 608.0f) * 0.85f; + f32 fVar7 = dVar3 * (scissor->width / FB_WIDTH) * 0.85f; cXyz pos1 = attentionPos(i_actor1); pos1.y += (positionOf(i_actor1).y - attentionPos(i_actor1).y) * 0.5f; @@ -7861,9 +7861,11 @@ bool dCamera_c::rideCamera(s32 param_0) { cSAngle sp144 = cSAngle::_0; + #if WIDESCREEN_SUPPORT if (mDoGph_gInf_c::isWide()) { val22 *= WideTurnSaving; } + #endif RideData* wk = (RideData*)mWork; @@ -9328,11 +9330,13 @@ bool dCamera_c::eventCamera(s32 param_0) { } getEvIntData(&sp1C, "WideMode", 0); + #if WIDESCREEN_SUPPORT if (sp1C == 1) { mDoGph_gInf_c::onWideZoom(); } else if (sp1C == 2) { mDoGph_gInf_c::offWideZoom(); } + #endif #if DEBUG if (mCamSetup.CheckFlag(0x8000)) { @@ -10039,7 +10043,7 @@ static int camera_draw(camera_process_class* i_this) { int camera_id = get_camera_id(a_this); int trim_height = body->TrimHeight(); - window->setScissor(0.0f, trim_height, 608.0f, 448.0f - trim_height * 2.0f); + window->setScissor(0.0f, trim_height, FB_WIDTH, FB_HEIGHT - trim_height * 2.0f); C_MTXPerspective(i_this->projMtx, i_this->fovy, i_this->aspect, i_this->near, i_this->far); mDoMtx_lookAt(i_this->viewMtx, &i_this->lookat.eye, &i_this->lookat.center, &i_this->lookat.up, i_this->bank); diff --git a/src/d/d_com_inf_game.cpp b/src/d/d_com_inf_game.cpp index d7396fa1b2..87505ab40f 100644 --- a/src/d/d_com_inf_game.cpp +++ b/src/d/d_com_inf_game.cpp @@ -1936,12 +1936,12 @@ void dComIfG_playerStatusD() { dComIfGs_onEventBit(0x5d80); if (!mDoCPd_c::isConnect(PAD_3)) { - g_fmapHIO.mRangeCheckInterval = 0; + g_fmapHIO.mAllRegionsUnlocked = 0; } else { - g_fmapHIO.mRangeCheckInterval = 1; + g_fmapHIO.mAllRegionsUnlocked = 1; } - g_fmapHIO.mRegionImageDebug = 1; + g_fmapHIO.mPortalWarpON = 1; g_fmapHIO.update(); g_mwHIO.setArrowFlag(1); diff --git a/src/d/d_cursor_mng.cpp b/src/d/d_cursor_mng.cpp new file mode 100644 index 0000000000..8b39195217 --- /dev/null +++ b/src/d/d_cursor_mng.cpp @@ -0,0 +1,4 @@ +#include "d/d_cursor_mng.h" + +// TODO: putting this here until a more appropriate place is found +u8 data_8053a730; diff --git a/src/d/d_debug_camera.cpp b/src/d/d_debug_camera.cpp index bb09f93724..a6682fd444 100644 --- a/src/d/d_debug_camera.cpp +++ b/src/d/d_debug_camera.cpp @@ -218,7 +218,7 @@ void dDbgCamSetup_c::genMessage(JORMContext* mctx) { mctx->genLabel("- 情報表示", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genCheckBox(" 有効", &mFlag, 0x8000, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); - mctx->genSlider(" 表示位置 X", &mPosX, 0, 640, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider(" 表示位置 X", &mPosX, 0, FB_WIDTH, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genSlider(" Y", &mPosY, 0, 480, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); mctx->genLabel("-", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); diff --git a/src/d/d_error_msg.cpp b/src/d/d_error_msg.cpp index a179e1856c..ed314e1247 100644 --- a/src/d/d_error_msg.cpp +++ b/src/d/d_error_msg.cpp @@ -73,9 +73,9 @@ static void messageSet(u32 status, bool i_drawBg) { JUT_ASSERT(102, strlen(msg_p)-1 < 512); - J2DTextBox tpane('TEXT1', JGeometry::TBox2(0.0f, 0.0f, 608.0f, 200.0f), (ResFONT*)font_data, msg_p, 512, HBIND_CENTER, VBIND_CENTER); - J2DTextBox spane('TEXT2', JGeometry::TBox2(0.0f, 0.0f, 608.0f, 200.0f), (ResFONT*)font_data, msg_p, 512, HBIND_CENTER, VBIND_CENTER); - J2DPicture ppane('PICT1', JGeometry::TBox2(0.0f, 0.0f, 608.0f, 448.0f), (ResTIMG*)black_tex, NULL); + J2DTextBox tpane('TEXT1', JGeometry::TBox2(0.0f, 0.0f, FB_WIDTH, 200.0f), (ResFONT*)font_data, msg_p, 512, HBIND_CENTER, VBIND_CENTER); + J2DTextBox spane('TEXT2', JGeometry::TBox2(0.0f, 0.0f, FB_WIDTH, 200.0f), (ResFONT*)font_data, msg_p, 512, HBIND_CENTER, VBIND_CENTER); + J2DPicture ppane('PICT1', JGeometry::TBox2(0.0f, 0.0f, FB_WIDTH, FB_HEIGHT), (ResTIMG*)black_tex, NULL); JUTResFont font((ResFONT*)font_data, NULL); JUTFont* pfont = (JUTFont*)&font; @@ -146,36 +146,36 @@ static void messageSet(u32 status, bool i_drawBg) { #if (VERSION == VERSION_GCN_JPN) || (VERSION == VERSION_WII_JPN) f32 temp_0 = 0.0f; // fixes load order - f32 y = temp_0 + ((448.0f - height) / 2); + f32 y = temp_0 + ((FB_HEIGHT - height) / 2); if (i_drawBg) { ppane.mAlpha = 0x82; - ppane.draw(0.0f, 0.0f, 608.0f, 448.0f, false, false, false); + ppane.draw(0.0f, 0.0f, FB_WIDTH, FB_HEIGHT, false, false, false); } - spane.draw(2.0f, y + 10.0f + 2.0f, 608.0f, HBIND_CENTER); - tpane.draw(0.0f, y + 10.0f, 608.0f, HBIND_CENTER); + spane.draw(2.0f, y + 10.0f + 2.0f, FB_WIDTH, HBIND_CENTER); + tpane.draw(0.0f, y + 10.0f, FB_WIDTH, HBIND_CENTER); #else f32 temp_0 = 0.0f; // fixes load order - f32 x = temp_0 + ((608.0f - maxWidth) / 2); - f32 y = temp_0 + ((448.0f - height) / 2); + f32 x = temp_0 + ((FB_WIDTH - maxWidth) / 2); + f32 y = temp_0 + ((FB_HEIGHT - height) / 2); if (i_drawBg) { ppane.mAlpha = 0x82; - ppane.draw(0.0f, 0.0f, 608.0f, 448.0f, false, false, false); + ppane.draw(0.0f, 0.0f, FB_WIDTH, FB_HEIGHT, false, false, false); } #if VERSION == VERSION_GCN_PAL if (dComIfGs_getPalLanguage() == dSv_player_config_c::LANGAUGE_ENGLISH) { - spane.draw(x + 2.0f, y + 10.0f + 2.0f, 608.0f, HBIND_LEFT); - tpane.draw(x, y + 10.0f, 608.0f, HBIND_LEFT); + spane.draw(x + 2.0f, y + 10.0f + 2.0f, FB_WIDTH, HBIND_LEFT); + tpane.draw(x, y + 10.0f, FB_WIDTH, HBIND_LEFT); } else { - spane.draw(2.0f, y + 10.0f + 2.0f, 608.0f, HBIND_CENTER); - tpane.draw(0.0f, y + 10.0f, 608.0f, HBIND_CENTER); + spane.draw(2.0f, y + 10.0f + 2.0f, FB_WIDTH, HBIND_CENTER); + tpane.draw(0.0f, y + 10.0f, FB_WIDTH, HBIND_CENTER); } #else - spane.draw(x + 2.0f, y + 10.0f + 2.0f, 608.0f, HBIND_LEFT); - tpane.draw(x, y + 10.0f, 608.0f, HBIND_LEFT); + spane.draw(x + 2.0f, y + 10.0f + 2.0f, FB_WIDTH, HBIND_LEFT); + tpane.draw(x, y + 10.0f, FB_WIDTH, HBIND_LEFT); #endif #endif } @@ -188,8 +188,8 @@ void dDvdErrorMsg_c::draw(s32 status) { GXSetAlphaUpdate(GX_FALSE); j3dSys.drawInit(); - J2DOrthoGraph draw2D(0.0f, 0.0f, 608.0f, 448.0f, -1.0f, 1.0f); - draw2D.setOrtho(0.0f, 0.0f, 608.0f, 448.0f, -1.0f, 1.0f); + J2DOrthoGraph draw2D(0.0f, 0.0f, FB_WIDTH, FB_HEIGHT, -1.0f, 1.0f); + draw2D.setOrtho(0.0f, 0.0f, FB_WIDTH, FB_HEIGHT, -1.0f, 1.0f); draw2D.setPort(); dComIfGp_setCurrentGrafPort(&draw2D); @@ -244,8 +244,8 @@ static void drawCapture(u8 alpha) { static bool l_texCopied = false; if (!l_texCopied) { - GXSetTexCopySrc(0, 0, 608, 448); - GXSetTexCopyDst(304, 224, (GXTexFmt)mDoGph_gInf_c::getFrameBufferTimg()->format, GX_TRUE); + GXSetTexCopySrc(0, 0, FB_WIDTH, FB_HEIGHT); + GXSetTexCopyDst(FB_WIDTH / 2, FB_HEIGHT / 2, (GXTexFmt)mDoGph_gInf_c::getFrameBufferTimg()->format, GX_TRUE); GXCopyTex(mDoGph_gInf_c::getFrameBufferTex(), GX_FALSE); l_texCopied = true; } @@ -255,7 +255,7 @@ static void drawCapture(u8 alpha) { GXSetAlphaUpdate(GX_FALSE); j3dSys.drawInit(); - GXInitTexObj(mDoGph_gInf_c::getFrameBufferTexObj(), mDoGph_gInf_c::getFrameBufferTex(), 304, 224, (GXTexFmt)mDoGph_gInf_c::getFrameBufferTimg()->format, GX_CLAMP, GX_CLAMP, GX_FALSE); + GXInitTexObj(mDoGph_gInf_c::getFrameBufferTexObj(), mDoGph_gInf_c::getFrameBufferTex(), FB_WIDTH / 2, FB_HEIGHT / 2, (GXTexFmt)mDoGph_gInf_c::getFrameBufferTimg()->format, GX_CLAMP, GX_CLAMP, GX_FALSE); GXInitTexObjLOD(mDoGph_gInf_c::getFrameBufferTexObj(), GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1); GXLoadTexObj(mDoGph_gInf_c::getFrameBufferTexObj(), GX_TEXMAP0); GXSetNumChans(0); diff --git a/src/d/d_file_select.cpp b/src/d/d_file_select.cpp index 38f92626bd..2a523c5e5f 100644 --- a/src/d/d_file_select.cpp +++ b/src/d/d_file_select.cpp @@ -2585,7 +2585,7 @@ void dFile_select_c::screenSet() { black.a = 0; white.a = 0xff; ResTIMG* uVar20 = (ResTIMG*)dComIfGp_getMain2DArchive()->getResource('TIMG', "tt_block8x8.bti"); - field_0x2378 = new J2DPicture('PICT01', JGeometry::TBox2(0.0f, 608.0f, 0.0f, 448.0f), uVar20, NULL); + field_0x2378 = new J2DPicture('PICT01', JGeometry::TBox2(0.0f, FB_WIDTH, 0.0f, FB_HEIGHT), uVar20, NULL); field_0x2378->setBlackWhite(black, white); field_0x2378->setAlpha(0); } diff --git a/src/d/d_gameover.cpp b/src/d/d_gameover.cpp index eefe7bfd6d..9a79e2c12f 100644 --- a/src/d/d_gameover.cpp +++ b/src/d/d_gameover.cpp @@ -42,11 +42,11 @@ void dDlst_Gameover_CAPTURE_c::draw() { GXTexObj tex_obj; Mtx44 m; - GXSetTexCopySrc(0, 0, 608, 448); - GXSetTexCopyDst(304, 224, GX_TF_RGB565, 1); + GXSetTexCopySrc(0, 0, FB_WIDTH, FB_HEIGHT); + GXSetTexCopyDst(FB_WIDTH / 2, FB_HEIGHT / 2, GX_TF_RGB565, 1); GXCopyTex(mDoGph_gInf_c::mZbufferTex, 0); GXPixModeSync(); - GXInitTexObj(&tex_obj, mDoGph_gInf_c::mFrameBufferTex, 304, 224, + GXInitTexObj(&tex_obj, mDoGph_gInf_c::mFrameBufferTex, FB_WIDTH / 2, FB_HEIGHT / 2, (GXTexFmt)mDoGph_gInf_c::mFrameBufferTimg->format, GX_CLAMP, GX_CLAMP, GX_FALSE); GXInitTexObjLOD(&tex_obj, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1); @@ -469,7 +469,7 @@ void dDlst_GameOverScrnDraw_c::draw() { img_white.a = 255; mpBackImg->setBlackWhite(img_black, img_white); - mpBackImg->draw(0.0f, 0.0f, 608.0f, 448.0f, false, false, false); + mpBackImg->draw(0.0f, 0.0f, FB_WIDTH, FB_HEIGHT, false, false, false); } else { JUtility::TColor img_black; JUtility::TColor img_white; @@ -484,12 +484,12 @@ void dDlst_GameOverScrnDraw_c::draw() { img_white.b = l_HIO.mWhite.b; img_white.a = l_HIO.mWhite.a; - mpBackImg->draw(0.0f, 0.0f, 608.0f, 448.0f, false, false, false); + mpBackImg->draw(0.0f, 0.0f, FB_WIDTH, FB_HEIGHT, false, false, false); static f32 offset[8] = {-138.0f, -96.0f, -56.0f, -18.0f, 42.0f, 75.0f, 110.0f, 143.0f}; for (int i = 0; i < 8; i++) { - mpLight->draw(&field_0x10, offset[i] + 304.0f, 224.0f, l_HIO.mScale, l_HIO.mScale, + mpLight->draw(&field_0x10, offset[i] + (FB_WIDTH / 2.0f), (FB_HEIGHT / 2), l_HIO.mScale, l_HIO.mScale, l_HIO.mAlpha, l_HIO.mAnimSpeed, img_black, img_white); } } diff --git a/src/d/d_home_button.cpp b/src/d/d_home_button.cpp index 782b021696..194f5a3f86 100644 --- a/src/d/d_home_button.cpp +++ b/src/d/d_home_button.cpp @@ -26,7 +26,7 @@ void drawCallback(J2DOrthoGraph& param_0, void* param_1) { if (mDoGph_gInf_c::isWide()) { MTXOrtho(sp8, 228.0f, -228.0f, -416.0f, 416.0f, 0.0f, 500.0f); } else { - MTXOrtho(sp8, 228.0f, -228.0f, -304.0f, 304.0f, 0.0f, 500.0f); + MTXOrtho(sp8, 228.0f, -228.0f, -(FB_WIDTH / 2), (FB_WIDTH / 2), 0.0f, 500.0f); } GXSetProjection(sp8, GX_ORTHOGRAPHIC); @@ -179,8 +179,8 @@ int dHomeButton_c::execute() { // NONMATCHING void dHomeButton_c::drawCapture(u8 param_0, void (*param_1)(J2DOrthoGraph&, void*), void* param_2) { if (lbl_8053A725 == 0) { - GXSetTexCopySrc(0, 0, 640, 456); - GXSetTexCopyDst(640, 456, (GXTexFmt)mDoGph_gInf_c::m_fullFrameBufferTimg->format, GX_FALSE); + GXSetTexCopySrc(0, 0, FB_WIDTH, FB_HEIGHT); + GXSetTexCopyDst(FB_WIDTH, FB_HEIGHT, (GXTexFmt)mDoGph_gInf_c::m_fullFrameBufferTimg->format, GX_FALSE); GXCopyTex(mDoGph_gInf_c::m_fullFrameBufferTex, GX_FALSE); lbl_8053A725 = 1; } @@ -190,7 +190,7 @@ void dHomeButton_c::drawCapture(u8 param_0, void (*param_1)(J2DOrthoGraph&, void GXSetAlphaUpdate(GX_DISABLE); j3dSys.drawInit(); - J2DOrthoGraph sp30(0.0f, 0.0f, 640.0f, 456.0f, -1.0f, 1.0f); + J2DOrthoGraph sp30(0.0f, 0.0f, FB_WIDTH, FB_HEIGHT, -1.0f, 1.0f); sp30.setOrtho(JGeometry::TBox2(mDoGph_gInf_c::getMinXF(), mDoGph_gInf_c::getMinYF(), mDoGph_gInf_c::getMinXF() + mDoGph_gInf_c::getWidthF(), mDoGph_gInf_c::getMinYF() + mDoGph_gInf_c::getHeightF()), diff --git a/src/d/d_insect.cpp b/src/d/d_insect.cpp index 6bbaf990e3..c41ede21fd 100644 --- a/src/d/d_insect.cpp +++ b/src/d/d_insect.cpp @@ -113,8 +113,8 @@ void dInsect_c::CalcZBuffer(f32 param_0) { camera_trim_height = 0.0f; } - if (pos_projected.x > 0.0f && pos_projected.x < 608.0f && - pos_projected.y > camera_trim_height && pos_projected.y < 448.0f - camera_trim_height) + if (pos_projected.x > 0.0f && pos_projected.x < FB_WIDTH && + pos_projected.y > camera_trim_height && pos_projected.y < FB_HEIGHT - camera_trim_height) { dComIfGd_peekZ(pos_projected.x, pos_projected.y, &field_0x578); } else { diff --git a/src/d/d_kankyo.cpp b/src/d/d_kankyo.cpp index 0b178c4342..b5c1818138 100644 --- a/src/d/d_kankyo.cpp +++ b/src/d/d_kankyo.cpp @@ -8493,7 +8493,7 @@ void dKy_depth_dist_set(void* process_p) { if (var_f31 < 2000.0f && var_f31 < kankyo->field_0x1268) { mDoLib_project(&actor_p->eyePos, &sp30); - if ((sp30.x >= 0.0f && sp30.x < 608.0f) && (sp30.y >= 0.0f && sp30.y < 600.0f)) { + if ((sp30.x >= 0.0f && sp30.x < FB_WIDTH) && (sp30.y >= 0.0f && sp30.y < 600.0f)) { cXyz sp18; cXyz spC; dKyr_get_vectle_calc(&camera_p->lookat.eye, &camera_p->lookat.center, &sp18); diff --git a/src/d/d_kankyo_debug.cpp b/src/d/d_kankyo_debug.cpp index 4bc97a4cb7..f7380be066 100644 --- a/src/d/d_kankyo_debug.cpp +++ b/src/d/d_kankyo_debug.cpp @@ -917,17 +917,17 @@ void dKydb_dungeonlight_draw() { proj.x -= 30.0f; } - if (proj.x < 0.0f || proj.x > 640.0f || proj.y < 0.0f || proj.y > 456.0f) { + if (proj.x < 0.0f || proj.x > FB_WIDTH || proj.y < 0.0f || proj.y > FB_HEIGHT) { if (proj.x < 0.0f) { proj.x = 10.0f; } - if (proj.x > 640.0f) { + if (proj.x > FB_WIDTH) { proj.x = 560.0f; } if (proj.y < 0.0f) { proj.y = 40.0f; } - if (proj.y > 456.0f) { + if (proj.y > FB_HEIGHT) { proj.y = 404.0f; } diff --git a/src/d/d_kankyo_rain.cpp b/src/d/d_kankyo_rain.cpp index 298d782e56..8f2cfcf053 100644 --- a/src/d/d_kankyo_rain.cpp +++ b/src/d/d_kankyo_rain.cpp @@ -124,8 +124,8 @@ void dKyr_lenzflare_move() { cXyz center; mDoLib_project(lenz_packet->mPositions, &proj); - center.x = 304.0f; - center.y = 224.0f; + center.x = FB_WIDTH / 2; + center.y = FB_HEIGHT / 2; center.z = 0.0f; dKyr_get_vectle_calc(¢er, &proj, &vect); @@ -239,7 +239,7 @@ void dKyr_sun_move() { chkpnt.x -= sun_chkpnt[i][0]; chkpnt.y -= sun_chkpnt[i][1]; - if (chkpnt.x > 0.0f && chkpnt.x < 608.0f && chkpnt.y > border_y && chkpnt.y < 458.0f - border_y) { + if (chkpnt.x > 0.0f && chkpnt.x < FB_WIDTH && chkpnt.y > border_y && chkpnt.y < 458.0f - border_y) { if (sun_packet->field_0x44[i] >= 0xFFFFFF) { numPointsVisible++; if (i == 0) { @@ -271,8 +271,8 @@ void dKyr_sun_move() { lenz_packet->field_0x90 = 0.0f; cXyz center; - center.x = 304.0f; - center.y = 224.0f; + center.x = FB_WIDTH / 2; + center.y = FB_HEIGHT / 2; center.z = 0.0f; lenz_packet->mDistFalloff = center.abs(proj); @@ -4438,6 +4438,9 @@ void drawCloudShadow(Mtx drawMtx, u8** tex) { f32 scale = 0.49f; C_MTXLightPerspective(sp120, window_cam->fovy, window_cam->aspect, scale, -scale, 0.5f, 0.5f); + #if WIDESCREEN_SUPPORT + mDoGph_gInf_c::setWideZoomLightProjection(sp120); + #endif cMtx_concat(sp120, j3dSys.getViewMtx(), spF0); rot += 2.0f; @@ -4674,7 +4677,7 @@ void drawVrkumo(Mtx drawMtx, GXColor& color, u8** tex) { if (g_env_light.daytime > 105.0f && g_env_light.daytime < 240.0f && !dComIfGp_event_runCheck() && sun_packet != NULL && sun_packet->mSunAlpha > 0.0f) { mDoLib_project(&sun_packet->mPos[0], &proj); - if (proj.x > 0.0f && proj.x < 608.0f && proj.y > spC4 && proj.y < (458.0f - spC4)) { + if (proj.x > 0.0f && proj.x < FB_WIDTH && proj.y > spC4 && proj.y < (458.0f - spC4)) { pass = 0; } } @@ -4940,7 +4943,7 @@ void drawVrkumo(Mtx drawMtx, GXColor& color, u8** tex) { z = 100.0f; mDoLib_project(&spF0, &proj); - if (proj.x > -x && proj.x < (608.0f + x) && proj.y > -y && proj.y < (458.0f + z)) { + if (proj.x > -x && proj.x < (FB_WIDTH + x) && proj.y > -y && proj.y < (458.0f + z)) { break; } @@ -4990,7 +4993,7 @@ void drawVrkumo(Mtx drawMtx, GXColor& color, u8** tex) { z = 100.0f; mDoLib_project(&spE4, &proj); - if (proj.x > -x && proj.x < (608.0f + x) && proj.y > -y && proj.y < (458.0f + z)) { + if (proj.x > -x && proj.x < (FB_WIDTH + x) && proj.y > -y && proj.y < (458.0f + z)) { break; } @@ -6040,7 +6043,7 @@ static void dKyr_evil_draw2(Mtx drawMtx, u8** tex) { mDoLib_project(&sp7C, &proj); - if (!(proj.x > -sp34.x) || !(proj.x < (608.0f + sp34.x)) || + if (!(proj.x > -sp34.x) || !(proj.x < (FB_WIDTH + sp34.x)) || !(proj.y > -sp34.y) || !(proj.y < (458.0f + sp34.z))) { continue; @@ -6268,7 +6271,7 @@ void dKyr_evil_draw(Mtx drawMtx, u8** tex) { mDoLib_project(&spA4, &proj); - if (!(proj.x > -sp44.x) || !(proj.x < (608.0f + sp44.x)) || + if (!(proj.x > -sp44.x) || !(proj.x < (FB_WIDTH + sp44.x)) || !(proj.y > -sp44.y) || !(proj.y < (458.0f + sp44.z))) { continue; diff --git a/src/d/d_menu_collect.cpp b/src/d/d_menu_collect.cpp index a9743414fa..9d84c4a134 100644 --- a/src/d/d_menu_collect.cpp +++ b/src/d/d_menu_collect.cpp @@ -2584,7 +2584,7 @@ f32 dMenu_Collect3D_c::mViewOffsetY = -100.0f; /* 801B75E8-801B7660 1B1F28 0078+00 0/0 1/1 0/0 .text setupItem3D__17dMenu_Collect3D_cFPA4_f */ void dMenu_Collect3D_c::setupItem3D(Mtx param_0) { - GXSetViewport(0.0f, mViewOffsetY, 608.0f, 448.0f, 0.0f, 1.0f); + GXSetViewport(0.0f, mViewOffsetY, FB_WIDTH, FB_HEIGHT, 0.0f, 1.0f); mViewOffsetY = -100.0f; Mtx44 projection; C_MTXPerspective(projection, 45.0f, mDoGph_gInf_c::getAspect(), 1.0f, 100000.0f); diff --git a/src/d/d_menu_dmap.cpp b/src/d/d_menu_dmap.cpp index 8637c14c3a..f70d5d98e4 100644 --- a/src/d/d_menu_dmap.cpp +++ b/src/d/d_menu_dmap.cpp @@ -850,14 +850,14 @@ void dMenu_DmapBg_c::draw() { grafContext->setup2D(); GXGetScissor(&scissor_left, &scissor_top, &scissor_width, &scissor_height); - grafContext->scissor(field_0xd94, 0.0f, 608.0f, 448.0f); + grafContext->scissor(field_0xd94, 0.0f, FB_WIDTH, FB_HEIGHT); grafContext->setScissor(); mBaseScreen->draw(field_0xd94, field_0xd98, grafContext); dMenu_Dmap_c::myclass->drawFloorScreenBack(mFloorScreen, field_0xd94, field_0xd98, grafContext); - f32 dVar21 = mDoGph_gInf_c::getWidthF() / 608.0f; - f32 dVar16 = mDoGph_gInf_c::getHeightF() / 448.0f; + f32 dVar21 = mDoGph_gInf_c::getWidthF() / FB_WIDTH; + f32 dVar16 = mDoGph_gInf_c::getHeightF() / FB_HEIGHT; mMapScreen[0]->draw(field_0xd94, field_0xd98, grafContext); if (mpBackTexture != NULL) { diff --git a/src/d/d_menu_fishing.cpp b/src/d/d_menu_fishing.cpp index 849f2786c0..dc4f8c4dc3 100644 --- a/src/d/d_menu_fishing.cpp +++ b/src/d/d_menu_fishing.cpp @@ -121,7 +121,7 @@ void dMenu_Fishing_c::_draw() { if (mpArchive) { J2DGrafContext* grafPort = dComIfGp_getCurrentGrafPort(); mpBlackTex->setAlpha(0xff); - mpBlackTex->draw(0.0f, 0.0f, 608.0f, 448.0f, 0, 0, 0); + mpBlackTex->draw(0.0f, 0.0f, FB_WIDTH, FB_HEIGHT, 0, 0, 0); mpScreen->draw(0.0f, 0.0f, grafPort); mpIconScreen->draw(0.0f, 0.0f, grafPort); } diff --git a/src/d/d_menu_fmap.cpp b/src/d/d_menu_fmap.cpp index cb719c0bec..dfe8c9eba7 100644 --- a/src/d/d_menu_fmap.cpp +++ b/src/d/d_menu_fmap.cpp @@ -194,9 +194,9 @@ dMenu_Fmap_c::dMenu_Fmap_c(JKRExpHeap* i_heap, STControl* i_stick, CSTControl* i mProcess = PROC_REGION_MAP; strcpy(mMarkedStageName, ""); - if (g_fmapHIO.mpArchive != NULL && g_fmapHIO.mpArchive->isMounted()) { + if (g_fmapHIO.mpArcData != NULL && g_fmapHIO.mpArcData->isMounted()) { mProcess = i_process; - mpMapArchive = g_fmapHIO.mpArchive; + mpMapArchive = g_fmapHIO.mpArcData; } else { mpMapArchive = dComIfGp_getFieldMapArchive2(); } diff --git a/src/d/d_menu_fmap2D.cpp b/src/d/d_menu_fmap2D.cpp index d73ea252e0..62def86a56 100644 --- a/src/d/d_menu_fmap2D.cpp +++ b/src/d/d_menu_fmap2D.cpp @@ -282,7 +282,7 @@ void dMenu_Fmap2DBack_c::draw() { u32 scissorLeft, scissorTop, scissorWidth, scissorHeight; GXGetScissor(&scissorLeft, &scissorTop, &scissorWidth, &scissorHeight); - grafPort->scissor(mTransX, 0.0f, 608.0f, 448.0f); + grafPort->scissor(mTransX, 0.0f, FB_WIDTH, FB_HEIGHT); grafPort->setScissor(); mpBackTex->setBlackWhite(field_0x1208, field_0x120c); @@ -299,8 +299,8 @@ void dMenu_Fmap2DBack_c::draw() { Vec vec2 = mpMapArea->getGlobalVtx(&mtx, 3, false, 0); - f32 width = mDoGph_gInf_c::getWidthF() / 608.0f; - f32 height = mDoGph_gInf_c::getHeightF() / 448.0f; + f32 width = mDoGph_gInf_c::getWidthF() / FB_WIDTH; + f32 height = mDoGph_gInf_c::getHeightF() / FB_HEIGHT; grafPort->scissor(mTransX + ((vec1.x - mDoGph_gInf_c::getMinXF()) / width), mTransZ + (vec1.y / height), (vec2.x - vec1.x) / width, @@ -2489,7 +2489,7 @@ void dMenu_Fmap2DTop_c::draw() { J2DOrthoGraph* ctx = static_cast(dComIfGp_getCurrentGrafPort()); ctx->setup2D(); GXGetScissor(&scissor_left, &scissor_top, &scissor_width, &scissor_height); - ctx->scissor(mTransX, 0.0f, 608.0f, 448.0f); + ctx->scissor(mTransX, 0.0f, FB_WIDTH, FB_HEIGHT); ctx->setScissor(); mpTitleScreen->draw(mTransX, mTransY, ctx); ctx->scissor(scissor_left, scissor_top, scissor_width, scissor_height); diff --git a/src/d/d_menu_insect.cpp b/src/d/d_menu_insect.cpp index 2f1d8526d2..531ec43b5d 100644 --- a/src/d/d_menu_insect.cpp +++ b/src/d/d_menu_insect.cpp @@ -166,12 +166,12 @@ void dMenu_Insect_c::_draw() { if (mpArchive != NULL) { J2DGrafContext* grafPort = dComIfGp_getCurrentGrafPort(); mpBlackTex->setAlpha(0xff); - mpBlackTex->draw(0.0f, 0.0f, 608.0f, 448.0f, 0, 0, 0); + mpBlackTex->draw(0.0f, 0.0f, FB_WIDTH, FB_HEIGHT, 0, 0, 0); mpScreen->draw(0.0f, 0.0f, grafPort); mpDrawCursor->draw(); field_0xfc = mpExpParent->getAlphaRate() * 150.0f; mpBlackTex->setAlpha(field_0xfc); - mpBlackTex->draw(0.0f, 0.0f, 608.0f, 448.0f, 0, 0, 0); + mpBlackTex->draw(0.0f, 0.0f, FB_WIDTH, FB_HEIGHT, 0, 0, 0); mpExpScreen->draw(0.0f, 0.0f, grafPort); mpSelect_c->setOffsetX(g_drawHIO.mInsectListScreen.mConfirmOptionPosX_4x3); mpSelect_c->translate(g_drawHIO.mInsectListScreen.mConfirmOptionPosX_4x3 + 486.0f, diff --git a/src/d/d_menu_item_explain.cpp b/src/d/d_menu_item_explain.cpp index 7dda5b156f..06eb60dd17 100644 --- a/src/d/d_menu_item_explain.cpp +++ b/src/d/d_menu_item_explain.cpp @@ -315,7 +315,7 @@ void dMenu_ItemExplain_c::draw(J2DOrthoGraph* i_graph) { mpLabel->scale(g_ringHIO.mItemDescTitleScale, g_ringHIO.mItemDescTitleScale); mpLabel->paneTrans(g_ringHIO.mItemDescTitlePosX, g_ringHIO.mItemDescTitlePosY); if (mpBackTex != NULL) { - mpBackTex->draw(0.0f, 0.0f, 608.0f, 448.0f, false, false, false); + mpBackTex->draw(0.0f, 0.0f, FB_WIDTH, FB_HEIGHT, false, false, false); } if (field_0xc8 != field_0xd0) { field_0xd0 = field_0xc8; diff --git a/src/d/d_menu_letter.cpp b/src/d/d_menu_letter.cpp index 549107a10d..277570ec79 100644 --- a/src/d/d_menu_letter.cpp +++ b/src/d/d_menu_letter.cpp @@ -233,8 +233,8 @@ void dMenu_Letter_c::_draw() { f32 y1 = local_178.y; Vec local_184; local_184 = afStack_138.getGlobalVtx(field_0x1ec, &mtx, 3, false, 0); - f32 dVar17 = mDoGph_gInf_c::getWidthF() / 608.0f; - f32 dVar16 = mDoGph_gInf_c::getHeightF() / 448.0f; + f32 dVar17 = mDoGph_gInf_c::getWidthF() / FB_WIDTH; + f32 dVar16 = mDoGph_gInf_c::getHeightF() / FB_HEIGHT; f32 fVar1 = (x1 - mDoGph_gInf_c::getMinXF()) / dVar17; f32 fVar2 = y1 / dVar16; grafContext->scissor(fVar1, fVar2, diff --git a/src/d/d_menu_option.cpp b/src/d/d_menu_option.cpp index 7d2ec85441..3351be53e8 100644 --- a/src/d/d_menu_option.cpp +++ b/src/d/d_menu_option.cpp @@ -497,11 +497,11 @@ void dMenu_Option_c::_draw() { if (mpArchive != NULL) { J2DGrafContext* ctx = dComIfGp_getCurrentGrafPort(); mpBlackTex->setAlpha(0xff); - mpBlackTex->draw(0.0f, 0.0f, 608.0f, 448.0f, 0, 0, 0); + mpBlackTex->draw(0.0f, 0.0f, FB_WIDTH, FB_HEIGHT, 0, 0, 0); mpBackScreen->draw(0.0f, 0.0f, ctx); f32 alpha = (f32)g_drawHIO.mOptionScreen.mBackgroundAlpha * (f32)field_0x374; mpBlackTex->setAlpha(alpha); - mpBlackTex->draw(0.0f, 0.0f, 608.0f, 448.0f, 0, 0, 0); + mpBlackTex->draw(0.0f, 0.0f, FB_WIDTH, FB_HEIGHT, 0, 0, 0); mpScreen->draw(0.0f, 0.0f, ctx); mpClipScreen->draw(0.0f, 0.0f, ctx); mpShadowScreen->draw(0.0f, 0.0f, ctx); diff --git a/src/d/d_menu_skill.cpp b/src/d/d_menu_skill.cpp index 07f725ac91..ffd17c812b 100644 --- a/src/d/d_menu_skill.cpp +++ b/src/d/d_menu_skill.cpp @@ -148,12 +148,12 @@ void dMenu_Skill_c::_draw() { J2DGrafContext* context = dComIfGp_getCurrentGrafPort(); u8 alpha = mpBlackTex->mAlpha; mpBlackTex->setAlpha(0xff); - mpBlackTex->draw(0.0f, 0.0f, 608.0f, 448.0f, 0, 0, 0); + mpBlackTex->draw(0.0f, 0.0f, FB_WIDTH, FB_HEIGHT, 0, 0, 0); mpBlackTex->setAlpha(alpha); mpMenuScreen->draw(mPosX, 0.0f, context); mpDrawCursor->draw(); if (mProcess == 1 || mProcess == 2 || mProcess == 3) { - mpBlackTex->draw(0.0f, 0.0f, 608.0f, 448.0f, 0, 0, 0); + mpBlackTex->draw(0.0f, 0.0f, FB_WIDTH, FB_HEIGHT, 0, 0, 0); mpLetterScreen->draw(0.0f, 0.0f, context); if (mStringID != 0) { mpString->getString(mStringID, (J2DTextBox*)mpTextPane->getPanePtr(), NULL, NULL, diff --git a/src/d/d_menu_window.cpp b/src/d/d_menu_window.cpp index b95d54042e..ed974af35f 100644 --- a/src/d/d_menu_window.cpp +++ b/src/d/d_menu_window.cpp @@ -32,13 +32,13 @@ public: if (getDrawFlag() == 1) { setDrawFlag(); dComIfGp_onPauseFlag(); - GXSetTexCopySrc(0, 0, 608, 448); - GXSetTexCopyDst(304, 224, (GXTexFmt)mDoGph_gInf_c::getFrameBufferTimg()->format, GX_ENABLE); + GXSetTexCopySrc(0, 0, FB_WIDTH, FB_HEIGHT); + GXSetTexCopyDst(FB_WIDTH / 2, FB_HEIGHT / 2, (GXTexFmt)mDoGph_gInf_c::getFrameBufferTimg()->format, GX_ENABLE); GXCopyTex(mDoGph_gInf_c::getFrameBufferTex(), GX_FALSE); GXPixModeSync(); } else { GXTexObj tex; - GXInitTexObj(&tex, mDoGph_gInf_c::getFrameBufferTex(), 304, 224, + GXInitTexObj(&tex, mDoGph_gInf_c::getFrameBufferTex(), FB_WIDTH / 2, FB_HEIGHT / 2, (GXTexFmt)mDoGph_gInf_c::getFrameBufferTimg()->format, GX_CLAMP, GX_CLAMP, GX_FALSE); GXInitTexObjLOD(&tex, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1); GXLoadTexObj(&tex, GX_TEXMAP0); diff --git a/src/d/d_meter_HIO.cpp b/src/d/d_meter_HIO.cpp index f83e93c17c..79d8ed4081 100644 --- a/src/d/d_meter_HIO.cpp +++ b/src/d/d_meter_HIO.cpp @@ -1,12 +1,6 @@ -// -// Generated By: dol2asm -// Translation Unit: d/d_meter_HIO -// - #include "d/dolzel.h" // IWYU pragma: keep #include "d/d_meter_HIO.h" -#include "d/d_save.h" #include "JSystem/JKernel/JKRAramArchive.h" #include "JSystem/JKernel/JKRExpHeap.h" #include "m_Do/m_Do_ext.h" @@ -16,6 +10,12 @@ dMeter_menuHIO_c::dMeter_menuHIO_c() { mGameover = 70; } +#if DEBUG +void dMeter_menuHIO_c::genMessage(JORMContext* mctx) { + // NONMATCHING +} +#endif + /* 801FE348-801FE4EC 1F8C88 01A4+00 1/1 0/0 0/0 .text __ct__23dMeter_drawCollectHIO_cFv */ dMeter_drawCollectHIO_c::dMeter_drawCollectHIO_c() { @@ -58,6 +58,12 @@ dMeter_drawCollectHIO_c::dMeter_drawCollectHIO_c() { mVesselFront[VESSEL_DECOR].set(200, 190, 100, 175); } +#if DEBUG +void dMeter_drawCollectHIO_c::genMessage(JORMContext* mctx) { + // NONMATCHING +} +#endif + /* 801FE4EC-801FE5CC 1F8E2C 00E0+00 1/1 0/0 0/0 .text __ct__22dMeter_drawOptionHIO_cFv */ dMeter_drawOptionHIO_c::dMeter_drawOptionHIO_c() { mBarScale[0] = 1.02f; @@ -88,6 +94,12 @@ dMeter_drawOptionHIO_c::dMeter_drawOptionHIO_c() { mArrowOffsetX_4x3 = 4.0f; } +#if DEBUG +void dMeter_drawOptionHIO_c::genMessage(JORMContext* mctx) { + // NONMATCHING +} +#endif + /* 801FE5CC-801FE730 1F8F0C 0164+00 1/1 0/0 0/0 .text __ct__22dMeter_drawLetterHIO_cFv */ dMeter_drawLetterHIO_c::dMeter_drawLetterHIO_c() { for (int i = 0; i < 2; i++) { @@ -126,6 +138,12 @@ dMeter_drawLetterHIO_c::dMeter_drawLetterHIO_c() { mLetterTextFront.set(65, 55, 30, 255); } +#if DEBUG +void dMeter_drawLetterHIO_c::genMessage(JORMContext* mctx) { + // NONMATCHING +} +#endif + /* 801FE730-801FE8DC 1F9070 01AC+00 1/1 0/0 0/0 .text __ct__23dMeter_drawFishingHIO_cFv */ dMeter_drawFishingHIO_c::dMeter_drawFishingHIO_c() { @@ -133,10 +151,27 @@ dMeter_drawFishingHIO_c::dMeter_drawFishingHIO_c() { static f32 const fipaPosX[6] = {1.3f, 6.6f, 0.0f, 3.96f, 4.0f, 27.5f}; static f32 const fipaPosY[6] = {-9.2f, -27.5f, -11.7f, -9.2f, -30.1f, -17.9f}; static f32 const finaScale[6] = {0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f}; + +#if PLATFORM_SHIELD + static f32 const finaPosX[6] = {0.0f, -4.0f, 0.0f, 0.0f, 0.0f, -4.0f}; +#else static f32 const finaPosX[6] = {-25.0f, -4.0f, 0.0f, 0.0f, 0.0f, -4.0f}; +#endif + +#if PLATFORM_SHIELD + static f32 const finaPosY[6] = {-14.4f, -40.6, -24.0f, -11.7f, -37.9f, -13.0f}; +#else static f32 const finaPosY[6] = {-16.0f, -40.6, -24.0f, -11.7f, -37.9f, -13.0f}; +#endif + static f32 const filiScale[6] = {0.65f, 0.65f, 0.65f, 0.65f, 0.65f, 0.65f}; + +#if PLATFORM_SHIELD + static f32 const filiPosX[6] = {0.0f, -8.0f, 9.2f, 9.2f, 9.2f, -8.0f}; +#else static f32 const filiPosX[6] = {-28.0f, -8.0f, 9.2f, 9.2f, 9.2f, -8.0f}; +#endif + static f32 const filiPosY[6] = {-6.6f, -14.0f, -14.4f, 24.9f, -11.7f, 24.9f}; static f32 const bboxScale[6] = {1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f}; static f32 const bboxPosX[6] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f}; @@ -145,18 +180,22 @@ dMeter_drawFishingHIO_c::dMeter_drawFishingHIO_c() { static f32 const rboxPosX[6] = {1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f}; static f32 const rboxPosY[6] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f}; static f32 const finfoScale[6] = {0.87f, 0.87f, 0.88f, 0.87f, 0.87f, 0.87f}; + #if VERSION == VERSION_GCN_JPN static f32 const finfoPosX[6] = {-27.0f, 0.0f, -12.0f, 0.0f, -12.0f, -32.8f}; #else static f32 const finfoPosX[6] = {-17.0f, 0.0f, -14.0f, 0.0f, -12.0f, -32.8f}; #endif + static f32 const finfoPosY[6] = {6.6f, 0.0f, 0.0f, 0.0f, 1.3f, 0.0f}; static f32 const fishnScale[6] = {1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f}; + #if VERSION == VERSION_GCN_JPN static f32 const fishnPosX[6] = {12.0f, -20.0f, 1.3f, 6.6f, 14.0f, -6.6f}; #else static f32 const fishnPosX[6] = {4.0f, -20.0f, 1.3f, 6.6f, 1.3f, 9.2f}; #endif + static f32 const fishnPosY[6] = {-72.1f, 129.6f, 0.0f, 6.6f, 32.8f, 11.7f}; mOpenFrames = 10; @@ -198,6 +237,12 @@ dMeter_drawFishingHIO_c::dMeter_drawFishingHIO_c() { mCaughtNumPosX_4x3 = -188.0f; } +#if DEBUG +void dMeter_drawFishingHIO_c::genMessage(JORMContext* mctx) { + // NONMATCHING +} +#endif + /* 801FE8DC-801FE954 1F921C 0078+00 1/1 0/0 0/0 .text __ct__22dMeter_drawInsectHIO_cFv */ dMeter_drawInsectHIO_c::dMeter_drawInsectHIO_c() { mOpenFrame = 10; @@ -225,6 +270,12 @@ dMeter_drawInsectHIO_c::dMeter_drawInsectHIO_c() { mConfirmOptionPosY = 119.0f; } +#if DEBUG +void dMeter_drawInsectHIO_c::genMessage(JORMContext* mctx) { + // NONMATCHING +} +#endif + /* 801FE954-801FE990 1F9294 003C+00 1/1 0/0 0/0 .text __ct__27dMeter_drawCalibrationHIO_cFv */ dMeter_drawCalibrationHIO_c::dMeter_drawCalibrationHIO_c() { mOpenFrames = 10; @@ -235,6 +286,12 @@ dMeter_drawCalibrationHIO_c::dMeter_drawCalibrationHIO_c() { mCircleScale2 = 0.75f; } +#if DEBUG +void dMeter_drawCalibrationHIO_c::genMessage(JORMContext* mctx) { + // NONMATCHING +} +#endif + /* 801FE990-801FEAF0 1F92D0 0160+00 1/1 0/0 0/0 .text __ct__21dMeter_drawSkillHIO_cFv */ dMeter_drawSkillHIO_c::dMeter_drawSkillHIO_c() { for (int i = 0; i < 2; i++) { @@ -271,21 +328,60 @@ dMeter_drawSkillHIO_c::dMeter_drawSkillHIO_c() { mSkillTitleScale = 1.1f; } +#if DEBUG +void dMeter_drawSkillHIO_c::genMessage(JORMContext* mctx) { + // NONMATCHING +} +#endif + /* 801FEAF0-801FEFF0 1F9430 0500+00 1/1 0/0 0/0 .text __ct__25dMeter_drawEmpButtonHIO_cFv */ dMeter_drawEmpButtonHIO_c::dMeter_drawEmpButtonHIO_c() { mPikariScale = 2.5f; - mPikariFrontInner.set(255, 255, 255, 185); - mPikariFrontOuter.set(0, 155, 0, 0); - mPikariBackInner.set(255, 255, 255, 87); - mPikariBackOuter.set(0, 115, 0, 0); - mPikariAnimSpeed = 0.772705f; + mPikariFrontInner.r = 255; + mPikariFrontInner.g = 255; + mPikariFrontInner.b = 255; + mPikariFrontInner.a = 185; + + mPikariFrontOuter.r = 0; + mPikariFrontOuter.g = 155; + mPikariFrontOuter.b = 0; + mPikariFrontOuter.a = 0; + + mPikariBackInner.r = 255; + mPikariBackInner.g = 255; + mPikariBackInner.b = 255; + mPikariBackInner.a = 87; + + mPikariBackOuter.r = 0; + mPikariBackOuter.g = 115; + mPikariBackOuter.b = 0; + mPikariBackOuter.a = 0; + + mPikariAnimSpeed = 0.772705f; mPikariFastScale = 3.0f; - mPikariFastFrontInner.set(255, 255, 255, 255); - mPikariFastFrontOuter.set(220, 220, 215, 0); - mPikariFastBackInner.set(255, 255, 190, 255); - mPikariFastBackOuter.set(200, 200, 210, 0); + + mPikariFastFrontInner.r = 255; + mPikariFastFrontInner.g = 255; + mPikariFastFrontInner.b = 255; + mPikariFastFrontInner.a = 255; + + mPikariFastFrontOuter.r = 220; + mPikariFastFrontOuter.g = 220; + mPikariFastFrontOuter.b = 215; + mPikariFastFrontOuter.a = 0; + + mPikariFastBackInner.r = 255; + mPikariFastBackInner.g = 255; + mPikariFastBackInner.b = 190; + mPikariFastBackInner.a = 255; + + mPikariFastBackOuter.r = 200; + mPikariFastBackOuter.g = 200; + mPikariFastBackOuter.b = 210; + mPikariFastBackOuter.a = 0; + mPikariFastAnimSpeed = 2.0f; mPikariListenScale = 1.0f; @@ -308,7 +404,12 @@ dMeter_drawEmpButtonHIO_c::dMeter_drawEmpButtonHIO_c() { mDebugDisplayButton[0] = 0; } + #if PLATFORM_SHIELD + mDisplaySpace = 70.0f; + #else mDisplaySpace = 35.0f; + #endif + mEmpButtonPosX = 0.0f; mEmpButtonPosY = 175.0f; mEmpButtonScale = 1.0f; @@ -405,12 +506,9 @@ dMeter_drawEmpButtonHIO_c::dMeter_drawEmpButtonHIO_c() { mViewChangePosY = 67.0f; mViewChangeScale = 1.0f; - mText2PosX = 2.0f; - mText1PosX = 2.0f; - mText2PosY = 3.0f; - mText1PosY = 3.0f; - mText2Scale = 1.0f; - mText1Scale = 1.0f; + mText1PosX = mText2PosX = 2.0f; + mText1PosY = mText2PosY = 3.0f; + mText1Scale = mText2Scale = 1.0f; mItemPosX = 12.0f; mItemPosY = 0.0f; @@ -435,11 +533,9 @@ dMeter_drawEmpButtonHIO_c::dMeter_drawEmpButtonHIO_c() { mHawkeyeZoomPosY = 25.0f; mHawkeyeZoomScale = 0.8f; mHawkeyeZoomScale_4x3 = 0.9f; - // fake match, fix later for (int i = 0; i < 3; i++) { - int* tmp = (int*)this + i; - *(f32*)(tmp + 0x62) = 0.0f; - *(f32*)(tmp + 0x6B) = 1.0f; + mHawkeyeIconPosX[i] = 0.0f; + mHawkeyeIconScale[i] = 1.0f; } mHawkeyeTextIconPosY = -6.0f; mHawkeyeZoomTextPosY = -8.0f; @@ -460,6 +556,12 @@ dMeter_drawEmpButtonHIO_c::dMeter_drawEmpButtonHIO_c() { mPointerONAnimFrame = 30; } +#if DEBUG +void dMeter_drawEmpButtonHIO_c::genMessage(JORMContext* mctx) { + // NONMATCHING +} +#endif + /* 801FEFF0-801FF31C 1F9930 032C+00 1/1 0/0 0/0 .text __ct__24dMeter_drawMiniGameHIO_cFv */ dMeter_drawMiniGameHIO_c::dMeter_drawMiniGameHIO_c() { @@ -550,19 +652,53 @@ dMeter_drawMiniGameHIO_c::dMeter_drawMiniGameHIO_c() { mGetInTextAlphaFrames = 10; mGetInPikariAppearFrames = 30; mGetInPikariScale = 1.8f; - mGetInPikariFrontInner.set(255, 255, 167, 80); - mGetInPikariFrontOuter.set(220, 110, 30, 0); - mGetInPikariBackInner.set(255, 255, 190, 90); - mGetInPikariBackOuter.set(170, 110, 0, 0); + + mGetInPikariFrontInner.r = 255; + mGetInPikariFrontInner.g = 255; + mGetInPikariFrontInner.b = 167; + mGetInPikariFrontInner.a = 80; + + mGetInPikariFrontOuter.r = 220; + mGetInPikariFrontOuter.g = 110; + mGetInPikariFrontOuter.b = 30; + mGetInPikariFrontOuter.a = 0; + + mGetInPikariBackInner.r = 255; + mGetInPikariBackInner.g = 255; + mGetInPikariBackInner.b = 190; + mGetInPikariBackInner.a = 90; + + mGetInPikariBackOuter.r = 170; + mGetInPikariBackOuter.g = 110; + mGetInPikariBackOuter.b = 0; + mGetInPikariBackOuter.a = 0; + mGetInPikariAnimSpeed = 0.6f; mGetInTextLocation = 0; mStartPikariAppearFrames = 30; mStartPikariScale = 1.8f; - mStartPikariFrontInner.set(255, 255, 167, 80); - mStartPikariFrontOuter.set(220, 110, 30, 0); - mStartPikariBackInner.set(255, 255, 190, 90); - mStartPikariBackOuter.set(170, 110, 0, 0); + + mStartPikariFrontInner.r = 255; + mStartPikariFrontInner.g = 255; + mStartPikariFrontInner.b = 167; + mStartPikariFrontInner.a = 80; + + mStartPikariFrontOuter.r = 220; + mStartPikariFrontOuter.g = 110; + mStartPikariFrontOuter.b = 30; + mStartPikariFrontOuter.a = 0; + + mStartPikariBackInner.r = 255; + mStartPikariBackInner.g = 255; + mStartPikariBackInner.b = 190; + mStartPikariBackInner.a = 90; + + mStartPikariBackOuter.r = 170; + mStartPikariBackOuter.g = 110; + mStartPikariBackOuter.b = 0; + mStartPikariBackOuter.a = 0; + mStartPikariAnimSpeed = 0.6f; mStartPikariDisplayFrames = 30; @@ -575,13 +711,36 @@ dMeter_drawMiniGameHIO_c::dMeter_drawMiniGameHIO_c() { field_0x172 = 10; mReadyFightPikariAppearFrames = 30; mReadyFightPikariScale = 1.8f; - mReadyFightPikariFrontInner.set(255, 255, 167, 80); - mReadyFightPikariFrontOuter.set(220, 110, 30, 0); - mReadyFightPikariBackInner.set(255, 255, 190, 90); - mReadyFightPikariBackOuter.set(170, 110, 0, 0); + + mReadyFightPikariFrontInner.r = 255; + mReadyFightPikariFrontInner.g = 255; + mReadyFightPikariFrontInner.b = 167; + mReadyFightPikariFrontInner.a = 80; + + mReadyFightPikariFrontOuter.r = 220; + mReadyFightPikariFrontOuter.g = 110; + mReadyFightPikariFrontOuter.b = 30; + mReadyFightPikariFrontOuter.a = 0; + + mReadyFightPikariBackInner.r = 255; + mReadyFightPikariBackInner.g = 255; + mReadyFightPikariBackInner.b = 190; + mReadyFightPikariBackInner.a = 90; + + mReadyFightPikariBackOuter.r = 170; + mReadyFightPikariBackOuter.g = 110; + mReadyFightPikariBackOuter.b = 0; + mReadyFightPikariBackOuter.a = 0; + mReadyFightPikariAnimSpeed = 0.6f; } +#if DEBUG +void dMeter_drawMiniGameHIO_c::genMessage(JORMContext* mctx) { + // NONMATCHING +} +#endif + /* 801FF31C-801FF5B8 1F9C5C 029C+00 1/1 0/0 0/0 .text __ct__25dMeter_drawLightDropHIO_cFv */ dMeter_drawLightDropHIO_c::dMeter_drawLightDropHIO_c() { @@ -624,10 +783,26 @@ dMeter_drawLightDropHIO_c::dMeter_drawLightDropHIO_c() { mPikariLoopBackOuter[1].set(126, 238, 218, 0); mPikariLoopBackStopFrame = 19.0f; - mDropPikariFrontInner.set(255, 255, 255, 255); - mDropPikariFrontOuter.set(0, 0, 0, 0); - mDropPikariBackInner.set(255, 255, 255, 255); - mDropPikariBackOuter.set(126, 238, 218, 0); + mDropPikariFrontInner.r = 255; + mDropPikariFrontInner.g = 255; + mDropPikariFrontInner.b = 255; + mDropPikariFrontInner.a = 255; + + mDropPikariFrontOuter.r = 0; + mDropPikariFrontOuter.g = 0; + mDropPikariFrontOuter.b = 0; + mDropPikariFrontOuter.a = 0; + + mDropPikariBackInner.r = 255; + mDropPikariBackInner.g = 255; + mDropPikariBackInner.b = 255; + mDropPikariBackInner.a = 255; + + mDropPikariBackOuter.r = 126; + mDropPikariBackOuter.g = 238; + mDropPikariBackOuter.b = 218; + mDropPikariBackOuter.a = 0; + mDropPikariAnimSpeed = 0.1f; mDropPikariAnimSpeed_Completed = 0.6f; mPikariScaleNormal = 1.3f; @@ -635,6 +810,12 @@ dMeter_drawLightDropHIO_c::dMeter_drawLightDropHIO_c() { mAnimDebug = 0; } +#if DEBUG +void dMeter_drawLightDropHIO_c::genMessage(JORMContext* mctx) { + // NONMATCHING +} +#endif + /* 801FF5B8-802001AC 1F9EF8 0BF4+00 1/1 0/0 0/0 .text __ct__16dMeter_drawHIO_cFv */ dMeter_drawHIO_c::dMeter_drawHIO_c() { #ifdef DEBUG @@ -880,27 +1061,42 @@ dMeter_drawHIO_c::dMeter_drawHIO_c() { mButtonATextScale = 1.0f; mButtonATextPosX = 0.0f; mButtonATextPosY = 0.0f; - mButtonATextColor.set(255, 255, 255, 255); + mButtonATextColor.r = 255; + mButtonATextColor.g = 255; + mButtonATextColor.b = 255; + mButtonATextColor.a = 255; mButtonBFontScale = 1.0f; mButtonBFontPosX = -8.0f; mButtonBFontPosY = 4.0f; - mButtonBFontColor.set(255, 255, 255, 255); + mButtonBFontColor.r = 255; + mButtonBFontColor.g = 255; + mButtonBFontColor.b = 255; + mButtonBFontColor.a = 255; field_0x2e4 = 1.0f; field_0x2e8 = 0.0f; field_0x2ec = 0.0f; - field_0x2f0.set(255, 255, 255, 255); + field_0x2f0.r = 255; + field_0x2f0.g = 255; + field_0x2f0.b = 255; + field_0x2f0.a = 255; mButtonXYTextScale = 1.0f; mButtonXYTextPosX = 0.0f; mButtonXYTextPosY = 0.0f; - mButtonXYTextColor.set(255, 255, 255, 255); + mButtonXYTextColor.r = 255; + mButtonXYTextColor.g = 255; + mButtonXYTextColor.b = 255; + mButtonXYTextColor.a = 255; mButtonZFontScale = 1.0f; mButtonZFontPosX = 0.0f; mButtonZFontPosY = -4.7f; - mButtonZFontColor.set(255, 255, 255, 255); + mButtonZFontColor.r = 255; + mButtonZFontColor.g = 255; + mButtonZFontColor.b = 255; + mButtonZFontColor.a = 255; mRupeeKeyScale = 1.0f; mRupeeKeyPosX = 9.2f; @@ -980,66 +1176,226 @@ dMeter_drawHIO_c::dMeter_drawHIO_c() { mMaxSpurAmount = 6; - mSpurIconPikariFrontInner.set(255, 255, 255, 255); - mSpurIconPikariFrontOuter.set(140, 232, 228, 0); - mSpurIconPikariBackInner.set(255, 255, 190, 255); - mSpurIconPikariBackOuter.set(55, 215, 90, 0); + mSpurIconPikariFrontInner.r = 255; + mSpurIconPikariFrontInner.g = 255; + mSpurIconPikariFrontInner.b = 255; + mSpurIconPikariFrontInner.a = 255; + + mSpurIconPikariFrontOuter.r = 140; + mSpurIconPikariFrontOuter.g = 232; + mSpurIconPikariFrontOuter.b = 228; + mSpurIconPikariFrontOuter.a = 0; + + mSpurIconPikariBackInner.r = 255; + mSpurIconPikariBackInner.g = 255; + mSpurIconPikariBackInner.b = 190; + mSpurIconPikariBackInner.a = 255; + + mSpurIconPikariBackOuter.r = 55; + mSpurIconPikariBackOuter.g = 215; + mSpurIconPikariBackOuter.b = 90; + mSpurIconPikariBackOuter.a = 0; + mSpurIconPikariAnimSpeed = 1.5f; - mSpurIconRevivePikariFrontInner.set(255, 255, 255, 255); - mSpurIconRevivePikariFrontOuter.set(220, 110, 30, 0); - mSpurIconRevivePikariBackInner.set(255, 255, 190, 255); - mSpurIconRevivePikariBackOuter.set(170, 110, 0, 0); + mSpurIconRevivePikariFrontInner.r = 255; + mSpurIconRevivePikariFrontInner.g = 255; + mSpurIconRevivePikariFrontInner.b = 255; + mSpurIconRevivePikariFrontInner.a = 255; + + mSpurIconRevivePikariFrontOuter.r = 220; + mSpurIconRevivePikariFrontOuter.g = 110; + mSpurIconRevivePikariFrontOuter.b = 30; + mSpurIconRevivePikariFrontOuter.a = 0; + + mSpurIconRevivePikariBackInner.r = 255; + mSpurIconRevivePikariBackInner.g = 255; + mSpurIconRevivePikariBackInner.b = 190; + mSpurIconRevivePikariBackInner.a = 255; + + mSpurIconRevivePikariBackOuter.r = 170; + mSpurIconRevivePikariBackOuter.g = 110; + mSpurIconRevivePikariBackOuter.b = 0; + mSpurIconRevivePikariBackOuter.a = 0; + mSpurIconRevivePikariAnimSpeed = 0.5f; - mButtonZPikariFrontInner.set(255, 255, 255, 255); - mButtonZPikariFrontOuter.set(0, 0, 0, 0); - mButtonZPikariBackInner.set(255, 255, 255, 255); - mButtonZPikariBackOuter.set(160, 160, 110, 0); + mButtonZPikariFrontInner.r = 255; + mButtonZPikariFrontInner.g = 255; + mButtonZPikariFrontInner.b = 255; + mButtonZPikariFrontInner.a = 255; + + mButtonZPikariFrontOuter.r = 0; + mButtonZPikariFrontOuter.g = 0; + mButtonZPikariFrontOuter.b = 0; + mButtonZPikariFrontOuter.a = 0; + + mButtonZPikariBackInner.r = 255; + mButtonZPikariBackInner.g = 255; + mButtonZPikariBackInner.b = 255; + mButtonZPikariBackInner.a = 255; + + mButtonZPikariBackOuter.r = 160; + mButtonZPikariBackOuter.g = 160; + mButtonZPikariBackOuter.b = 110; + mButtonZPikariBackOuter.a = 0; + mButtonZPikariAnimSpeed = 0.4f; - mButtonXYPikariFrontInner.set(255, 255, 255, 255); - mButtonXYPikariFrontOuter.set(0, 0, 0, 0); - mButtonXYPikariBackInner.set(255, 255, 255, 255); - mButtonXYPikariBackOuter.set(160, 160, 110, 0); + mButtonXYPikariFrontInner.r = 255; + mButtonXYPikariFrontInner.g = 255; + mButtonXYPikariFrontInner.b = 255; + mButtonXYPikariFrontInner.a = 255; + + mButtonXYPikariFrontOuter.r = 0; + mButtonXYPikariFrontOuter.g = 0; + mButtonXYPikariFrontOuter.b = 0; + mButtonXYPikariFrontOuter.a = 0; + + mButtonXYPikariBackInner.r = 255; + mButtonXYPikariBackInner.g = 255; + mButtonXYPikariBackInner.b = 255; + mButtonXYPikariBackInner.a = 255; + + mButtonXYPikariBackOuter.r = 160; + mButtonXYPikariBackOuter.g = 160; + mButtonXYPikariBackOuter.b = 110; + mButtonXYPikariBackOuter.a = 0; + mButtonXYPikariAnimSpeed = 0.4f; - mButtonAPikariFrontInner.set(255, 255, 255, 160); - mButtonAPikariFrontOuter.set(0, 0, 0, 0); - mButtonAPikariBackInner.set(255, 255, 255, 128); - mButtonAPikariBackOuter.set(0, 255, 0, 0); + mButtonAPikariFrontInner.r = 255; + mButtonAPikariFrontInner.g = 255; + mButtonAPikariFrontInner.b = 255; + mButtonAPikariFrontInner.a = 160; + + mButtonAPikariFrontOuter.r = 0; + mButtonAPikariFrontOuter.g = 0; + mButtonAPikariFrontOuter.b = 0; + mButtonAPikariFrontOuter.a = 0; + + mButtonAPikariBackInner.r = 255; + mButtonAPikariBackInner.g = 255; + mButtonAPikariBackInner.b = 255; + mButtonAPikariBackInner.a = 128; + + mButtonAPikariBackOuter.r = 0; + mButtonAPikariBackOuter.g = 255; + mButtonAPikariBackOuter.b = 0; + mButtonAPikariBackOuter.a = 0; + mButtonAPikariAnimSpeed = 0.4f; - mButtonBPikariFrontInner.set(255, 180, 180, 160); - mButtonBPikariFrontOuter.set(0, 0, 0, 0); - mButtonBPikariBackInner.set(255, 255, 255, 128); - mButtonBPikariBackOuter.set(255, 0, 0, 0); + mButtonBPikariFrontInner.r = 255; + mButtonBPikariFrontInner.g = 180; + mButtonBPikariFrontInner.b = 180; + mButtonBPikariFrontInner.a = 160; + + mButtonBPikariFrontOuter.r = 0; + mButtonBPikariFrontOuter.g = 0; + mButtonBPikariFrontOuter.b = 0; + mButtonBPikariFrontOuter.a = 0; + + mButtonBPikariBackInner.r = 255; + mButtonBPikariBackInner.g = 255; + mButtonBPikariBackInner.b = 255; + mButtonBPikariBackInner.a = 128; + + mButtonBPikariBackOuter.r = 255; + mButtonBPikariBackOuter.g = 0; + mButtonBPikariBackOuter.b = 0; + mButtonBPikariBackOuter.a = 0; + mButtonBPikariAnimSpeed = 0.4f; - field_0x4a8.set(255, 180, 180, 160); - field_0x4ac.set(0, 0, 0, 0); - field_0x4b0.set(255, 255, 255, 128); - field_0x4b4.set(255, 0, 0, 0); + field_0x4a8.r = 255; + field_0x4a8.g = 180; + field_0x4a8.b = 180; + field_0x4a8.a = 160; + + field_0x4ac.r = 0; + field_0x4ac.g = 0; + field_0x4ac.b = 0; + field_0x4ac.a = 0; + + field_0x4b0.r = 255; + field_0x4b0.g = 255; + field_0x4b0.b = 255; + field_0x4b0.a = 128; + + field_0x4b4.r = 255; + field_0x4b4.g = 0; + field_0x4b4.b = 0; + field_0x4b4.a = 0; + field_0x4b8 = 0.4f; - field_0x4bc.set(255, 180, 180, 160); - field_0x4c0.set(0, 0, 0, 0); - field_0x4c4.set(255, 255, 255, 128); - field_0x4c8.set(255, 255, 255, 0); + field_0x4bc.r = 255; + field_0x4bc.g = 180; + field_0x4bc.b = 180; + field_0x4bc.a = 160; + + field_0x4c0.r = 0; + field_0x4c0.g = 0; + field_0x4c0.b = 0; + field_0x4c0.a = 0; + + field_0x4c4.r = 255; + field_0x4c4.g = 255; + field_0x4c4.b = 255; + field_0x4c4.a = 128; + + field_0x4c8.r = 255; + field_0x4c8.g = 255; + field_0x4c8.b = 255; + field_0x4c8.a = 0; + field_0x4cc = 0.4f; field_0x3d0 = 0.7f; - field_0x4d0.set(255, 180, 180, 160); - field_0x4d4.set(0, 0, 0, 0); - field_0x4d8.set(255, 255, 255, 128); - field_0x4dc.set(255, 255, 255, 0); + field_0x4d0.r = 255; + field_0x4d0.g = 180; + field_0x4d0.b = 180; + field_0x4d0.a = 160; + + field_0x4d4.r = 0; + field_0x4d4.g = 0; + field_0x4d4.b = 0; + field_0x4d4.a = 0; + + field_0x4d8.r = 255; + field_0x4d8.g = 255; + field_0x4d8.b = 255; + field_0x4d8.a = 128; + + field_0x4dc.r = 255; + field_0x4dc.g = 255; + field_0x4dc.b = 255; + field_0x4dc.a = 0; + field_0x4e0 = 0.4f; field_0x3d4 = 0.7f; - mMidnaIconPikariFrontInner.set(200, 235, 255, 255); - mMidnaIconPikariFrontOuter.set(0, 0, 0, 0); - mMidnaIconPikariBackInner.set(255, 255, 255, 255); - mMidnaIconPikariBackOuter.set(140, 200, 125, 0); + mMidnaIconPikariFrontInner.r = 200; + mMidnaIconPikariFrontInner.g = 235; + mMidnaIconPikariFrontInner.b = 255; + mMidnaIconPikariFrontInner.a = 255; + + mMidnaIconPikariFrontOuter.r = 0; + mMidnaIconPikariFrontOuter.g = 0; + mMidnaIconPikariFrontOuter.b = 0; + mMidnaIconPikariFrontOuter.a = 0; + + mMidnaIconPikariBackInner.r = 255; + mMidnaIconPikariBackInner.g = 255; + mMidnaIconPikariBackInner.b = 255; + mMidnaIconPikariBackInner.a = 255; + + mMidnaIconPikariBackOuter.r = 140; + mMidnaIconPikariBackOuter.g = 200; + mMidnaIconPikariBackOuter.b = 125; + mMidnaIconPikariBackOuter.a = 0; + mMidnaIconPikariAnimSpeed = 0.5f; mMidnaIconFlashRate = 50; @@ -1106,6 +1462,22 @@ dMeter_drawHIO_c::dMeter_drawHIO_c() { mLanternIconMeterSize = 1.0f; } +#if WIDESCREEN_SUPPORT +void dMeter_drawHIO_c::updateOnWide() {} + +void dMeter_drawHIO_c::updateOffWide() {} +#endif + +#if DEBUG +void dMeter_drawHIO_c::genMessage(JORMContext* mctx) { + // NONMATCHING +} + +void dMeter_drawHIO_c::updateFMsgDebug() { + +} +#endif + /* 802001AC-802004B4 1FAAEC 0308+00 1/1 0/0 0/0 .text __ct__16dMeter_ringHIO_cFv */ dMeter_ringHIO_c::dMeter_ringHIO_c() { mRingRadiusH = 175.0f; @@ -1218,6 +1590,18 @@ dMeter_ringHIO_c::dMeter_ringHIO_c() { mDirectSelectWaitFrames = 4; } +#if WIDESCREEN_SUPPORT +void dMeter_ringHIO_c::updateOnWide() {} + +void dMeter_ringHIO_c::updateOffWide() {} +#endif + +#if DEBUG +void dMeter_ringHIO_c::genMessage(JORMContext* mctx) { + // NONMATCHING +} +#endif + /* 802004B4-802006C8 1FADF4 0214+00 1/1 0/0 0/0 .text __ct__19dMeter_mapIconHIO_cFv */ dMeter_mapIconHIO_c::dMeter_mapIconHIO_c() { mPortalCursorScale = 0.5f; @@ -1311,7 +1695,7 @@ dMeter_mapIconHIO_c::dMeter_mapIconHIO_c() { mLV5DungeonItem = fpcNm_ITEM_NONE; mIconDebug = false; - for (int i = 0; i < ARRAY_SIZEU(mIconDisplay); i++) { + for (int i = 0; i < ARRAY_SIZE(mIconDisplay); i++) { mIconDisplay[i] = true; } @@ -1326,11 +1710,21 @@ dMeter_mapIconHIO_c::dMeter_mapIconHIO_c() { mLightDropFlashFrameNum = 10; } +#if DEBUG +void dMeter_mapIconHIO_c::genMessage(JORMContext* mctx) { + // NONMATCHING +} +#endif + /* 802006C8-80200BCC 1FB008 0504+00 1/1 0/0 0/0 .text __ct__16dMeter_fmapHIO_cFv */ dMeter_fmapHIO_c::dMeter_fmapHIO_c() { - field_0xc = NULL; - field_0x10 = NULL; - mpArchive = NULL; + mpArcFile = NULL; + mpDecompBuf = NULL; + mpArcData = NULL; + + #if DEBUG + mpEvtCallBack = NULL; + #endif mDisplayFrameNum = 8; mUndisplayFrameNum = 6; @@ -1362,17 +1756,18 @@ dMeter_fmapHIO_c::dMeter_fmapHIO_c() { mScrollSpeedSlowBound = 0.2f; mScrollSpeedFastBound = 1.0f; - // fake match for (int i = 0; i < 8; i++) { - int* tmp = (int*)this + i; - *(f32*)(tmp + 0x5B) = 0.0f; - *(f32*)(tmp + 0x63) = 0.0f; - *(f32*)(tmp + 0x6B) = 0.0f; - *(f32*)(tmp + 0x73) = -300000.0f; - *(f32*)(tmp + 0x7B) = -300000.0f; - *(f32*)(tmp + 0x83) = 300000.0f; - *(f32*)(tmp + 0x8B) = 300000.0f; + mRegionImagePosX[i] = 0.0f; + mRegionImagePosZ[i] = 0.0f; + mRegionImageScale[i] = 0.0f; + + mRegionScrollRangeMinX[i] = -300000.0f; + mRegionScrollRangeMinZ[i] = -300000.0f; + + mRegionScrollRangeMaxX[i] = 300000.0f; + mRegionScrollRangeMaxZ[i] = 300000.0f; } + mScrollRangeDebugON = false; mScrollRangeDisplay = false; field_0x308 = true; @@ -1500,30 +1895,59 @@ dMeter_fmapHIO_c::dMeter_fmapHIO_c() { mMapBlink[ZOOM_VIEW].field_0x20.set(0, 0, 0, 0); mMapBlink[ZOOM_VIEW].field_0x24.set(0, 0, 0, 255); - for (int i = 0; i < ARRAY_SIZEU(mDebugRegionBits); i++) { + for (int i = 0; i < ARRAY_SIZE(mDebugRegionBits); i++) { mDebugRegionBits[i] = 0; } } /* 80200BCC-80200CD4 1FB50C 0108+00 2/1 0/0 0/0 .text __dt__16dMeter_fmapHIO_cFv */ dMeter_fmapHIO_c::~dMeter_fmapHIO_c() { - if (field_0xc != NULL) { - mDoExt_getGameHeap()->free(field_0xc); - field_0xc = NULL; + if (mpArcFile != NULL) { + mDoExt_getGameHeap()->free(mpArcFile); + mpArcFile = NULL; } - if (field_0x10 != NULL) { - mDoExt_getGameHeap()->free(field_0x10); - field_0x10 = NULL; + if (mpDecompBuf != NULL) { + mDoExt_getGameHeap()->free(mpDecompBuf); + mpDecompBuf = NULL; } - if (mpArchive != NULL) { - mpArchive->unmount(); - delete mpArchive; - mpArchive = NULL; + if (mpArcData != NULL) { + JKRUnmountArchive(mpArcData); + delete mpArcData; + mpArcData = NULL; } + + #if DEBUG + if (mpEvtCallBack != NULL) { + delete mpEvtCallBack; + mpEvtCallBack = NULL; + } + #endif } +#if DEBUG +void dMeter_fmapHIO_c::genMessage(JORMContext* mctx) { + // NONMATCHING +} + +void dMeter_fmapHIO_c::listenPropertyEvent(const JORPropertyEvent*) { + +} + +void dMeter_fmapHIO_c::createEvtCallBackObject() { + +} + +void dMeter_fmapHIO_c::deleteEvtCallBackObject() { + +} + +void dMeter_fmapHIO_c::update() { + +} +#endif + /* 80200CD4-80200D58 1FB614 0084+00 1/1 0/0 0/0 .text __ct__18dMeter_cursorHIO_cFv */ dMeter_cursorHIO_c::dMeter_cursorHIO_c() { mShopCursorScale = 1.05f; @@ -1538,6 +1962,12 @@ dMeter_cursorHIO_c::dMeter_cursorHIO_c() { mMagicArmorObjZoomAngleX = -500; } +#if DEBUG +void dMeter_cursorHIO_c::genMessage(JORMContext* mctx) { + // NONMATCHING +} +#endif + /* 804510B0-804510B8 0005B0 0008+00 1/1 1/1 0/0 .sbss g_menuHIO */ dMeter_menuHIO_c g_menuHIO; diff --git a/src/d/d_msg_object.cpp b/src/d/d_msg_object.cpp index 0180a3a703..98cb3cf055 100644 --- a/src/d/d_msg_object.cpp +++ b/src/d/d_msg_object.cpp @@ -1510,8 +1510,8 @@ void dMsgObject_c::fukiPosCalc(bool param_1) { temp = cStack_48.y; } else { mDoLib_project(&field_0x100->pos, &local_3c); - if (local_3c.x >= 0.0f && local_3c.x <= 608.0f && local_3c.y >= 0.0f && - local_3c.y <= 448.0f) + if (local_3c.x >= 0.0f && local_3c.x <= FB_WIDTH && local_3c.y >= 0.0f && + local_3c.y <= FB_HEIGHT) { temp = 0.5f * (cStack_48.y + local_3c.y); } else { diff --git a/src/d/d_msg_scrn_howl.cpp b/src/d/d_msg_scrn_howl.cpp index 7ee409442a..eeb27a5892 100644 --- a/src/d/d_msg_scrn_howl.cpp +++ b/src/d/d_msg_scrn_howl.cpp @@ -491,8 +491,8 @@ void dMsgScrnHowl_c::drawWave() { s32 local_94 = 0; Vec fVar12 = field_0x128; Vec this_02 = field_0x140; - f32 fVar1 = mDoGph_gInf_c::getWidthF() / 608.0f; - f32 fVar2 = mDoGph_gInf_c::getHeightF() / 448.0f; + f32 fVar1 = mDoGph_gInf_c::getWidthF() / FB_WIDTH; + f32 fVar2 = mDoGph_gInf_c::getHeightF() / FB_HEIGHT; grafContext->scissor( (fVar12.x - mDoGph_gInf_c::getMinXF()) / fVar1 - 16.0f, (fVar12.y / fVar2) / fVar2 - 16.0f, @@ -596,8 +596,8 @@ void dMsgScrnHowl_c::drawGuide() { Vec local_b0 = field_0x128; Vec local_bc = field_0x140; grafContext->scissor( - (local_b0.x - mDoGph_gInf_c::getMinXF()) / (mDoGph_gInf_c::getWidthF() / 608.0f), - field_0x2118, (local_bc.x - local_b0.x) / (mDoGph_gInf_c::getWidthF() / 608.0f), + (local_b0.x - mDoGph_gInf_c::getMinXF()) / (mDoGph_gInf_c::getWidthF() / FB_WIDTH), + field_0x2118, (local_bc.x - local_b0.x) / (mDoGph_gInf_c::getWidthF() / FB_WIDTH), field_0x2120); grafContext->setScissor(); f32 local_cc = mpLineH[0]->getGlobalPosX(); @@ -727,10 +727,10 @@ void dMsgScrnHowl_c::drawGuide2() { } Vec local_58 = field_0x128; Vec local_64 = field_0x140; - f32 local_70 = mDoGph_gInf_c::getHeightF() / 448.0f; + f32 local_70 = mDoGph_gInf_c::getHeightF() / FB_HEIGHT; grafContext->scissor( - (local_58.x - mDoGph_gInf_c::getMinXF()) / (mDoGph_gInf_c::getWidthF() / 608.0f), - field_0x2118, (local_64.x - local_58.x) / (mDoGph_gInf_c::getWidthF() / 608.0f), + (local_58.x - mDoGph_gInf_c::getMinXF()) / (mDoGph_gInf_c::getWidthF() / FB_WIDTH), + field_0x2118, (local_64.x - local_58.x) / (mDoGph_gInf_c::getWidthF() / FB_WIDTH), field_0x2120); grafContext->setScissor(); f32 local_74 = mpLineH[0]->getGlobalPosX(); @@ -835,8 +835,8 @@ void dMsgScrnHowl_c::drawEffect() { Vec vec2 = field_0x140; mDoGph_gInf_c::getHeightF(); grafContext->scissor( - (vec1.x - mDoGph_gInf_c::getMinXF()) / (mDoGph_gInf_c::getWidthF() / 608.0f), field_0x2118, - 12.0f + ((vec2.x - vec1.x) / (mDoGph_gInf_c::getWidthF() / 608.0f)), field_0x2120); + (vec1.x - mDoGph_gInf_c::getMinXF()) / (mDoGph_gInf_c::getWidthF() / FB_WIDTH), field_0x2118, + 12.0f + ((vec2.x - vec1.x) / (mDoGph_gInf_c::getWidthF() / FB_WIDTH)), field_0x2120); grafContext->setScissor(); u8 timer = daAlink_getAlinkActorClass()->getWolfHowlMgrP()->getReleaseTimer(); u8 screenAlpha = mpScreen->search('line00')->getAlpha(); diff --git a/src/d/d_msg_scrn_item.cpp b/src/d/d_msg_scrn_item.cpp index 9443a01cde..7fb6a43e63 100644 --- a/src/d/d_msg_scrn_item.cpp +++ b/src/d/d_msg_scrn_item.cpp @@ -413,10 +413,14 @@ void dMsgScrnItem_c::drawSelf() { } f32 globalPosX = mpTm_c[0]->getGlobalPosX(); + + #if WIDESCREEN_SUPPORT if (mDoGph_gInf_c::isWide()) { drawOutFont(g_MsgObject_HIO_c.mBoxItemTextPosX + 7.0f + YREG_F(2), g_MsgObject_HIO_c.mBoxItemTextPosY, 1.0f); - } else { + } else + #endif + { drawOutFont(g_MsgObject_HIO_c.mBoxItemTextPosX - 2.0f + YREG_F(2), g_MsgObject_HIO_c.mBoxItemTextPosY, 1.0f); } @@ -577,8 +581,8 @@ void dMsgScrnItem_c::fukiPosCalc(u8 param_1) { f3 = cStack_7c.y; } else { mDoLib_project(&iVar6->pos, &local_70); - if (local_70.x >= 0.0f && local_70.x <= 608.0f && local_70.y >= 0.0f && - local_70.y <= 448.0f) + if (local_70.x >= 0.0f && local_70.x <= FB_WIDTH && local_70.y >= 0.0f && + local_70.y <= FB_HEIGHT) { f3 = 0.5f * (cStack_7c.y + local_70.y); } else { diff --git a/src/d/d_ovlp_fade2.cpp b/src/d/d_ovlp_fade2.cpp index 897971a64a..25c8bc9420 100644 --- a/src/d/d_ovlp_fade2.cpp +++ b/src/d/d_ovlp_fade2.cpp @@ -13,8 +13,8 @@ /* 8025247C-80252990 24CDBC 0514+00 1/0 0/0 0/0 .text draw__15dOvlpFd2_dlst_cFv */ void dOvlpFd2_dlst_c::draw() { - GXSetViewport(0.0f, 0.0f, 608.0f, 448.0f, 0.0f, 1.0f); - GXSetScissor(0, 0, 608, 448); + GXSetViewport(0.0f, 0.0f, FB_WIDTH, FB_HEIGHT, 0.0f, 1.0f); + GXSetScissor(0, 0, FB_WIDTH, FB_HEIGHT); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGB, GX_RGBA4, 0); GXClearVtxDesc(); GXSetVtxDesc(GX_VA_POS, GX_DIRECT); @@ -50,8 +50,8 @@ void dOvlpFd2_dlst_c::draw() { C_MTXPerspective(m, 60.0f, mDoGph_gInf_c::getWidthF() / mDoGph_gInf_c::getHeightF(), 100.0f, 100000.0f); GXSetProjection(m, GX_PERSPECTIVE); - GXInitTexObj(mDoGph_gInf_c::getFrameBufferTexObj(), mDoGph_gInf_c::getFrameBufferTex(), 304, - 224, GX_TF_RGBA8, GX_CLAMP, GX_CLAMP, GX_FALSE); + GXInitTexObj(mDoGph_gInf_c::getFrameBufferTexObj(), mDoGph_gInf_c::getFrameBufferTex(), FB_WIDTH / 2, + FB_HEIGHT / 2, GX_TF_RGBA8, GX_CLAMP, GX_CLAMP, GX_FALSE); GXInitTexObjLOD(mDoGph_gInf_c::getFrameBufferTexObj(), GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1); GXLoadTexObj(mDoGph_gInf_c::getFrameBufferTexObj(), GX_TEXMAP0); diff --git a/src/d/d_ovlp_fade3.cpp b/src/d/d_ovlp_fade3.cpp index fff134b974..7752b8a0c8 100644 --- a/src/d/d_ovlp_fade3.cpp +++ b/src/d/d_ovlp_fade3.cpp @@ -14,16 +14,16 @@ /* 80252ED4-80252F28 24D814 0054+00 1/0 0/0 0/0 .text draw__16dDlst_snapShot_cFv */ void dDlst_snapShot_c::draw() { - GXSetTexCopySrc(0, 0, 608, 448); - GXSetTexCopyDst(608 / 2, 448 / 2, GX_TF_RGBA8, GX_TRUE); + GXSetTexCopySrc(0, 0, FB_WIDTH, FB_HEIGHT); + GXSetTexCopyDst(FB_WIDTH / 2, FB_HEIGHT / 2, GX_TF_RGBA8, GX_TRUE); GXCopyTex(mDoGph_gInf_c::getFrameBufferTex(), GX_FALSE); GXPixModeSync(); } /* 80252F28-8025343C 24D868 0514+00 1/0 0/0 0/0 .text draw__15dOvlpFd3_dlst_cFv */ void dOvlpFd3_dlst_c::draw() { - GXSetViewport(0.0f, 0.0f, 608.0f, 448.0f, 0.0f, 1.0f); - GXSetScissor(0, 0, 608, 448); + GXSetViewport(0.0f, 0.0f, FB_WIDTH, FB_HEIGHT, 0.0f, 1.0f); + GXSetScissor(0, 0, FB_WIDTH, FB_HEIGHT); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGB, GX_RGBA4, 0); GXClearVtxDesc(); GXSetVtxDesc(GX_VA_POS, GX_DIRECT); @@ -59,8 +59,8 @@ void dOvlpFd3_dlst_c::draw() { C_MTXPerspective(m, 60.0f, mDoGph_gInf_c::getWidthF() / mDoGph_gInf_c::getHeightF(), 100.0f, 100000.0f); GXSetProjection(m, GX_PERSPECTIVE); - GXInitTexObj(mDoGph_gInf_c::getFrameBufferTexObj(), mDoGph_gInf_c::getFrameBufferTex(), 304, - 224, GX_TF_RGBA8, GX_CLAMP, GX_CLAMP, GX_FALSE); + GXInitTexObj(mDoGph_gInf_c::getFrameBufferTexObj(), mDoGph_gInf_c::getFrameBufferTex(), FB_WIDTH / 2, + FB_HEIGHT / 2, GX_TF_RGBA8, GX_CLAMP, GX_CLAMP, GX_FALSE); GXInitTexObjLOD(mDoGph_gInf_c::getFrameBufferTexObj(), GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1); GXLoadTexObj(mDoGph_gInf_c::getFrameBufferTexObj(), GX_TEXMAP0); diff --git a/src/d/d_pane_class.cpp b/src/d/d_pane_class.cpp index 3ce2ed5fc2..031f1b3421 100644 --- a/src/d/d_pane_class.cpp +++ b/src/d/d_pane_class.cpp @@ -391,7 +391,7 @@ Vec CPaneMgr::getGlobalVtx(J2DPane* p_pane, Mtx* param_1, u8 param_2, bool param MtxP mp = (MtxP)param_1; J2DPane* parent = p_pane->getParentPane(); - J2DOrthoGraph ortho(0.0f, 0.0f, 608.0f, 448.0f, -1.0f, 1.0f); + J2DOrthoGraph ortho(0.0f, 0.0f, FB_WIDTH, FB_HEIGHT, -1.0f, 1.0f); ortho.setOrtho(mDoGph_gInf_c::getMinXF(), mDoGph_gInf_c::getMinYF(), mDoGph_gInf_c::getWidthF(), mDoGph_gInf_c::getHeightF(), -1.0f, 1.0f); if (parent != NULL) { diff --git a/src/d/d_s_logo.cpp b/src/d/d_s_logo.cpp index 4709adc528..8e32ea4d3f 100644 --- a/src/d/d_s_logo.cpp +++ b/src/d/d_s_logo.cpp @@ -18,6 +18,10 @@ #include "m_Do/m_Do_graphic.h" #include "m_Do/m_Do_machine.h" +#if PLATFORM_WII +#include "d/d_cursor_mng.h" +#endif + #if VERSION == VERSION_GCN_JPN #define LOGO_ARC "Logo" #define MSG_PATH "/res/Msgjp/bmgres.arc" @@ -532,6 +536,10 @@ dScnLogo_c::~dScnLogo_c() { dDlst_shadowControl_c::setSimpleTex((ResTIMG*)dComIfG_getObjectRes("Always", 0x4A)); dTres_c::createWork(); dMpath_c::createWork(); + + #if PLATFORM_WII + data_8053a730 = 0; + #endif } /* 80257910-802579BC 252250 00AC+00 1/0 0/0 0/0 .text phase_0__FP10dScnLogo_c */ @@ -619,6 +627,10 @@ int dScnLogo_c::create() { return phase_state; } + #if PLATFORM_WII + data_8053a730 = 1; + #endif + mpHeap = mDoExt_setCurrentHeap(field_0x1d4); logoInitGC(); mpHeap->becomeCurrentHeap(); @@ -730,10 +742,10 @@ void dScnLogo_c::logoInitGC() { }; ResTIMG* warningImg = (ResTIMG*)mpPalLogoResCommand->getArchive()->getResource('DAT ', warning[language]); - mWarning = new dDlst_2D_c(warningImg, 0, 0, 608, 448, 255); + mWarning = new dDlst_2D_c(warningImg, 0, 0, FB_WIDTH, FB_HEIGHT, 255); ResTIMG* warnStartImg = (ResTIMG*)mpPalLogoResCommand->getArchive()->getResource('DAT ', warningPs[language]); - mWarningStart = new dDlst_2D_c(warnStartImg, 0, 359, 608, 48, 255); + mWarningStart = new dDlst_2D_c(warnStartImg, 0, 359, FB_WIDTH, 48, 255); ResTIMG* progChoiceImg = (ResTIMG*)mpPalLogoResCommand->getArchive()->getResource('DAT ', choice[language]); mProgressiveChoice = new dDlst_2D_c(progChoiceImg, 113, 143, 416, 210, 255); @@ -751,10 +763,10 @@ void dScnLogo_c::logoInitGC() { mProgressiveSel = new dDlst_2D_c(mProgressivePro, 153, 309, 336, 88, 255); #else ResTIMG* warningImg = (ResTIMG*)dComIfG_getObjectRes(LOGO_ARC, 10); - mWarning = new dDlst_2D_c(warningImg, 0, 0, 608, 448, 255); + mWarning = new dDlst_2D_c(warningImg, 0, 0, FB_WIDTH, FB_HEIGHT, 255); ResTIMG* warnStartImg = (ResTIMG*)dComIfG_getObjectRes(LOGO_ARC, 11); - mWarningStart = new dDlst_2D_c(warnStartImg, 0, 359, 608, 48, 255); + mWarningStart = new dDlst_2D_c(warnStartImg, 0, 359, FB_WIDTH, 48, 255); ResTIMG* progChoiceImg = (ResTIMG*)dComIfG_getObjectRes(LOGO_ARC, 5); mProgressiveChoice = new dDlst_2D_c(progChoiceImg, 113, 281, 416, 72, 255); diff --git a/src/d/d_s_play.cpp b/src/d/d_s_play.cpp index bced5bfc1f..9934e58114 100644 --- a/src/d/d_s_play.cpp +++ b/src/d/d_s_play.cpp @@ -27,6 +27,10 @@ #include "d/actor/d_a_suspend.h" #include "d/actor/d_a_ykgr.h" +#if PLATFORM_WII +#include "d/d_cursor_mng.h" +#endif + static void dScnPly_Create(scene_class*); static int dScnPly_Delete(dScnPly_c*); static int dScnPly_IsDelete(dScnPly_c); @@ -293,6 +297,11 @@ static int dScnPly_Delete(dScnPly_c* i_this) { } dComIfGp_init(); + + #if PLATFORM_WII + data_8053a730 = 0; + #endif + JUTAssertion::setMessageCount(0); return 1; } @@ -345,6 +354,10 @@ static int phase_00(dScnPly_c* i_this) { if (!i_this->resetGame()) { return cPhs_INIT_e; } else { + #if PLATFORM_WII + data_8053a730 = 1; + #endif + mDoGph_gInf_c::offBlure(); return cPhs_NEXT_e; } @@ -613,7 +626,7 @@ static int phase_4(dScnPly_c* i_this) { dComIfGp_setPlayerPtr(i, NULL); } - dComIfGp_setWindow(0, 0.0f, 0.0f, 608.0f, 448.0f, 0.0f, 1.0f, 0, 2); + dComIfGp_setWindow(0, 0.0f, 0.0f, FB_WIDTH, FB_HEIGHT, 0.0f, 1.0f, 0, 2); dComIfGp_setCameraInfo(0, NULL, 0, 0, -1); dComIfGd_setWindow(NULL); dComIfGd_setViewport(NULL); diff --git a/src/m_Do/m_Do_graphic.cpp b/src/m_Do/m_Do_graphic.cpp index 125bd63001..df35dce471 100644 --- a/src/m_Do/m_Do_graphic.cpp +++ b/src/m_Do/m_Do_graphic.cpp @@ -17,7 +17,7 @@ #include "d/actor/d_a_player.h" #include "d/d_com_inf_game.h" #include "d/d_menu_collect.h" -#include "dolphin/base/PPCArch.h" +#include #include "f_ap/f_ap_game.h" #include "f_op/f_op_camera_mng.h" #include "m_Do/m_Do_controller_pad.h" @@ -25,14 +25,206 @@ #include "m_Do/m_Do_machine.h" #include "m_Do/m_Do_main.h" #include "d/d_debug_viewer.h" +#include "d/d_meter2_info.h" +#include "d/d_s_play.h" +#include "DynamicLink.h" + +#if PLATFORM_WII || PLATFORM_SHIELD +#include +#endif + +#if PLATFORM_WII +#include "d/d_cursor_mng.h" +#endif + +class mDoGph_HIO_c : public JORReflexible { +public: + mDoGph_HIO_c() { + id = 0; + } + + void entryHIO() { + if (id == 0) { + id = mDoHIO_CREATE_CHILD("グラフィック", this); + } + } + + void listenPropertyEvent(const JORPropertyEvent*) {} + void genMessage(JORMContext*) {} + + /* 0x4 */ s8 id; +}; + +static void drawQuad(f32 param_0, f32 param_1, f32 param_2, f32 param_3) { + GXBegin(GX_QUADS, GX_VTXFMT0, 4); + GXPosition2f32(param_0, param_1); + GXPosition2f32(param_2, param_1); + GXPosition2f32(param_2, param_3); + GXPosition2f32(param_0, param_3); + GXEnd(); +} + +#if DEBUG +class dDlst_heapMap_c : public dDlst_base_c { +public: + dDlst_heapMap_c() { + m_heap = NULL; + } + + void set(JKRExpHeap*, f32, f32, f32, f32); + + virtual void draw(); + + /* 0x04 */ JKRExpHeap* m_heap; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xc; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; +}; + +void dDlst_heapMap_c::draw() { + JUT_ASSERT(111, m_heap != NULL); + + static const GXColor l_noUsedColor = {0x00, 0x00, 0x80, 0xC8}; + static const GXColor l_usedColor = {0xFF, 0x00, 0x00, 0xC8}; + static const GXColor l_tempColor = {0x00, 0xFF, 0x00, 0xC8}; + + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XY, GX_F32, 0); + 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_C0); + 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_A0); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_SET); + GXSetZCompLoc(GX_ENABLE); + GXSetZMode(GX_DISABLE, GX_ALWAYS, GX_DISABLE); + GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); + GXSetFog(GX_FOG_NONE, 0.0f, 0.0f, 0.0f, 0.0f, g_clearColor); + GXSetCullMode(GX_CULL_NONE); + GXSetDither(GX_ENABLE); + GXSetClipMode(GX_CLIP_DISABLE); + + GXLoadPosMtxImm(cMtx_getIdentity(), 0); + GXSetCurrentMtx(0); + + GXSetTevColor(GX_TEVREG0, l_noUsedColor); + drawQuad(field_0x8, field_0xc, field_0x10, field_0x14); + + f32 var_f29 = field_0x10 - field_0x8; + f32 sp4C = field_0x14 - field_0xc; + f32 sp48 = var_f29 * sp4C; + + uintptr_t start_addr = (uintptr_t)m_heap->getStartAddr(); + uintptr_t end_addr = (uintptr_t)m_heap->getEndAddr(); + u32 sp40 = end_addr - start_addr; + f32 sp3C = sp48 / (f32)sp40; + + for (JKRExpHeap::CMemBlock* block = m_heap->getUsedFirst(); block != NULL; block = block->getNextBlock()) { + JUT_ASSERT(162, block->isValid()); + + GXSetTevColor(GX_TEVREG0, block->isTempMemBlock() ? l_tempColor : l_usedColor); + + u32 sp38 = (m_heap->getSize(block + 1) + block->getAlignment()) + 0x10; + f32 var_f30 = (f32)sp38 * sp3C; + uintptr_t sp34 = (uintptr_t)block - start_addr; + f32 sp30 = (f32)sp34 * sp3C; + + f32 var_f28 = std::floor(sp30 / var_f29); + + f32 sp2C = sp30 - (var_f29 * var_f28); + f32 sp28 = field_0x8 + sp2C; + + f32 var_f31 = field_0xc + var_f28; + f32 var_f27 = 1.0f + var_f31; + f32 sp24 = var_f29 - sp2C; + + if (var_f30 <= sp24) { + drawQuad(sp28, var_f31, sp28 + var_f30, var_f27); + } else { + if (sp24 > 0.0f) { + drawQuad(sp28, var_f31, field_0x10, var_f27); + var_f30 -= sp24; + var_f31 = var_f27; + } + + var_f28 = std::floor(var_f30 / var_f29); + if (var_f28 > 0.0f) { + var_f27 = var_f31 + var_f28; + drawQuad(field_0x8, var_f31, field_0x10, var_f27); + var_f30 -= var_f29 * var_f28; + var_f31 = var_f27; + } + drawQuad(field_0x8, var_f31, field_0x8 + var_f30, 1.0f + var_f31); + } + } + + dComIfGp_getCurrentGrafPort()->setup2D(); +} + +void dDlst_heapMap_c::set(JKRExpHeap* i_heap, f32 param_1, f32 param_2, f32 param_3, f32 param_4) { + m_heap = i_heap; + field_0x8 = param_1; + field_0xc = param_2; + field_0x10 = param_3; + field_0x14 = param_4; +} + +static dDlst_heapMap_c l_heapMap; +static int l_heapMapMode; + +static void drawHeapMap() { + if (mDoCPd_c::getHoldL(PAD_3) && mDoCPd_c::getHoldR(PAD_3) && mDoCPd_c::getTrigY(PAD_3)) { + l_heapMapMode = (l_heapMapMode + 1) % 7; + if (l_heapMapMode != 0) { + JKRExpHeap* heap = NULL; + if (l_heapMapMode == 1) { + heap = mDoExt_getArchiveHeap(); + OSReport_Error("アーカイブヒープマップ表示\n"); + } else if (l_heapMapMode == 3) { + heap = mDoExt_getGameHeap(); + OSReport_Error("ゲームヒープマップ表示\n"); + } else if (l_heapMapMode == 2) { + heap = (JKRExpHeap*)DynamicModuleControlBase::getHeap(); + OSReport_Error("ダイナミックリンクヒープマップ表示\n"); + } else if (l_heapMapMode == 4) { + heap = mDoExt_getZeldaHeap(); + OSReport_Error("ゼルダヒープマップ表示\n"); + } else if (l_heapMapMode == 5) { + heap = mDoExt_getJ2dHeap(); + OSReport_Error("J2Dヒープマップ表示\n"); + } else if (l_heapMapMode == 6) { + heap = mDoExt_getCommandHeap(); + OSReport_Error("コマンドヒープマップ表示\n"); + } + + l_heapMap.set(heap, 300.0f, 300.0f, 600.0f, 390.0f); + } + } + + if (l_heapMapMode != 0) { + dComIfGd_set2DXlu(&l_heapMap); + } +} + +#endif /* 80007D9C-80007E44 0026DC 00A8+00 1/1 0/0 0/0 .text createTimg__FUsUsUl */ static ResTIMG* createTimg(u16 width, u16 height, u32 format) { u32 bufferSize = GXGetTexBufferSize(width, height, format, GX_FALSE, 0) + 0x20; ResTIMG* timg; - void* alloc_res = JKRHeap::alloc(bufferSize, 0x20, NULL); - timg = (ResTIMG*)alloc_res; + #if PLATFORM_GCN + timg = (ResTIMG*)JKRAlloc(bufferSize, 0x20); + #else + timg = (ResTIMG*)JKRHeap::getRootHeap2()->alloc(bufferSize, 0x20); + #endif if (timg == NULL) { return NULL; @@ -50,15 +242,14 @@ static ResTIMG* createTimg(u16 width, u16 height, u32 format) { return timg; } -/* 80450590-80450594 000010 0004+00 2/2 1/1 0/0 .sdata mBackColor__13mDoGph_gInf_c */ -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 */ -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; +#if PLATFORM_WII || PLATFORM_SHIELD +ResTIMG* mDoGph_gInf_c::m_fullFrameBufferTimg; +void* mDoGph_gInf_c::m_fullFrameBufferTex; +#endif + /* 80450BCC-80450BD0 0000CC 0004+00 3/3 8/8 1/1 .sbss mFrameBufferTimg__13mDoGph_gInf_c */ ResTIMG* mDoGph_gInf_c::mFrameBufferTimg; @@ -78,12 +269,18 @@ f32 mDoGph_gInf_c::mFadeRate; /* 80450BE0-80450BE4 0000E0 0004+00 3/3 0/0 0/0 .sbss mFadeSpeed__13mDoGph_gInf_c */ f32 mDoGph_gInf_c::mFadeSpeed; +/* 80450590-80450594 000010 0004+00 2/2 1/1 0/0 .sdata mBackColor__13mDoGph_gInf_c */ +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 */ +GXColor mDoGph_gInf_c::mFadeColor = {0, 0, 0, 0}; + /* 80450BE4-80450BE8 -00001 0004+00 8/8 9/9 11/11 .sbss None */ /* 80450BE4 0001+00 data_80450BE4 None */ /* 80450BE5 0001+00 data_80450BE5 None */ /* 80450BE6 0001+00 mFade__13mDoGph_gInf_c None */ /* 80450BE7 0001+00 data_80450BE7 None */ -bool mDoGph_gInf_c::mBlureFlag; +u8 mDoGph_gInf_c::mBlureFlag; u8 mDoGph_gInf_c::mBlureRate; @@ -93,22 +290,40 @@ bool mDoGph_gInf_c::mAutoForcus; /* 80007E44-80007F90 002784 014C+00 1/1 0/0 0/0 .text create__13mDoGph_gInf_cFv */ void mDoGph_gInf_c::create() { - JFWDisplay::createManager(NULL, JKRHeap::sCurrentHeap, JUTXfb::UNK_2, true); + #if PLATFORM_WII || PLATFORM_SHIELD + VISetTrapFilter(0); + #endif + + #if PLATFORM_GCN + JFWDisplay::createManager(JKRHeap::sCurrentHeap, JUTXfb::UNK_2, true); + #else + JFWDisplay::createManager(JKRHeap::getRootHeap2(), JUTXfb::UNK_2, true); + #endif + JFWDisplay::getManager()->setDrawDoneMethod(JFWDisplay::UNK_METHOD_1); JUTFader* faderPtr = new JUTFader(0, 0, JUTVideo::getManager()->getRenderMode()->fbWidth, JUTVideo::getManager()->getRenderMode()->efbHeight, JUtility::TColor(0, 0, 0, 0)); + JUT_ASSERT(352, faderPtr != NULL); setFader(faderPtr); JFWDisplay::getManager()->setFader(faderPtr); JUTProcBar::getManager()->setVisibleHeapBar(false); JUTProcBar::getManager()->setVisible(false); JUTDbPrint::getManager()->setVisible(false); - mFrameBufferTimg = createTimg(304, 224, 6); + #if PLATFORM_WII || PLATFORM_SHIELD + m_fullFrameBufferTimg = createTimg(FB_WIDTH, FB_HEIGHT, 6); + JUT_ASSERT(366, m_fullFrameBufferTimg != NULL); + m_fullFrameBufferTex = (char*)m_fullFrameBufferTimg + sizeof(ResTIMG); + #endif + + mFrameBufferTimg = createTimg(FB_WIDTH / 2, FB_HEIGHT / 2, 6); + JUT_ASSERT(374, mFrameBufferTimg != NULL); mFrameBufferTex = (char*)mFrameBufferTimg + sizeof(ResTIMG); - mZbufferTimg = createTimg(304, 224, 3); + mZbufferTimg = createTimg(FB_WIDTH / 2, FB_HEIGHT / 2, 3); + JUT_ASSERT(381, mZbufferTimg != NULL); mZbufferTex = (char*)mZbufferTimg + sizeof(ResTIMG); J2DPrint::setBuffer(0x400); @@ -118,6 +333,14 @@ void mDoGph_gInf_c::create() { mBackColor = g_clearColor; mFadeColor = g_clearColor; + #if PLATFORM_WII || PLATFORM_SHIELD + if (SCGetAspectRatio() == 0) { + offWide(); + } else { + onWide(); + } + #endif + VISetBlack(TRUE); } @@ -126,24 +349,34 @@ static bool data_80450BE8; /* 80007F90-80007FD8 0028D0 0048+00 1/1 2/2 0/0 .text beginRender__13mDoGph_gInf_cFv */ void mDoGph_gInf_c::beginRender() { + #if PLATFORM_WII || PLATFORM_SHIELD + VISetTrapFilter(fapGmHIO_getTrapFilter() ? 1 : 0); + VISetGamma(fapGmHIO_getGamma()); + #endif + if (data_80450BE8) { JUTXfb::getManager()->setDrawingXfbIndex(-1); } JFWDisplay::getManager()->beginRender(); + + #if PLATFORM_WII || PLATFORM_SHIELD + VIEnableDimming(1); + #endif } +#if PLATFORM_WII || PLATFORM_SHIELD +void mDoGph_gInf_c::resetDimming() { + VIEnableDimming(0); +} +#endif + /* 80007FD8-80008028 002918 0050+00 1/1 6/4 15/15 .text fadeOut__13mDoGph_gInf_cFfR8_GXColor */ void mDoGph_gInf_c::fadeOut(f32 fadeSpeed, GXColor& fadeColor) { mFade = 1; mFadeSpeed = fadeSpeed; mFadeColor = fadeColor; - - if (fadeSpeed >= 0.0f) { - mFadeRate = 0.0f; - } else { - mFadeRate = 1.0f; - } + mFadeRate = fadeSpeed >= 0.0f ? 0.0f : 1.0f; } /* 80008028-80008078 002968 0050+00 0/0 0/0 2/2 .text fadeOut_f__13mDoGph_gInf_cFfR8_GXColor */ @@ -151,19 +384,18 @@ void mDoGph_gInf_c::fadeOut_f(f32 fadeSpeed, GXColor& fadeColor) { mFade = 129; mFadeSpeed = fadeSpeed; mFadeColor = fadeColor; - - if (fadeSpeed >= 0.0f) { - mFadeRate = 0.0f; - } else { - mFadeRate = 1.0f; - } + mFadeRate = fadeSpeed >= 0.0f ? 0.0f : 1.0f; } /* 80008078-800080A0 0029B8 0028+00 0/0 1/1 8/8 .text onBlure__13mDoGph_gInf_cFv */ void mDoGph_gInf_c::onBlure() { - onBlure(g_mDoMtx_identity); + onBlure(cMtx_getIdentity()); } +#if PLATFORM_WII || PLATFORM_SHIELD +GXTexObj mDoGph_gInf_c::m_fullFrameBufferTexObj; +#endif + /* 803DD3E8-803DD408 00A108 0020+00 3/3 3/3 0/0 .bss mFrameBufferTexObj__13mDoGph_gInf_c */ GXTexObj mDoGph_gInf_c::mFrameBufferTexObj; @@ -180,7 +412,7 @@ Mtx mDoGph_gInf_c::mBlureMtx; /* 800080A0-800080D0 0029E0 0030+00 1/1 1/1 0/0 .text onBlure__13mDoGph_gInf_cFPA4_Cf */ void mDoGph_gInf_c::onBlure(const Mtx m) { mBlureFlag = true; - MTXCopy(m, mBlureMtx); + setBlureMtx(m); } /* 800080D0-800080F4 002A10 0024+00 0/0 3/3 7/7 .text fadeOut__13mDoGph_gInf_cFf */ @@ -189,7 +421,7 @@ void mDoGph_gInf_c::fadeOut(f32 fadeSpeed) { } /* 800080F4-80008330 002A34 023C+00 1/1 0/0 0/0 .text darwFilter__F8_GXColor */ -static void darwFilter(GXColor matColor) { +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); @@ -213,7 +445,7 @@ static void darwFilter(GXColor matColor) { Mtx44 mtx; C_MTXOrtho(mtx, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 10.0f); GXSetProjection(mtx, GX_ORTHOGRAPHIC); - GXLoadPosMtxImm(g_mDoMtx_identity, GX_PNMTX0); + GXLoadPosMtxImm(cMtx_getIdentity(), GX_PNMTX0); GXSetChanMatColor(GX_COLOR0A0, matColor); GXSetCurrentMtx(0); GXClearVtxDesc(); @@ -257,6 +489,205 @@ void mDoGph_gInf_c::calcFade() { } } +#if PLATFORM_WII || PLATFORM_SHIELD +u32 mDoGph_gInf_c::csr_c::m_blurID; + +void mDoGph_gInf_c::csr_c::particleExecute() { + dComIfGp_particle_levelExecute(m_blurID); +} +#endif + +#if WIDESCREEN_SUPPORT +u8 mDoGph_gInf_c::mWideZoom; + +int mDoGph_gInf_c::m_minX; + +int mDoGph_gInf_c::m_minY; + +f32 mDoGph_gInf_c::m_minXF; + +f32 mDoGph_gInf_c::m_minYF; + +#if PLATFORM_WII || PLATFORM_SHIELD +mDoGph_gInf_c::csr_c* mDoGph_gInf_c::m_baseCsr; + +mDoGph_gInf_c::csr_c* mDoGph_gInf_c::m_csr; +#endif + +#if PLATFORM_SHIELD +JKRHeap* mDoGph_gInf_c::m_heap; +#endif + +u8 mDoGph_gInf_c::mWide = 1; + +f32 mDoGph_gInf_c::m_aspect = 1.3571428f; + +f32 mDoGph_gInf_c::m_scale = 1.0f; + +f32 mDoGph_gInf_c::m_invScale = 1.0f; + +int mDoGph_gInf_c::m_maxX = 608 - 1; + +int mDoGph_gInf_c::m_maxY = 448 - 1; + +int mDoGph_gInf_c::m_width = 608; + +int mDoGph_gInf_c::m_height = 448; + +f32 mDoGph_gInf_c::m_maxXF = 608.0f - 1; + +f32 mDoGph_gInf_c::m_maxYF = 448.0f - 1; + +f32 mDoGph_gInf_c::m_widthF = 608.0f; + +f32 mDoGph_gInf_c::m_heightF = 448.0f; + +struct tvSize { + u16 width; + u16 height; +}; +const tvSize l_tvSize[2] = { + {608, 448}, + {808, 448}, +}; + +void mDoGph_gInf_c::setTvSize() { + const tvSize* tvsize = &l_tvSize[mWide]; + + m_width = tvsize->width; + m_height = tvsize->height; + m_minX = -((m_width - 608) / 2); + m_minY = -((m_height - 448) / 2); + m_maxX = m_minX + m_width; + m_maxY = m_minY + m_height; + + m_widthF = m_width; + m_heightF = m_height; + m_minXF = m_minX; + m_minYF = m_minY; + m_maxXF = m_maxX; + m_maxYF = m_maxY; + + m_aspect = m_widthF / m_heightF; + m_scale = m_aspect / 1.3571428f; + m_invScale = 1.0f / m_scale; +} + +void mDoGph_gInf_c::onWide() { + mWide = TRUE; + setTvSize(); + dMeter2Info_onWide2D(); +} + +void mDoGph_gInf_c::offWide() { + mWide = FALSE; + setTvSize(); + dMeter2Info_offWide2D(); +} + +void mDoGph_gInf_c::onWideZoom() { + mWideZoom = TRUE; +} + +void mDoGph_gInf_c::offWideZoom() { + mWideZoom = FALSE; +} + +BOOL mDoGph_gInf_c::isWideZoom() { + return isWide() && mWideZoom; +} + +u8 mDoGph_gInf_c::isWide() { + return mWide == TRUE; +} + +void mDoGph_gInf_c::setWideZoomProjection(Mtx44& m) { + if (isWideZoom()) { + f32 sp20 = m[0][0]; + f32 sp1C = m[0][2]; + f32 sp18 = m[1][1]; + f32 sp14 = m[1][2]; + f32 sp10 = m[2][2]; + f32 spC = m[2][3]; + + f32 temp_f31 = spC / (sp10 - 1.0f); + f32 sp8 = spC / sp10; + + f32 temp_f30 = ((temp_f31 * (1.0f + sp14)) / sp18); + f32 temp_f29 = ((temp_f31 * (sp14 - 1.0f)) / sp18); + f32 temp_f28 = ((temp_f31 * (sp1C - 1.0f)) / sp20); + f32 temp_f27 = ((temp_f31 * (1.0f + sp1C)) / sp20); + + temp_f30 *= getInvScale(); + temp_f29 *= getInvScale(); + temp_f28 *= getInvScale(); + temp_f27 *= getInvScale(); + + m[0][0] = (2.0f * temp_f31) / (temp_f27 - temp_f28); + m[0][1] = 0.0f; + m[0][2] = (temp_f27 + temp_f28) / (temp_f27 - temp_f28); + m[0][3] = 0.0f; + + m[1][0] = 0.0f; + m[1][1] = (2.0f * temp_f31) / (temp_f30 - temp_f29); + m[1][2] = (temp_f30 + temp_f29) / (temp_f30 - temp_f29); + m[1][3] = 0.0f; + + m[2][0] = 0.0f; + m[2][1] = 0.0f; + m[2][2] = -temp_f31 / (sp8 - temp_f31); + m[2][3] = -(sp8 * temp_f31) / (sp8 - temp_f31); + + m[3][0] = 0.0f; + m[3][1] = 0.0f; + m[3][2] = -1.0f; + m[3][3] = 0.0f; + } +} + +void mDoGph_gInf_c::setWideZoomLightProjection(Mtx& m) { + if (isWideZoom()) { + f32 temp_f27 = m[0][0]; + f32 temp_f26 = m[0][2]; + f32 temp_f25 = m[1][1]; + f32 temp_f24 = m[1][2]; + + f32 temp_f31 = (1.0f + temp_f24) / temp_f25; + f32 temp_f30 = (temp_f24 - 1.0f) / temp_f25; + f32 temp_f29 = (temp_f26 - 1.0f) / temp_f27; + f32 temp_f28 = (1.0f + temp_f26) / temp_f27; + + temp_f31 *= getInvScale(); + temp_f30 *= getInvScale(); + temp_f29 *= getInvScale(); + temp_f28 *= getInvScale(); + + m[0][0] = 2.0f / (temp_f28 - temp_f29); + m[0][1] = 0.0f; + m[0][2] = (temp_f28 + temp_f29) / (temp_f28 - temp_f29); + m[0][3] = 0.0f; + + m[1][0] = 0.0f; + m[1][1] = 2.0f / (temp_f31 - temp_f30); + m[1][2] = (temp_f31 + temp_f30) / (temp_f31 - temp_f30); + m[1][3] = 0.0f; + + m[2][0] = 0.0f; + m[2][1] = 0.0f; + m[2][2] = -1.0f; + m[2][3] = 0.0f; + } +} +#endif + +#if PLATFORM_WII || PLATFORM_SHIELD +void mDoGph_gInf_c::entryBaseCsr(mDoGph_gInf_c::csr_c* i_entry) { + JUT_ASSERT(876, m_baseCsr == NULL); + m_baseCsr = i_entry; + m_csr = i_entry; +} +#endif + /* 8000841C-80008420 002D5C 0004+00 0/0 1/0 0/0 .text mDoGph_BlankingON__Fv */ void mDoGph_BlankingON() {} @@ -313,229 +744,305 @@ int mDoGph_AfterOfDraw() { GXSetDither(GX_ENABLE); GXSetClipMode(GX_CLIP_ENABLE); GXSetCullMode(GX_CULL_NONE); + + #if WIDESCREEN_SUPPORT + struct viwidth { + u16 unk_0x0; + u16 unk_0x2; + }; + static const viwidth l_viWidth[2] = { + {670, 666}, + {686, 682}, + }; + + const viwidth* viWidth = &l_viWidth[0]; + if (mDoGph_gInf_c::isWide()) { + viWidth++; + } + + GXRenderModeObj* renderObj = mDoMch_render_c::getRenderModeObj(); + if (renderObj->viTVmode != VI_TVMODE_PAL_INT) { + renderObj->viWidth = viWidth->unk_0x0; + renderObj->viXOrigin = (720 - renderObj->viWidth) / 2; + } else { + renderObj->viWidth = viWidth->unk_0x2; + renderObj->viXOrigin = (720 - renderObj->viWidth) / 2; + } + #endif + JUTVideo::getManager()->setRenderMode(mDoMch_render_c::getRenderModeObj()); mDoGph_gInf_c::endFrame(); return 1; } +#if PLATFORM_WII +void drawFilterQuad(s8 param_0, s8 param_1) { + GXBegin(GX_QUADS, GX_VTXFMT0, 4); + GXPosition3s8(0, 0, -5); + GXTexCoord2s8(0, 0); + GXPosition3s8(param_0, 0, -5); + GXTexCoord2s8(1, 0); + GXPosition3s8(param_0, param_1, -5); + GXTexCoord2s8(1, 1); + GXPosition3s8(0, param_1, -5); + GXTexCoord2s8(0, 1); + GXEnd(); +} + +// mapping to simplify call changes between wii / other platforms +#define mDoGph_drawFilterQuad drawFilterQuad +#endif + /* 80008630-80009184 002F70 0B54+00 1/1 0/0 0/0 .text * drawDepth2__FP10view_classP15view_port_classi */ static void drawDepth2(view_class* param_0, view_port_class* param_1, int param_2) { static GXColorS10 l_tevColor0 = {0, 0, 0, 0}; - s16 x_orig; - s16 y_orig_pos; - s16 y_orig; - void* zBufferTex; - s16 width; - void* frameBufferTex; - u16 halfWidth; - u16 halfHeight; - s16 height; - - f32* temp_r20; - if (daPy_getLinkPlayerActorClass() != NULL) { - if (mDoGph_gInf_c::isAutoForcus()) { - f32 sp4C[7]; - f32 sp34[6]; - f32 sp1C; - f32 sp18; - f32 sp14; - GXGetProjectionv(sp4C); - GXGetViewportv(sp34); - GXProject(param_0->lookat.center.x, param_0->lookat.center.y, - param_0->lookat.center.z, param_0->viewMtx, sp4C, sp34, &sp1C, &sp18, - &sp14); - } - - fopAc_ac_c* player_p = dComIfGp_getPlayer(0); - camera_class* camera_p = (camera_class*)dComIfGp_getCamera(0); - f32 var_f30 = -255.0f; - - if (dCam_getBody()->Mode() != 4 && dCam_getBody()->Mode() != 7) { - camera_class* temp_r4 = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); - dAttention_c* attention = dComIfGp_getAttention(); - - f32 temp_f31 = 60.0f / (temp_r4 ? fopCamM_GetFovy(temp_r4) : 48.0f); - if (attention->LockonTruth()) { - fopAc_ac_c* atn_actor = - fopAcM_SearchByID(daPy_getLinkPlayerActorClass()->getAtnActorID()); - - if (atn_actor != NULL) { - cXyz sp28 = atn_actor->eyePos; - if (std::fabs(sp28.y - camera_p->lookat.eye.y) < 400.0f) { - sp28.y = camera_p->lookat.eye.y; - } - - f32 var_f2 = - (atn_actor->current.pos.abs(camera_p->lookat.eye)) / (280.0f * temp_f31); - var_f2 -= 0.8f; - if (var_f2 < 0.0f) { - var_f2 = 0.0f; - } else if (var_f2 > 1.0f) { - var_f2 = 1.0f; - } - var_f30 = -180.0f - 75.0f * var_f2; - } - } else if (dComIfGp_event_runCheck() && temp_f31 < 3.0f && - g_env_light.field_0x126c < 999999.0f) - { - f32 var_f2 = g_env_light.field_0x126c / (80.0f * temp_f31); - var_f2 -= 0.8f; - if (var_f2 < 0.0f) { - var_f2 = 0.0f; - } else if (var_f2 > 1.0f) { - var_f2 = 1.0f; - } - var_f30 = -180.0f - 75.0f * var_f2; + u8 sp8 = 1; + #if DEBUG + if (g_envHIO.mOther.mDepthOfField) { + #endif + if (mDoGph_gInf_c::isAutoForcus()) { + f32 sp4C[7]; + f32 sp34[6]; + f32 sp1C; + f32 sp18; + f32 sp14; + GXGetProjectionv(sp4C); + GXGetViewportv(sp34); + GXProject(param_0->lookat.center.x, param_0->lookat.center.y, + param_0->lookat.center.z, param_0->viewMtx, sp4C, sp34, &sp1C, &sp18, + &sp14); + + param_2 = (0xFF0000 - (int)(16777215.0f * sp14)) >> 8; + param_2 = cLib_minMaxLimit(param_2, -0x400, 0); } - } - cLib_addCalc(&g_env_light.field_0x1264, var_f30, 0.1f, 100.0f, 0.0001f); - l_tevColor0.a = g_env_light.field_0x1264; - if (l_tevColor0.a <= -254) { - l_tevColor0.a = -255; - } + fopAc_ac_c* player_p = dComIfGp_getPlayer(0); + camera_class* camera_p = (camera_class*)dComIfGp_getCamera(0); + f32 var_f31; + f32 var_f29; + f32 var_f28 = -255.0f; - x_orig = (int)param_1->x_orig & ~7; - y_orig = (int)param_1->y_orig & ~7; - y_orig_pos = y_orig < 0 ? 0 : y_orig; - width = (int)param_1->width & ~7; - height = (int)param_1->height & ~7; - zBufferTex = mDoGph_gInf_c::mZbufferTex; - frameBufferTex = mDoGph_gInf_c::mFrameBufferTex; + if (dCam_getBody()->Mode() != 4 && dCam_getBody()->Mode() != 7) { + int cam_id = dComIfGp_getPlayerCameraID(0); + camera_class* temp_r4 = dComIfGp_getCamera(cam_id); + dAttention_c* attention = dComIfGp_getAttention(); - if (y_orig < 0) { - height += y_orig; - s16 tmp_y_orig = -y_orig >> 1; - zBufferTex = - (char*)zBufferTex + GXGetTexBufferSize(304, tmp_y_orig, GX_TF_IA8, GX_FALSE, 0); - frameBufferTex = - (char*)frameBufferTex + - GXGetTexBufferSize(304, tmp_y_orig, mDoGph_gInf_c::getFrameBufferTimg()->format, - GX_FALSE, 0); - } + f32 var_f30; + if (temp_r4 != NULL) { + var_f30 = fopCamM_GetFovy(temp_r4); + } else { + var_f30 = 48.0f; + } + var_f30 = 60.0f / var_f30; - halfWidth = width >> 1; - halfHeight = height >> 1; - GXSetCopyFilter(GX_FALSE, NULL, GX_TRUE, JUTGetVideoManager()->getRenderMode()->vfilter); - GXSetTexCopySrc(x_orig, y_orig_pos, width, height); - GXSetTexCopyDst(halfWidth, halfHeight, GX_TF_Z16, GX_TRUE); - GXCopyTex(zBufferTex, GX_FALSE); - GXSetTexCopySrc(x_orig, y_orig_pos, width, height); - GXSetTexCopyDst(halfWidth, halfHeight, - (GXTexFmt)mDoGph_gInf_c::getFrameBufferTimg()->format, GX_TRUE); - GXCopyTex(frameBufferTex, GX_FALSE); - GXInitTexObj(mDoGph_gInf_c::getZbufferTexObj(), zBufferTex, halfWidth, halfHeight, - GX_TF_IA8, GX_CLAMP, GX_CLAMP, GX_FALSE); - GXInitTexObjLOD(mDoGph_gInf_c::getZbufferTexObj(), GX_NEAR, GX_NEAR, 0.0f, 0.0f, 0.0f, - GX_FALSE, GX_FALSE, GX_ANISO_1); - GXInitTexObj(mDoGph_gInf_c::getFrameBufferTexObj(), frameBufferTex, halfWidth, halfHeight, - (GXTexFmt)mDoGph_gInf_c::getFrameBufferTimg()->format, GX_CLAMP, GX_CLAMP, - GX_FALSE); - GXInitTexObjLOD(mDoGph_gInf_c::getFrameBufferTexObj(), GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, - 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1); - GXPixModeSync(); - GXInvalidateTexAll(); - GXLoadTexObj(mDoGph_gInf_c::getFrameBufferTexObj(), GX_TEXMAP1); - GXLoadTexObj(mDoGph_gInf_c::getZbufferTexObj(), GX_TEXMAP0); + if (attention->LockonTruth()) { + fopAc_ac_c* atn_actor = + fopAcM_SearchByID(daPy_getLinkPlayerActorClass()->getAtnActorID()); - if (0.0f != g_env_light.mDemoAttentionPoint) { + if (atn_actor != NULL) { + cXyz sp28; + sp28 = atn_actor->eyePos; + if (std::fabs(sp28.y - camera_p->lookat.eye.y) < 400.0f) { + sp28.y = camera_p->lookat.eye.y; + } + + var_f29 = atn_actor->current.pos.abs(camera_p->lookat.eye); + var_f31 = var_f29 / ((SREG_F(2) + 280.0f) * var_f30); + var_f31 -= 0.8f; + if (var_f31 < 0.0f) { + var_f31 = 0.0f; + } else if (var_f31 > 1.0f) { + var_f31 = 1.0f; + } + var_f28 = -180.0f - 75.0f * var_f31; + } + } else if (dComIfGp_event_runCheck() && var_f30 < 3.0f && + g_env_light.field_0x126c < 999999.0f) + { + var_f29 = g_env_light.field_0x126c; + var_f31 = var_f29 / ((SREG_F(2) + 80.0f) * var_f30); + var_f31 -= 0.8f; + if (var_f31 < 0.0f) { + var_f31 = 0.0f; + } else if (var_f31 > 1.0f) { + var_f31 = 1.0f; + } + var_f28 = -180.0f - 75.0f * var_f31; + } + } + + cLib_addCalc(&g_env_light.field_0x1264, var_f28, SREG_F(5) + 0.1f, SREG_F(4) + 100.0f, 0.0001f); + l_tevColor0.a = g_env_light.field_0x1264; + if (l_tevColor0.a <= -254) { + l_tevColor0.a = -255; + } + + s16 x_orig = (int)param_1->x_orig & ~7; + s16 y_orig = (int)param_1->y_orig & ~7; + s16 y_orig_pos = y_orig < 0 ? 0 : y_orig; + + s16 width = (int)param_1->width & ~7; + s16 height = (int)param_1->height & ~7; + + void* zBufferTex = (void*)mDoGph_gInf_c::getZbufferTex(); + void* frameBufferTex = (void*)mDoGph_gInf_c::getFrameBufferTex(); + + if (y_orig < 0) { + height += y_orig; + y_orig = -y_orig >> 1; + zBufferTex = + (char*)zBufferTex + GXGetTexBufferSize(FB_WIDTH / 2, y_orig, GX_TF_IA8, GX_FALSE, 0); + frameBufferTex = + (char*)frameBufferTex + + GXGetTexBufferSize(FB_WIDTH / 2, y_orig, mDoGph_gInf_c::getFrameBufferTimg()->format, + GX_FALSE, 0); + } + + u16 halfWidth = width >> 1; + u16 halfHeight = height >> 1; + GXRenderModeObj* sp24 = JUTGetVideoManager()->getRenderMode(); + GXSetCopyFilter(GX_FALSE, NULL, GX_TRUE, sp24->vfilter); + GXSetTexCopySrc(x_orig, y_orig_pos, width, height); + GXSetTexCopyDst(halfWidth, halfHeight, GX_TF_Z16, GX_TRUE); + GXCopyTex(zBufferTex, GX_FALSE); + GXSetTexCopySrc(x_orig, y_orig_pos, width, height); + GXSetTexCopyDst(halfWidth, halfHeight, + (GXTexFmt)mDoGph_gInf_c::getFrameBufferTimg()->format, GX_TRUE); + GXCopyTex(frameBufferTex, GX_FALSE); + GXInitTexObj(mDoGph_gInf_c::getZbufferTexObj(), zBufferTex, halfWidth, halfHeight, + GX_TF_IA8, GX_CLAMP, GX_CLAMP, GX_FALSE); + GXInitTexObjLOD(mDoGph_gInf_c::getZbufferTexObj(), GX_NEAR, GX_NEAR, 0.0f, 0.0f, 0.0f, + GX_FALSE, GX_FALSE, GX_ANISO_1); + GXInitTexObj(mDoGph_gInf_c::getFrameBufferTexObj(), frameBufferTex, halfWidth, halfHeight, + (GXTexFmt)mDoGph_gInf_c::getFrameBufferTimg()->format, GX_CLAMP, GX_CLAMP, + GX_FALSE); + GXInitTexObjLOD(mDoGph_gInf_c::getFrameBufferTexObj(), GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, + 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1); + GXPixModeSync(); + GXInvalidateTexAll(); + GXLoadTexObj(mDoGph_gInf_c::getFrameBufferTexObj(), GX_TEXMAP1); + GXLoadTexObj(mDoGph_gInf_c::getZbufferTexObj(), GX_TEXMAP0); + + if (0.0f != g_env_light.mDemoAttentionPoint) { + if (g_env_light.mDemoAttentionPoint >= 0.0f) { + l_tevColor0.a = -254.0f + 509.0f * g_env_light.mDemoAttentionPoint; + } else { + l_tevColor0.a = -254.0f + 509.0f * (1.0f + g_env_light.mDemoAttentionPoint); + } + } + + #if DEBUG + if (g_kankyoHIO.navy.demo_adjust_SW) { + l_tevColor0.a = g_kankyoHIO.navy.demo_focus_pos; + } + #endif + + GXSetTevColorS10(GX_TEVREG0, l_tevColor0); + GXSetTevSwapModeTable(GX_TEV_SWAP3, GX_CH_ALPHA, GX_CH_GREEN, GX_CH_BLUE, GX_CH_RED); + GXSetTevSwapMode(GX_TEVSTAGE0, GX_TEV_SWAP0, GX_TEV_SWAP3); + GXSetTevKAlphaSel(GX_TEVSTAGE0, GX_TEV_KASEL_1); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_KONST, GX_CA_TEXA, GX_CA_KONST, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_COMP_A8_EQ, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, + GX_TEVPREV); + + GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL); + GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_ZERO, GX_CA_APREV, GX_CA_TEXA, GX_CA_A0); + GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_4, GX_TRUE, GX_TEVPREV); + + GXSetTevOrder(GX_TEVSTAGE2, GX_TEXCOORD1, GX_TEXMAP1, GX_COLOR_NULL); + GXSetTevColorIn(GX_TEVSTAGE2, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_TEXC); + GXSetTevColorOp(GX_TEVSTAGE2, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE2, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_APREV); + GXSetTevAlphaOp(GX_TEVSTAGE2, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + + GXSetTevOrder(GX_TEVSTAGE3, GX_TEXCOORD2, GX_TEXMAP1, GX_COLOR_NULL); + GXSetTevColorIn(GX_TEVSTAGE3, GX_CC_CPREV, GX_CC_TEXC, GX_CC_HALF, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE3, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE3, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_APREV); + GXSetTevAlphaOp(GX_TEVSTAGE3, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + + GXSetZCompLoc(GX_TRUE); + GXSetZMode(GX_FALSE, GX_ALWAYS, GX_FALSE); if (g_env_light.mDemoAttentionPoint >= 0.0f) { - l_tevColor0.a = -254.0f + 509.0f * g_env_light.mDemoAttentionPoint; + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); + GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0); } else { - l_tevColor0.a = -254.0f + 509.0f * (1.0f + g_env_light.mDemoAttentionPoint); + GXSetBlendMode(GX_BM_BLEND, GX_BL_INVSRCALPHA, GX_BL_SRCALPHA, GX_LO_CLEAR); + GXSetAlphaCompare(GX_LESS, 0xff, GX_AOP_OR, GX_LESS, 0xff); } + + GXSetFog(GX_FOG_NONE, 0.0f, 0.0f, 0.0f, 0.0f, g_clearColor); + GXSetCullMode(GX_CULL_NONE); + GXSetDither(GX_TRUE); + GXSetNumIndStages(0); + Mtx44 ortho; + C_MTXOrtho(ortho, param_1->y_orig, param_1->y_orig + param_1->height, param_1->x_orig, + param_1->x_orig + param_1->width, 0.0f, 10.0f); + GXLoadPosMtxImm(cMtx_getIdentity(), 0); + + #if DEBUG + mDoMtx_stack_c::transS(g_kankyoHIO.navy.demo_focus_offset_x, g_kankyoHIO.navy.demo_focus_offset_y, 0.0f); + #else + mDoMtx_stack_c::transS(0.0025f, 0.0025f, 0.0f); + #endif + GXLoadTexMtxImm(mDoMtx_stack_c::get(), 0x1e, GX_MTX2x4); + + #if DEBUG + mDoMtx_stack_c::transS(-g_kankyoHIO.navy.demo_focus_offset_x, -g_kankyoHIO.navy.demo_focus_offset_y, 0.0f); + #else + mDoMtx_stack_c::transS(-0.0025f, -0.0025f, 0.0f); + #endif + GXLoadTexMtxImm(mDoMtx_stack_c::get(), 0x21, GX_MTX2x4); + + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_S16, 0); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_POS_XYZ, GX_S8, 0); + GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x3c); + GXSetTexCoordGen(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_TEX0, 0x1e); + GXSetTexCoordGen(GX_TEXCOORD2, GX_TG_MTX2x4, GX_TG_TEX0, 0x21); + GXSetNumChans(0); + GXSetNumTexGens(3); + GXSetNumTevStages(4); + GXSetProjection(ortho, GX_ORTHOGRAPHIC); + GXSetCurrentMtx(0); + + if (l_tevColor0.a > -255 && sp8 == 1) { + GXBegin(GX_QUADS, GX_VTXFMT0, 4); + GXPosition3s16(x_orig, y_orig_pos, -5); + GXTexCoord2s8(0, 0); + GXPosition3s16(width, y_orig_pos, -5); + GXTexCoord2s8(1, 0); + GXPosition3s16(width, height, -5); + GXTexCoord2s8(1, 1); + GXPosition3s16(x_orig, height, -5); + GXTexCoord2s8(0, 1); + GXEnd(); + } + + GXSetTevSwapModeTable(GX_TEV_SWAP3, GX_CH_BLUE, GX_CH_BLUE, GX_CH_BLUE, GX_CH_ALPHA); + GXSetTevSwapMode(GX_TEVSTAGE0, GX_TEV_SWAP0, GX_TEV_SWAP0); + GXSetProjection(param_0->projMtx, GX_PERSPECTIVE); + #if DEBUG } - - GXSetTevColorS10(GX_TEVREG0, l_tevColor0); - GXSetTevSwapModeTable(GX_TEV_SWAP3, GX_CH_ALPHA, GX_CH_GREEN, GX_CH_BLUE, GX_CH_RED); - GXSetTevSwapMode(GX_TEVSTAGE0, GX_TEV_SWAP0, GX_TEV_SWAP3); - GXSetTevKAlphaSel(GX_TEVSTAGE0, GX_TEV_KASEL_1); - GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL); - GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO); - GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); - GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_KONST, GX_CA_TEXA, GX_CA_KONST, GX_CA_ZERO); - GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_COMP_A8_EQ, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, - GX_TEVPREV); - - GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL); - GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO); - GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); - GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_ZERO, GX_CA_APREV, GX_CA_TEXA, GX_CA_A0); - GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_4, GX_TRUE, GX_TEVPREV); - - GXSetTevOrder(GX_TEVSTAGE2, GX_TEXCOORD1, GX_TEXMAP1, GX_COLOR_NULL); - GXSetTevColorIn(GX_TEVSTAGE2, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_TEXC); - GXSetTevColorOp(GX_TEVSTAGE2, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); - GXSetTevAlphaIn(GX_TEVSTAGE2, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_APREV); - GXSetTevAlphaOp(GX_TEVSTAGE2, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); - - GXSetTevOrder(GX_TEVSTAGE3, GX_TEXCOORD2, GX_TEXMAP1, GX_COLOR_NULL); - GXSetTevColorIn(GX_TEVSTAGE3, GX_CC_CPREV, GX_CC_TEXC, GX_CC_HALF, GX_CC_ZERO); - GXSetTevColorOp(GX_TEVSTAGE3, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); - GXSetTevAlphaIn(GX_TEVSTAGE3, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_APREV); - GXSetTevAlphaOp(GX_TEVSTAGE3, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); - - GXSetZCompLoc(GX_TRUE); - GXSetZMode(GX_FALSE, GX_ALWAYS, GX_FALSE); - if (g_env_light.mDemoAttentionPoint >= 0.0f) { - GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); - GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0); - } else { - GXSetBlendMode(GX_BM_BLEND, GX_BL_INVSRCALPHA, GX_BL_SRCALPHA, GX_LO_CLEAR); - GXSetAlphaCompare(GX_LESS, 0xff, GX_AOP_OR, GX_LESS, 0xff); - } - - GXSetFog(GX_FOG_NONE, 0.0f, 0.0f, 0.0f, 0.0f, g_clearColor); - GXSetCullMode(GX_CULL_NONE); - GXSetDither(GX_TRUE); - GXSetNumIndStages(0); - Mtx44 ortho; - C_MTXOrtho(ortho, param_1->y_orig, param_1->y_orig + param_1->height, param_1->x_orig, - param_1->x_orig + param_1->width, 0.0f, 10.0f); - GXLoadPosMtxImm(mDoMtx_getIdentity(), 0); - mDoMtx_stack_c::transS(0.0025f, 0.0025f, 0.0f); - GXLoadTexMtxImm(mDoMtx_stack_c::get(), 0x1e, GX_MTX2x4); - mDoMtx_stack_c::transS(-0.0025f, -0.0025f, 0.0f); - GXLoadTexMtxImm(mDoMtx_stack_c::get(), 0x21, GX_MTX2x4); - GXClearVtxDesc(); - GXSetVtxDesc(GX_VA_POS, GX_DIRECT); - GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT); - GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_S16, 0); - GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_POS_XYZ, GX_S8, 0); - GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x3c, GX_FALSE, 0x7d); - GXSetTexCoordGen2(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_TEX0, 0x1e, GX_FALSE, 0x7d); - GXSetTexCoordGen2(GX_TEXCOORD2, GX_TG_MTX2x4, GX_TG_TEX0, 0x21, GX_FALSE, 0x7d); - GXSetNumChans(0); - GXSetNumTexGens(3); - GXSetNumTevStages(4); - GXSetProjection(ortho, GX_ORTHOGRAPHIC); - GXSetCurrentMtx(0); - - if (l_tevColor0.a > -255) { - GXBegin(GX_QUADS, GX_VTXFMT0, 4); - GXPosition3s16(x_orig, y_orig_pos, -5); - GXTexCoord2s8(0, 0); - GXPosition3s16(width, y_orig_pos, -5); - GXTexCoord2s8(1, 0); - GXPosition3s16(width, height, -5); - GXTexCoord2s8(1, 1); - GXPosition3s16(x_orig, height, -5); - GXTexCoord2s8(0, 1); - GXEnd(); - } - - GXSetTevSwapModeTable(GX_TEV_SWAP3, GX_CH_BLUE, GX_CH_BLUE, GX_CH_BLUE, GX_CH_ALPHA); - GXSetTevSwapMode(GX_TEVSTAGE0, GX_TEV_SWAP0, GX_TEV_SWAP0); - GXSetProjection(param_0->projMtx, GX_PERSPECTIVE); + #endif } } /* 800091C0-800094B4 003B00 02F4+00 1/1 0/0 0/0 .text trimming__FP10view_classP15view_port_class */ static void trimming(view_class* param_0, view_port_class* param_1) { + (void)param_0; + s16 y_orig = (int)param_1->y_orig & ~7; s16 y_orig_pos = y_orig < 0 ? 0 : y_orig; if ((y_orig_pos == 0) && (param_1->scissor.y_orig != param_1->y_orig || @@ -561,8 +1068,8 @@ static void trimming(view_class* param_0, view_port_class* param_1) { GXSetDither(GX_TRUE); GXSetNumIndStages(0); Mtx44 ortho; - C_MTXOrtho(ortho, 0.0f, 448.0f, 0.0f, 608.0f, 0.0f, 10.0f); - GXLoadPosMtxImm(mDoMtx_getIdentity(), 0); + C_MTXOrtho(ortho, 0.0f, FB_HEIGHT, 0.0f, FB_WIDTH, 0.0f, 10.0f); + GXLoadPosMtxImm(cMtx_getIdentity(), 0); GXClearVtxDesc(); GXSetVtxDesc(GX_VA_POS, GX_DIRECT); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_RGBA4, 0); @@ -570,13 +1077,13 @@ static void trimming(view_class* param_0, view_port_class* param_1) { GXSetCurrentMtx(0); GXBegin(GX_QUADS, GX_VTXFMT0, 8); GXPosition3s16(0, 0, -5); - GXPosition3s16(0x260, 0, -5); - GXPosition3s16(0x260, sc_top, -5); + GXPosition3s16(FB_WIDTH, 0, -5); + GXPosition3s16(FB_WIDTH, sc_top, -5); GXPosition3s16(0, sc_top, -5); GXPosition3s16(0, sc_bottom, -5); - GXPosition3s16(0x260, sc_bottom, -5); - GXPosition3s16(0x260, 0x1c0, -5); - GXPosition3s16(0, 0x1c0, -5); + GXPosition3s16(FB_WIDTH, sc_bottom, -5); + GXPosition3s16(FB_WIDTH, FB_HEIGHT, -5); + GXPosition3s16(0, FB_HEIGHT, -5); GXEnd(); } GXSetScissor(param_1->scissor.x_orig, param_1->scissor.y_orig, param_1->scissor.width, @@ -584,6 +1091,7 @@ static void trimming(view_class* param_0, view_port_class* param_1) { } /* 800094B4-80009544 003DF4 0090+00 2/2 1/1 0/0 .text mDoGph_drawFilterQuad__FScSc */ +#if !PLATFORM_WII void mDoGph_drawFilterQuad(s8 param_0, s8 param_1) { GXBegin(GX_QUADS, GX_VTXFMT0, 4); GXPosition2s8(0, 0); @@ -596,13 +1104,16 @@ void mDoGph_drawFilterQuad(s8 param_0, s8 param_1) { GXTexCoord2s8(0, 1); GXEnd(); } +#endif /* 80009544-800095F8 003E84 00B4+00 0/0 1/1 0/0 .text create__Q213mDoGph_gInf_c7bloom_cFv */ void mDoGph_gInf_c::bloom_c::create() { if (m_buffer == NULL) { - u32 size = GXGetTexBufferSize(304, 224, 6, GX_FALSE, 0); + u32 size = GXGetTexBufferSize(FB_WIDTH / 2, FB_HEIGHT / 2, 6, GX_FALSE, 0); m_buffer = mDoExt_getArchiveHeap()->alloc(size, -32); + JUT_ASSERT(1621, m_buffer != NULL); + mEnable = false; mMode = 0; mPoint = 128; @@ -625,11 +1136,10 @@ void mDoGph_gInf_c::bloom_c::remove() { /* 80009650-8000A160 003F90 0B10+00 1/1 0/0 0/0 .text draw__Q213mDoGph_gInf_c7bloom_cFv */ void mDoGph_gInf_c::bloom_c::draw() { - bool enabled = false; - enabled = mEnable && m_buffer != NULL; + bool enabled = mEnable && m_buffer != NULL; if (mMonoColor.a != 0 || enabled) { - GXSetViewport(0.0f, 0.0f, 608.0f, 448.0f, 0.0f, 1.0f); - GXSetScissor(0, 0, 0x260, 0x1c0); + GXSetViewport(0.0f, 0.0f, FB_WIDTH, FB_HEIGHT, 0.0f, 1.0f); + GXSetScissor(0, 0, FB_WIDTH, FB_HEIGHT); GXLoadTexObj(getFrameBufferTexObj(), GX_TEXMAP0); GXSetNumChans(0); GXSetNumTexGens(1); @@ -645,13 +1155,17 @@ void mDoGph_gInf_c::bloom_c::draw() { GXSetDither(1); Mtx44 ortho; C_MTXOrtho(ortho, 0.0f, 4.0f, 0.0f, 4.0f, 0.0f, 10.0f); - GXLoadPosMtxImm(mDoMtx_getIdentity(), 0); + GXLoadPosMtxImm(cMtx_getIdentity(), 0); GXSetProjection(ortho, GX_ORTHOGRAPHIC); GXSetCurrentMtx(0); GXClearVtxDesc(); GXSetVtxDesc(GX_VA_POS, GX_DIRECT); GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT); + #if PLATFORM_WII + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_RGB8, 0); + #else GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGB, GX_RGB8, 0); + #endif GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGB8, 0); if (mMonoColor.a != 0) { GXSetNumTevStages(1); @@ -668,8 +1182,8 @@ void mDoGph_gInf_c::bloom_c::draw() { mDoGph_drawFilterQuad(4, 4); } if (enabled) { - GXSetTexCopySrc(0, 0, 0x130, 0xe0); - GXSetTexCopyDst(0x130, 0xe0, GX_TF_RGBA8, 0); + GXSetTexCopySrc(0, 0, FB_WIDTH / 2, FB_HEIGHT / 2); + GXSetTexCopyDst(FB_WIDTH / 2, FB_HEIGHT / 2, GX_TF_RGBA8, 0); GXCopyTex(m_buffer, 0); GXSetNumTevStages(3); GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL); @@ -706,27 +1220,28 @@ void mDoGph_gInf_c::bloom_c::draw() { GXSetTevSwapMode(GX_TEVSTAGE0, GX_TEV_SWAP0, GX_TEV_SWAP0); GXSetTevSwapMode(GX_TEVSTAGE1, GX_TEV_SWAP0, GX_TEV_SWAP0); void* zBufferTex = getZbufferTex(); - GXSetTexCopySrc(0, 0, 0x130, 0xe0); - GXSetTexCopyDst(0x98, 0x70, GX_TF_RGBA8, GX_TRUE); + GXSetTexCopySrc(0, 0, FB_WIDTH / 2, FB_HEIGHT / 2); + GXSetTexCopyDst(FB_WIDTH / 4, FB_HEIGHT / 4, GX_TF_RGBA8, GX_TRUE); GXCopyTex(zBufferTex, 0); GXTexObj auStack_c0; - GXInitTexObj(&auStack_c0, zBufferTex, 0x98, 0x70, GX_TF_RGBA8, GX_CLAMP, GX_CLAMP, + GXInitTexObj(&auStack_c0, zBufferTex, FB_WIDTH / 4, FB_HEIGHT / 4, GX_TF_RGBA8, GX_CLAMP, GX_CLAMP, GX_FALSE); GXInitTexObjLOD(&auStack_c0, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1); GXLoadTexObj(&auStack_c0, GX_TEXMAP0); GXSetNumTexGens(8); u32 iVar11 = 0x1e; - s16 sVar10 = 0; + int sVar10 = 0; GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x3c); - for (int texCoord = (int)GX_TEXCOORD1; texCoord < (int)GX_MAX_TEXCOORD; - texCoord++, iVar11 += 3, sVar10 += 0x2492) - { + for (int texCoord = (int)GX_TEXCOORD1; texCoord < (int)GX_MAX_TEXCOORD; texCoord++) { GXSetTexCoordGen((GXTexCoordID)texCoord, GX_TG_MTX2x4, GX_TG_TEX0, iVar11); f32 dVar15 = mBlureSize * (1.0f / 6400.0f); mDoMtx_stack_c::transS((dVar15 * cM_scos(sVar10)) * getInvScale(), dVar15 * cM_ssin(sVar10), 0.0f); GXLoadTexMtxImm(mDoMtx_stack_c::get(), iVar11, GX_MTX2x4); + + iVar11 += 3; + sVar10 += 0x2492; } GXSetNumTevStages(8); GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL); @@ -750,11 +1265,11 @@ void mDoGph_gInf_c::bloom_c::draw() { } GXPixModeSync(); mDoGph_drawFilterQuad(1, 1); - GXSetTexCopySrc(0, 0, 0x98, 0x70); - GXSetTexCopyDst(0x4c, 0x38, GX_TF_RGBA8, GX_TRUE); + GXSetTexCopySrc(0, 0, FB_WIDTH / 4, FB_HEIGHT / 4); + GXSetTexCopyDst(FB_WIDTH / 8, FB_HEIGHT / 8, GX_TF_RGBA8, GX_TRUE); GXCopyTex(zBufferTex, GX_FALSE); GXTexObj auStack_e0; - GXInitTexObj(&auStack_e0, zBufferTex, 0x4c, 0x38, GX_TF_RGBA8, GX_CLAMP, GX_CLAMP, + GXInitTexObj(&auStack_e0, zBufferTex, FB_WIDTH / 8, FB_HEIGHT / 8, GX_TF_RGBA8, GX_CLAMP, GX_CLAMP, GX_FALSE); GXInitTexObjLOD(&auStack_c0, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1); @@ -763,10 +1278,10 @@ void mDoGph_gInf_c::bloom_c::draw() { GXPixModeSync(); GXInvalidateTexAll(); mDoGph_drawFilterQuad(1, 1); - GXSetTexCopySrc(0, 0, 0x98, 0x70); - GXSetTexCopyDst(0x98, 0x70, GX_TF_RGBA8, GX_FALSE); + GXSetTexCopySrc(0, 0, FB_WIDTH / 4, FB_HEIGHT / 4); + GXSetTexCopyDst(FB_WIDTH / 4, FB_HEIGHT / 4, GX_TF_RGBA8, GX_FALSE); GXCopyTex(zBufferTex, GX_FALSE); - GXInitTexObj(&auStack_e0, m_buffer, 0x130, 0xe0, GX_TF_RGBA8, GX_CLAMP, GX_CLAMP, + GXInitTexObj(&auStack_e0, m_buffer, FB_WIDTH / 2, FB_HEIGHT / 2, GX_TF_RGBA8, GX_CLAMP, GX_CLAMP, GX_FALSE); GXInitTexObjLOD(&auStack_e0, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1); @@ -793,13 +1308,7 @@ void mDoGph_gInf_c::bloom_c::draw() { GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); - GXBlendFactor blendFactor; - if (mMode == 1) { - blendFactor = GX_BL_INVDSTCLR; - } else { - blendFactor = GX_BL_ONE; - } - GXSetBlendMode(GX_BM_BLEND, blendFactor, GX_BL_SRCALPHA, GX_LO_OR); + GXSetBlendMode(GX_BM_BLEND, mMode == 1 ? GX_BL_INVDSTCLR : GX_BL_ONE, GX_BL_SRCALPHA, GX_LO_OR); GXPixModeSync(); GXInvalidateTexAll(); mDoGph_drawFilterQuad(4, 4); @@ -810,32 +1319,31 @@ void mDoGph_gInf_c::bloom_c::draw() { /* 8000A160-8000A290 004AA0 0130+00 1/1 0/0 0/0 .text * retry_captue_frame__FP10view_classP15view_port_classi */ static void retry_captue_frame(view_class* param_0, view_port_class* param_1, int param_2) { - s16 x_orig; - s16 y_orig; - s16 y_orig_pos; - s16 width; - s16 height; - void* tex; + (void)param_0; + (void)param_2; - x_orig = (int)param_1->x_orig & 0xFFFFFFF8; - y_orig = (int)param_1->y_orig & 0xFFFFFFF8; - y_orig_pos = y_orig < 0 ? 0 : y_orig; - width = (int)param_1->width & 0xFFFFFFF8; - height = (int)param_1->height & 0xFFFFFFF8; - tex = mDoGph_gInf_c::mFrameBufferTex; + s16 x_orig = (int)param_1->x_orig & 0xFFFFFFF8; + s16 y_orig = (int)param_1->y_orig & 0xFFFFFFF8; + s16 y_orig_pos = y_orig < 0 ? 0 : y_orig; + s16 width = (int)param_1->width & 0xFFFFFFF8; + s16 height = (int)param_1->height & 0xFFFFFFF8; + void* tex = (void*)mDoGph_gInf_c::getFrameBufferTex(); + u16 var_r24; + u16 var_r23; if (!dComIfGp_isPauseFlag()) { if (y_orig < 0) { height += y_orig; y_orig = -y_orig >> 1; - tex = (char*)tex + GXGetTexBufferSize(304, y_orig, + tex = (char*)tex + GXGetTexBufferSize(FB_WIDTH / 2, y_orig, mDoGph_gInf_c::getFrameBufferTimg()->format, GX_FALSE, 0); } + var_r24 = width >> 1; + var_r23 = height >> 1; GXSetTexCopySrc(x_orig, y_orig_pos, width, height); - GXSetTexCopyDst(width >> 1, height >> 1, - (GXTexFmt)mDoGph_gInf_c::getFrameBufferTimg()->format, GX_TRUE); + GXSetTexCopyDst(var_r24, var_r23, (GXTexFmt)mDoGph_gInf_c::getFrameBufferTimg()->format, GX_TRUE); GXCopyTex(tex, GX_FALSE); GXPixModeSync(); GXInvalidateTexAll(); @@ -867,14 +1375,18 @@ static void motionBlure(view_class* param_0) { GXSetDither(GX_TRUE); Mtx44 ortho; C_MTXOrtho(ortho, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 10.0f); - GXLoadPosMtxImm(mDoMtx_getIdentity(), 0); + GXLoadPosMtxImm(cMtx_getIdentity(), 0); GXLoadTexMtxImm(mDoGph_gInf_c::getBlureMtx(), 0x1e, GX_MTX2x4); GXSetProjection(ortho, GX_ORTHOGRAPHIC); GXSetCurrentMtx(0); GXClearVtxDesc(); GXSetVtxDesc(GX_VA_POS, GX_DIRECT); GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT); + #if PLATFORM_WII + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_RGB8, 0); + #else GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGB, GX_RGB8, 0); + #endif GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGB8, 0); mDoGph_drawFilterQuad(1, 1); GXSetProjection(param_0->projMtx, GX_PERSPECTIVE); @@ -898,10 +1410,32 @@ static void setLight() { GXLoadLightObjImm(&obj, GX_LIGHT0); } +static void captureScreenSetProjection(Mtx44& m) { + // NONMATCHING +} + +static void captureScreenSetPort() { + Mtx44 m; + captureScreenSetProjection(m); +} + +static void captureScreenSetScissor(scissor_class* scissor) { + // NONMATCHING +} + +static void captureScreenPerspDrawInfo(JPADrawInfo&) { + // NONMATCHING +} + /* 8000A58C-8000A604 004ECC 0078+00 1/1 0/0 0/0 .text drawItem3D__Fv */ static void drawItem3D() { Mtx item_mtx; dMenu_Collect3D_c::setupItem3D(item_mtx); + + #if DEBUG + captureScreenSetPort(); + #endif + setLight(); j3dSys.setViewMtx(item_mtx); GXSetClipMode(GX_CLIP_DISABLE); @@ -912,41 +1446,74 @@ static void drawItem3D() { /* 8000A604-8000B118 004F44 0B14+00 0/0 1/0 0/0 .text mDoGph_Painter__Fv */ int mDoGph_Painter() { + #if DEBUG + drawHeapMap(); + #endif + dComIfGp_particle_calcMenu(); JFWDisplay::getManager()->setFader(mDoGph_gInf_c::getFader()); mDoGph_gInf_c::setClearColor(mDoGph_gInf_c::getBackColor()); mDoGph_gInf_c::beginRender(); + + #if DEBUG + fapGm_HIO_c::startCpuTimer(); + #endif + GXSetAlphaUpdate(GX_DISABLE); mDoGph_gInf_c::setBackColor(g_clearColor); j3dSys.drawInit(); GXSetDither(GX_ENABLE); - J2DOrthoGraph ortho(0.0f, 0.0f, 608.0f, 448.0f, -1.0f, 1.0f); - ortho.setOrtho(JGeometry::TBox2(mDoGph_gInf_c::getMinXF(), mDoGph_gInf_c::getMinYF(), - mDoGph_gInf_c::getWidthF(), mDoGph_gInf_c::getHeightF()), + J2DOrthoGraph ortho(0.0f, 0.0f, FB_WIDTH, FB_HEIGHT, -1.0f, 1.0f); + ortho.setOrtho(mDoGph_gInf_c::getMinXF(), mDoGph_gInf_c::getMinYF(), + mDoGph_gInf_c::getWidthF(), mDoGph_gInf_c::getHeightF(), -1.0f, 1.0f); ortho.setPort(); + #if DEBUG + captureScreenSetPort(); + #endif + dComIfGp_setCurrentGrafPort(&ortho); dComIfGd_drawCopy2D(); + #if DEBUG + // "↓↓↓↓↓↓↓↓↓↓ CPU time measuring start ↓↓↓↓↓↓↓↓↓↓" + fapGm_HIO_c::printCpuTimer("\n↓↓↓↓↓↓↓↓↓↓ CPU時間計測開始 ↓↓↓↓↓↓↓↓↓↓\n"); + + // "drawing up to 2D drawing for screen capture (Rendering)" + fapGm_HIO_c::stopCpuTimer("画面キャプチャー用2D描画まで(レンダリング)"); + #endif + if (dComIfGp_getWindowNum() != 0) { dDlst_window_c* window_p = dComIfGp_getWindow(0); int camera_id = window_p->getCameraID(); camera_class* camera_p = dComIfGp_getCamera(camera_id); if (camera_p != NULL) { + #if DEBUG + fapGm_HIO_c::startCpuTimer(); + #endif + dComIfGd_imageDrawShadow(camera_p->viewMtx); + + #if DEBUG + // "drawing Shadow Texture (Rendering)" + fapGm_HIO_c::stopCpuTimer("影テクスチャー描画(レンダリング)"); + + fapGm_HIO_c::startCpuTimer(); + #endif + view_port_class* view_port = window_p->getViewPort(); if (view_port->x_orig != 0.0f || view_port->y_orig != 0.0f) { view_port_class new_port; new_port.x_orig = 0.0f; new_port.y_orig = 0.0f; - new_port.width = 608.0f; - new_port.height = 448.0f; + new_port.width = FB_WIDTH; + new_port.height = FB_HEIGHT; new_port.near_z = view_port->near_z; new_port.far_z = view_port->far_z; new_port.scissor = view_port->scissor; @@ -954,6 +1521,10 @@ int mDoGph_Painter() { view_port = &new_port; } + #if DEBUG + captureScreenSetScissor(&view_port->scissor); + #endif + GXSetViewport(view_port->x_orig, view_port->y_orig, view_port->width, view_port->height, view_port->near_z, view_port->far_z); GXSetScissor(view_port->x_orig, view_port->y_orig, view_port->width, @@ -961,10 +1532,40 @@ int mDoGph_Painter() { JPADrawInfo draw_info(camera_p->viewMtx, camera_p->fovy, camera_p->aspect); + #if WIDESCREEN_SUPPORT + if (mDoGph_gInf_c::isWideZoom()) { + Mtx44 sp140; + draw_info.getPrjMtx(sp140); + + sp140[0][0] *= 2.0f; + sp140[0][2] = 0.0f; + sp140[1][1] *= -2.0f; + sp140[1][2] = 0.0f; + sp140[2][2] = -2.0f; + mDoGph_gInf_c::setWideZoomProjection(sp140); + + sp140[0][0] *= 0.5f; + sp140[0][2] = (0.5f * sp140[0][2]) - 0.5f; + sp140[1][1] *= -0.5f; + sp140[1][2] = (-0.5f * sp140[1][2]) - 0.5f; + sp140[2][2] = 0.0f; + draw_info.setPrjMtx(sp140); + } + #endif + + #if DEBUG + captureScreenPerspDrawInfo(draw_info); + #endif + dComIfGp_setCurrentWindow(window_p); dComIfGp_setCurrentView(camera_p); dComIfGp_setCurrentViewport(view_port); GXSetProjection(camera_p->projMtx, GX_PERSPECTIVE); + + #if DEBUG + captureScreenSetProjection(camera_p->projMtx); + #endif + PPCSync(); j3dSys.setViewMtx(camera_p->viewMtx); @@ -973,91 +1574,285 @@ int mDoGph_Painter() { dComIfGd_drawXluListSky(); GXSetClipMode(GX_CLIP_ENABLE); + + #if DEBUG + // "drawing up to Background (Translucent) (Rendering)" + fapGm_HIO_c::stopCpuTimer("背景(半透明)描画まで(レンダリング)"); + + fapGm_HIO_c::startCpuTimer(); + #endif + dComIfGd_drawOpaListBG(); dComIfGd_drawOpaListDarkBG(); dComIfGd_drawOpaListMiddle(); - dComIfGp_particle_drawFogPri0_B(&draw_info); - dComIfGp_particle_drawNormalPri0_B(&draw_info); + #if DEBUG + if (fapGmHIO_getParticle()) + #endif + { + dComIfGp_particle_drawFogPri0_B(&draw_info); + } + + #if DEBUG + if (fapGmHIO_getParticle()) + #endif + { + dComIfGp_particle_drawNormalPri0_B(&draw_info); + } + + #if DEBUG + // "drawing up to Terrain (Opaque)" + fapGm_HIO_c::stopCpuTimer("地形(不透明)描画2まで(レンダリング)"); + + fapGm_HIO_c::startCpuTimer(); + #endif dComIfGd_drawShadow(camera_p->viewMtx); + #if DEBUG + // "shadow drawing (Rendering)" + fapGm_HIO_c::stopCpuTimer("影描画(レンダリング)"); + + fapGm_HIO_c::startCpuTimer(); + #endif + dComIfGd_drawOpaList(); - dComIfGd_drawOpaListDark(); + + #if DEBUG + if (g_kankyoHIO.navy.field_0x30d) { + if (dKy_darkworld_check() != TRUE) { + dComIfGd_drawOpaListDark(); + } + } else + #endif + { + dComIfGd_drawOpaListDark(); + } + dComIfGd_drawOpaListPacket(); + + #if DEBUG + // "drawing up to special-use drawing (Opaque) except J3D (Rendering)" + fapGm_HIO_c::stopCpuTimer("J3D以外などの特殊用(不透明)描画まで(レンダリング)"); + + fapGm_HIO_c::startCpuTimer(); + #endif + dComIfGd_drawXluListBG(); dComIfGd_drawXluListDarkBG(); - dComIfGp_particle_drawFogPri0_A(&draw_info); - dComIfGp_particle_drawNormalPri0_A(&draw_info); + #if DEBUG + if (fapGmHIO_getParticle()) + #endif + { + dComIfGp_particle_drawFogPri0_A(&draw_info); + dComIfGp_particle_drawNormalPri0_A(&draw_info); + } + + #if DEBUG + // "drawing up to Terrain (Translucent)" + fapGm_HIO_c::stopCpuTimer("地形(半透明)描画2まで(レンダリング)"); + + fapGm_HIO_c::startCpuTimer(); + #endif dComIfGd_drawXluList(); - dComIfGd_drawXluListDark(); + + #if DEBUG + if (g_kankyoHIO.navy.field_0x30d) { + if (dKy_darkworld_check() != TRUE) { + dComIfGd_drawXluListDark(); + } + } else + #endif + { + dComIfGd_drawXluListDark(); + } + + #if DEBUG + // "drawing up to Object (Translucent)" + fapGm_HIO_c::stopCpuTimer("オブジェクト(半透明)描画2まで(レンダリング)"); + #endif j3dSys.reinitGX(); GXSetClipMode(GX_CLIP_ENABLE); if (!dComIfGp_isPauseFlag()) { + #if DEBUG + fapGm_HIO_c::startCpuTimer(); + #endif + motionBlure(camera_p); + + #if DEBUG + // "blur filter (Rendering)" + fapGm_HIO_c::stopCpuTimer("ブラーフィルター(レンダリング)"); + + fapGm_HIO_c::startCpuTimer(); + #endif + drawDepth2(camera_p, view_port, dComIfGp_getCameraZoomForcus(camera_id)); GXInvalidateTexAll(); GXSetClipMode(GX_CLIP_ENABLE); - if (g_env_light.is_blure == 0) { - dComIfGd_drawOpaListInvisible(); - dComIfGd_drawXluListInvisible(); + #if DEBUG + // "depth of field (Rendering)" + fapGm_HIO_c::stopCpuTimer("被写界深度フィルター(レンダリング)"); + + fapGm_HIO_c::startCpuTimer(); + #endif + + #if DEBUG + if (g_kankyoHIO.navy.field_0x30d == 0 || dKy_darkworld_check() != TRUE) + #endif + { + if (g_env_light.is_blure == 0) { + dComIfGd_drawOpaListInvisible(); + dComIfGd_drawXluListInvisible(); + } + } + + + #if DEBUG + // "drawing up to projection (Translucent)" + fapGm_HIO_c::stopCpuTimer("投影用(半透明)描画まで(レンダリング)"); + + fapGm_HIO_c::startCpuTimer(); + #endif + + #if DEBUG + if (fapGmHIO_getParticle()) + #endif + { + dComIfGp_particle_drawFogPri4(&draw_info); + dComIfGp_particle_drawProjection(&draw_info); } - dComIfGp_particle_drawFogPri4(&draw_info); - dComIfGp_particle_drawProjection(&draw_info); + #if DEBUG + // "drawing up to projection particle (Rendering)" + fapGm_HIO_c::stopCpuTimer("投影パーティクル描画まで(レンダリング)"); + + fapGm_HIO_c::startCpuTimer(); + #endif dComIfGd_drawListZxlu(); + + #if DEBUG + // "drawing up to 2-draw Z-update translucent (Rendering)" + fapGm_HIO_c::stopCpuTimer("2度描きZ更新半透明描画まで(レンダリング)"); + + fapGm_HIO_c::startCpuTimer(); + #endif + GXSetClipMode(GX_CLIP_ENABLE); - dComIfGd_drawOpaListFilter(); - GXSetClipMode(GX_CLIP_ENABLE); - - dComIfGp_particle_drawFogPri1(&draw_info); - dComIfGp_particle_draw(&draw_info); - dComIfGp_particle_drawFogPri2(&draw_info); - dComIfGp_particle_drawFog(&draw_info); - dComIfGp_particle_drawFogPri3(&draw_info); - dComIfGp_particle_drawP1(&draw_info); - dComIfGp_particle_drawDarkworld(&draw_info); - - retry_captue_frame(camera_p, view_port, dComIfGp_getCameraZoomForcus(camera_id)); - GXSetClipMode(GX_CLIP_ENABLE); - - if (g_env_light.is_blure == 1) { - dComIfGd_drawOpaListInvisible(); - dComIfGd_drawXluListInvisible(); + #if DEBUG + if (g_kankyoHIO.navy.field_0x30d) { + if (dKy_darkworld_check() != TRUE) { + dComIfGd_drawOpaListFilter(); + } + } else + #endif + { + dComIfGd_drawOpaListFilter(); } - dComIfGp_particle_drawScreen(&draw_info); + #if DEBUG + // "drawing up to filter draw (Rendering)" + fapGm_HIO_c::stopCpuTimer("フィルター用描画まで(レンダリング)"); + + fapGm_HIO_c::startCpuTimer(); + #endif + + GXSetClipMode(GX_CLIP_ENABLE); + + #if DEBUG + if (fapGmHIO_getParticle()) + #endif + { + dComIfGp_particle_drawFogPri1(&draw_info); + dComIfGp_particle_draw(&draw_info); + dComIfGp_particle_drawFogPri2(&draw_info); + dComIfGp_particle_drawFog(&draw_info); + dComIfGp_particle_drawFogPri3(&draw_info); + dComIfGp_particle_drawP1(&draw_info); + dComIfGp_particle_drawDarkworld(&draw_info); + } + + #if DEBUG + // "drawing up to dark world particle (Rendering)" + fapGm_HIO_c::stopCpuTimer("闇世界でもカラーのパーティクル描画まで(レンダリング)"); + + fapGm_HIO_c::startCpuTimer(); + #endif + + retry_captue_frame(camera_p, view_port, dComIfGp_getCameraZoomForcus(camera_id)); + + #if DEBUG + // "Frame Buffer capture 2nd time (Rendering)" + fapGm_HIO_c::stopCpuTimer("フレームバッファキャプチャー2回目(レンダリング)"); + + fapGm_HIO_c::startCpuTimer(); + #endif + + GXSetClipMode(GX_CLIP_ENABLE); + + #if DEBUG + if (g_kankyoHIO.navy.field_0x30d == 0 || dKy_darkworld_check() != TRUE) + #endif + { + if (g_env_light.is_blure == 1) { + dComIfGd_drawOpaListInvisible(); + dComIfGd_drawXluListInvisible(); + } + } + + #if DEBUG + if (fapGmHIO_getParticle()) + #endif + { + dComIfGp_particle_drawScreen(&draw_info); + } + + #if DEBUG + // "drawing up to full projection particle (Rendering)" + fapGm_HIO_c::stopCpuTimer("完全投影用パーティクル描画まで(レンダリング)"); + + fapGm_HIO_c::startCpuTimer(); + #endif + GXSetClipMode(GX_CLIP_ENABLE); dComIfGd_drawIndScreen(); - if (!strcmp(dComIfGp_getStartStageName(), "F_SP124")) { + if (strcmp(dComIfGp_getStartStageName(), "F_SP124") == 0) { retry_captue_frame(camera_p, view_port, dComIfGp_getCameraZoomForcus(camera_id)); } - GXSetViewport(0.0f, 0.0f, 608.0f, 448.0f, 0.0f, 1.0f); + GXSetViewport(0.0f, 0.0f, FB_WIDTH, FB_HEIGHT, 0.0f, 1.0f); Mtx m2; Mtx44 m; - C_MTXPerspective(m, 60.0f, 1.3571428f, 1.0f, 100000.0f); + C_MTXPerspective(m, AREG_F(8) + 60.0f, mDoGph_gInf_c::getAspect(), 1.0f, 100000.0f); GXSetProjection(m, GX_PERSPECTIVE); - cXyz sp38c(0.0f, 0.0f, -2.0f); + cXyz sp38c(0.0f, 0.0f, AREG_F(7) + -2.0f); cXyz sp398(0.0f, 1.0f, 0.0f); - mDoMtx_lookAt(m2, &sp38c, &cXyz::Zero, &sp398, 0); + cMtx_lookAt(m2, &sp38c, &cXyz::Zero, &sp398, 0); j3dSys.setViewMtx(m2); dComIfGd_drawXluList2DScreen(); j3dSys.setViewMtx(camera_p->viewMtx); GXSetProjection(camera_p->projMtx, GX_PERSPECTIVE); + + #if DEBUG + // "drawing up to full projection screen (Rendering)" + fapGm_HIO_c::stopCpuTimer("完全投影用スクリーン描画まで(レンダリング)"); + + fapGm_HIO_c::startCpuTimer(); + #endif + j3dSys.reinitGX(); if ((g_env_light.camera_water_in_status || !strcmp(dComIfGp_getStartStageName(), "D_MN08"))) @@ -1070,86 +1865,212 @@ int mDoGph_Painter() { } } + #if DEBUG + // "Frame Buffer capture 3rd time (Rendering)" + fapGm_HIO_c::stopCpuTimer("※フレームバッファキャプチャー3回目(レンダリング)"); + + fapGm_HIO_c::startCpuTimer(); + #endif + mDoGph_gInf_c::getBloom()->draw(); j3dSys.setViewMtx(camera_p->viewMtx); GXSetProjection(camera_p->projMtx, GX_PERSPECTIVE); - dComIfGd_drawOpaList3Dlast(); - ortho.setOrtho( - JGeometry::TBox2(mDoGph_gInf_c::getMinXF(), mDoGph_gInf_c::getMinYF(), - mDoGph_gInf_c::getWidthF(), mDoGph_gInf_c::getHeightF()), - 100000.0f, -100000.0f); - ortho.setPort(); + #if DEBUG + if (g_kankyoHIO.navy.field_0x30d != 0 && dKy_darkworld_check() == TRUE) { + dComIfGd_drawOpaListDark(); + dComIfGd_drawXluListDark(); + retry_captue_frame(camera_p, view_port, + dComIfGp_getCameraZoomForcus(camera_id)); + dComIfGd_drawOpaListInvisible(); + dComIfGd_drawXluListInvisible(); + dComIfGd_drawOpaListFilter(); + } + #endif - Mtx m3; - MTXTrans(m3, 304.0f, 224.0f, 0.0f); - JPADrawInfo draw_info2(m3, 0.0f, 448.0f, 0.0f, 608.0f); - dComIfGp_particle_draw2Dgame(&draw_info2); + dComIfGd_drawOpaList3Dlast(); + + #if DEBUG + // "saturation add filter (Rendering)" + fapGm_HIO_c::stopCpuTimer("飽和加算フィルター(レンダリング)"); + + fapGm_HIO_c::startCpuTimer(); + #endif + + #if DEBUG + if (fapGmHIO_getParticle()) + #endif + { + #if WIDESCREEN_SUPPORT + if (mDoGph_gInf_c::isWideZoom()) { + ortho.setOrtho(0.0f, 0.0f, 608.0f, 448.0f, 100000.0f, -100000.0f); + } else + #endif + { + ortho.setOrtho(mDoGph_gInf_c::getMinXF(), mDoGph_gInf_c::getMinYF(), + mDoGph_gInf_c::getWidthF(), mDoGph_gInf_c::getHeightF(), + 100000.0f, -100000.0f); + } + ortho.setPort(); + + Mtx m3; + MTXTrans(m3, FB_WIDTH / 2, FB_HEIGHT / 2, 0.0f); + JPADrawInfo draw_info2(m3, 0.0f, FB_HEIGHT, 0.0f, FB_WIDTH); + dComIfGp_particle_draw2Dgame(&draw_info2); + } trimming(camera_p, view_port); if (strcmp(dComIfGp_getStartStageName(), "F_SP127") != 0 && - (mDoGph_gInf_c::mFade & 0x80) == 0) + (mDoGph_gInf_c::isFade() & 0x80) == 0) { mDoGph_gInf_c::calcFade(); } + + #if DEBUG + // "color fade draw (Rendering)" + fapGm_HIO_c::stopCpuTimer("カラーフェード描画(レンダリング)"); + #endif } } } + #if DEBUG + fapGm_HIO_c::startCpuTimer(); + #endif + + #if PLATFORM_WII + if (data_8053a730) { + GXSetTexCopySrc(0, 0, FB_WIDTH, FB_HEIGHT); + GXSetTexCopyDst(FB_WIDTH, FB_HEIGHT, (GXTexFmt)mDoGph_gInf_c::m_fullFrameBufferTimg->format, 0); + GXCopyTex(mDoGph_gInf_c::m_fullFrameBufferTex, 0); + GXPixModeSync(); + GXInvalidateTexAll(); + + mDoLib_setResTimgObj(mDoGph_gInf_c::m_fullFrameBufferTimg, &mDoGph_gInf_c::m_fullFrameBufferTexObj, 0, NULL); + GXLoadTexObj(&mDoGph_gInf_c::m_fullFrameBufferTexObj, GX_TEXMAP0); + + GXSetNumChans(0); + GXSetNumIndStages(0); + GXSetNumTexGens(1); + GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x3C); + GXSetNumTevStages(1); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_TEXC); + 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_ZERO); + 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_NONE, GX_BL_SRCALPHA, GX_BL_ONE, GX_LO_CLEAR); + GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); + GXSetFog(GX_FOG_NONE, 0.0f, 0.0f, 0.0f, 0.0f, g_clearColor); + GXSetFogRangeAdj(GX_DISABLE, 0, NULL); + GXSetCullMode(GX_CULL_NONE); + GXSetDither(GX_ENABLE); + + Mtx44 mtx; + MTXOrtho(mtx, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 10.0f); + GXSetProjection(mtx, GX_ORTHOGRAPHIC); + GXLoadPosMtxImm(cMtx_getIdentity(), GX_PNMTX0); + GXSetCurrentMtx(0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_S8, 0); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_RGB8, 0); + drawFilterQuad(1, 1); + } + #endif + GXSetClipMode(GX_CLIP_ENABLE); dDlst_list_c::calcWipe(); j3dSys.reinitGX(); - ortho.setOrtho(JGeometry::TBox2(mDoGph_gInf_c::getMinXF(), mDoGph_gInf_c::getMinYF(), - mDoGph_gInf_c::getWidthF(), mDoGph_gInf_c::getHeightF()), + ortho.setOrtho(mDoGph_gInf_c::getMinXF(), mDoGph_gInf_c::getMinYF(), + mDoGph_gInf_c::getWidthF(), mDoGph_gInf_c::getHeightF(), 100000.0f, -100000.0f); ortho.setPort(); - Mtx m4; - MTXCopy(j3dSys.getViewMtx(), m4); + #if DEBUG + captureScreenSetPort(); + #endif - Mtx m5; - MTXTrans(m5, 304.0f, 224.0f, 0.0f); - - JPADrawInfo draw_info3(m5, 0.0f, 448.0f, 0.0f, 608.0f); - - if (!dComIfGp_isPauseFlag()) { - dComIfGp_particle_draw2Dback(&draw_info3); - } - - dComIfGp_particle_draw2DmenuBack(&draw_info3); - ortho.setPort(); - - dComIfGd_draw2DOpa(); - drawItem3D(); - ortho.setPort(); - - dComIfGd_draw2DOpaTop(); - dComIfGd_draw2DXlu(); - - if (!dComIfGp_isPauseFlag()) { - dComIfGp_particle_draw2Dfore(&draw_info3); - } - - if (strcmp(dComIfGp_getStartStageName(), "F_SP127") == 0 || (mDoGph_gInf_c::mFade & 0x80) != 0) + #if DEBUG + if (fapGmHIO_get2Ddraw()) + #endif { - mDoGph_gInf_c::calcFade(); + Mtx m4; + cMtx_copy(j3dSys.getViewMtx(), m4); + + Mtx m5; + MTXTrans(m5, FB_WIDTH / 2, FB_HEIGHT / 2, 0.0f); + + JPADrawInfo draw_info3(m5, 0.0f, FB_HEIGHT, 0.0f, FB_WIDTH); + + if (!dComIfGp_isPauseFlag()) { + dComIfGp_particle_draw2Dback(&draw_info3); + } + + dComIfGp_particle_draw2DmenuBack(&draw_info3); + ortho.setPort(); + + dComIfGd_draw2DOpa(); + drawItem3D(); + ortho.setPort(); + + #if DEBUG + captureScreenSetPort(); + #endif + + dComIfGd_draw2DOpaTop(); + dComIfGd_draw2DXlu(); + + if (!dComIfGp_isPauseFlag()) { + dComIfGp_particle_draw2Dfore(&draw_info3); + } + + if (strcmp(dComIfGp_getStartStageName(), "F_SP127") == 0 || (mDoGph_gInf_c::isFade() & 0x80) != 0) + { + mDoGph_gInf_c::calcFade(); + } + + dComIfGp_particle_draw2DmenuFore(&draw_info3); + j3dSys.setViewMtx(m4); } - dComIfGp_particle_draw2DmenuFore(&draw_info3); - j3dSys.setViewMtx(m4); + #if DEBUG + // "drawing up to 2D-fore particle (Rendering)" + fapGm_HIO_c::stopCpuTimer("2D前(?)パーティクル描画まで(レンダリング)"); + #endif mDoGph_gInf_c::endRender(); + + #if WIDESCREEN_SUPPORT + mDoGph_gInf_c::offWideZoom(); + #endif return 1; } +#if DEBUG +mDoGph_HIO_c mDoGph_HIO; +#endif + /* 8000B174-8000B1D0 005AB4 005C+00 0/0 2/1 0/0 .text mDoGph_Create__Fv */ int mDoGph_Create() { JKRSolidHeap* heap = mDoExt_createSolidHeapToCurrent(0, NULL, 0); mDoGph_gInf_c::create(); dComIfGd_init(); - mDoExt_adjustSolidHeap(heap); + u32 var_r30 = mDoExt_adjustSolidHeap(heap); mDoExt_restoreCurrentHeap(); + + OS_REPORT("mDoGph_Create 使用ヒープサイズ=%08x\n", var_r30); + #if PLATFORM_SHIELD + mDoGph_gInf_c::setHeap(heap); + #endif + + #if DEBUG + mDoGph_HIO.entryHIO(); + #endif return 1; } diff --git a/src/m_Do/m_Do_lib.cpp b/src/m_Do/m_Do_lib.cpp index a4ef6c3f07..9407fd22b0 100644 --- a/src/m_Do/m_Do_lib.cpp +++ b/src/m_Do/m_Do_lib.cpp @@ -4,6 +4,7 @@ */ #include "m_Do/m_Do_lib.h" +#include "m_Do/m_Do_graphic.h" #include "JSystem/J3DGraphBase/J3DMatBlock.h" #include "SSystem/SComponent/c_math.h" #include "d/d_com_inf_game.h" @@ -95,16 +96,16 @@ void mDoLib_project(Vec* src, Vec* dst) { float xSize; float ySize; if (viewPort->x_orig != 0.0f) { - xOffset = (0.5f * ((2.0f * viewPort->x_orig) + viewPort->width)) - 304.0f; - xSize = 608.0f; + xOffset = (0.5f * ((2.0f * viewPort->x_orig) + viewPort->width)) - (FB_WIDTH / 2); + xSize = FB_WIDTH; } else { xOffset = viewPort->x_orig; xSize = viewPort->width; } if (viewPort->y_orig != 0.0f) { - yOffset = (0.5f * ((2.0f * viewPort->y_orig) + viewPort->height)) - 224.0f; - ySize = 448.0f; + yOffset = (0.5f * ((2.0f * viewPort->y_orig) + viewPort->height)) - (FB_HEIGHT / 2); + ySize = FB_HEIGHT; } else { yOffset = viewPort->y_orig; ySize = viewPort->height; diff --git a/src/m_Do/m_Do_machine.cpp b/src/m_Do/m_Do_machine.cpp index 38cc4363be..a3c53ef74b 100644 --- a/src/m_Do/m_Do_machine.cpp +++ b/src/m_Do/m_Do_machine.cpp @@ -63,7 +63,7 @@ static int unknownHeapErrors; /* 80450C0C-80450C10 00010C 0004+00 1/1 0/0 0/0 .sbss heapErrors */ static u32 heapErrors; -#if VERSION != VERSION_GCN_PAL +#if VERSION == VERSION_GCN_USA || VERSION == VERSION_GCN_JPN /* 803A2F60-803A2F9C 000080 003C+00 1/0 0/0 0/0 .data g_ntscZeldaIntDf */ GXRenderModeObj g_ntscZeldaIntDf = { VI_TVMODE_NTSC_INT, @@ -119,7 +119,7 @@ GXRenderModeObj g_ntscZeldaProg = { {6, 6}}, {0, 0, 21, 22, 21, 0, 0}, }; -#else +#elif VERSION == VERSION_GCN_PAL /* 803A2F60-803A2F9C 000080 003C+00 1/0 0/0 0/0 .data g_ntscZeldaIntDf */ GXRenderModeObj g_ntscZeldaIntDf = { VI_TVMODE_PAL_INT, @@ -175,6 +175,60 @@ GXRenderModeObj g_ntscZeldaProg = { {6, 6}}, {8, 8, 10, 12, 10, 8, 8}, }; +#else +GXRenderModeObj g_ntscZeldaIntDf = { + VI_TVMODE_NTSC_INT, + 640, + 456, + 456, + 25, + 12, + 670, + 456, + VI_XFBMODE_DF, + 0, + 0, + {{6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}}, + {8, 8, 10, 12, 10, 8, 8}, +}; + +GXRenderModeObj g_ntscZeldaProg = { + VI_TVMODE_NTSC_PROG, + 640, + 456, + 456, + 25, + 12, + 670, + 456, + VI_XFBMODE_SF, + 0, + 0, + {{6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}}, + {0, 0, 21, 22, 21, 0, 0}, +}; #endif #ifdef DEBUG