mirror of
https://github.com/zeldaret/ss
synced 2026-05-29 16:44:44 -04:00
Merge branch 'zeldaret:main' into d_a_obj_bird_sp
This commit is contained in:
@@ -2,11 +2,11 @@ _prolog = .text:0x00000000; // type:function size:0x2C scope:global
|
||||
_epilog = .text:0x00000030; // type:function size:0x2C scope:global
|
||||
_unresolved = .text:0x00000060; // type:function size:0x4 scope:global
|
||||
dAcOislandLOD_c_classInit__Fv = .text:0x00000070; // type:function size:0x5C
|
||||
fn_426_D0 = .text:0x000000D0; // type:function size:0xAC
|
||||
fn_426_180 = .text:0x00000180; // type:function size:0xB0
|
||||
fn_426_230 = .text:0x00000230; // type:function size:0x8
|
||||
fn_426_240 = .text:0x00000240; // type:function size:0x8
|
||||
fn_426_250 = .text:0x00000250; // type:function size:0x78
|
||||
createHeap__15dAcOislandLOD_cFv = .text:0x000000D0; // type:function size:0xAC
|
||||
create__15dAcOislandLOD_cFv = .text:0x00000180; // type:function size:0xB0
|
||||
doDelete__15dAcOislandLOD_cFv = .text:0x00000230; // type:function size:0x8
|
||||
actorExecute__15dAcOislandLOD_cFv = .text:0x00000240; // type:function size:0x8
|
||||
draw__15dAcOislandLOD_cFv = .text:0x00000250; // type:function size:0x78
|
||||
__dt__15dAcOislandLOD_cFv = .text:0x000002D0; // type:function size:0x68
|
||||
_ctors = .ctors:0x00000000; // type:label scope:global
|
||||
_dtors = .dtors:0x00000000; // type:label scope:global
|
||||
|
||||
@@ -8,14 +8,14 @@ __dt__29sFState_c<16dAcOstreamLava_c>Fv = .text:0x00000230; // type:function siz
|
||||
__dt__32sFStateFct_c<16dAcOstreamLava_c>Fv = .text:0x00000290; // type:function size:0x6C
|
||||
__dt__85sStateMgr_c<16dAcOstreamLava_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000300; // type:function size:0xA0
|
||||
__dt__55sFStateMgr_c<16dAcOstreamLava_c,20sStateMethodUsr_FI_c>Fv = .text:0x000003A0; // type:function size:0xA4
|
||||
fn_405_450 = .text:0x00000450; // type:function size:0x40
|
||||
AcOstreamLava__initModels = .text:0x00000490; // type:function size:0x200
|
||||
AcOstreamLava__init = .text:0x00000690; // type:function size:0x1A4
|
||||
__dt__14dScnCallback_cFv = .text:0x00000450; // type:function size:0x40
|
||||
createHeap__16dAcOstreamLava_cFv = .text:0x00000490; // type:function size:0x200
|
||||
create__16dAcOstreamLava_cFv = .text:0x00000690; // type:function size:0x1A4
|
||||
changeState__85sStateMgr_c<16dAcOstreamLava_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x00000840; // type:function size:0x10
|
||||
AcOstreamLava__destroy = .text:0x00000850; // type:function size:0x40
|
||||
AcOstreamLava__update = .text:0x00000890; // type:function size:0x94
|
||||
doDelete__16dAcOstreamLava_cFv = .text:0x00000850; // type:function size:0x40
|
||||
actorExecute__16dAcOstreamLava_cFv = .text:0x00000890; // type:function size:0x94
|
||||
executeState__85sStateMgr_c<16dAcOstreamLava_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000930; // type:function size:0x10
|
||||
AcOstreamLava__draw = .text:0x00000940; // type:function size:0x34
|
||||
draw__16dAcOstreamLava_cFv = .text:0x00000940; // type:function size:0x34
|
||||
initializeState_Wait__16dAcOstreamLava_cFv = .text:0x00000980; // type:function size:0x54
|
||||
executeState_Wait__16dAcOstreamLava_cFv = .text:0x000009E0; // type:function size:0x88
|
||||
finalizeState_Wait__16dAcOstreamLava_cFv = .text:0x00000A70; // type:function size:0x7C
|
||||
@@ -24,11 +24,11 @@ executeState_Stream__16dAcOstreamLava_cFv = .text:0x00000B50; // type:function s
|
||||
finalizeState_Stream__16dAcOstreamLava_cFv = .text:0x00000BE0; // type:function size:0x4
|
||||
__dt__16dAcOstreamLava_cFv = .text:0x00000BF0; // type:function size:0xFC
|
||||
getStateID__85sStateMgr_c<16dAcOstreamLava_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00000CF0; // type:function size:0x10
|
||||
fn_405_D00 = .text:0x00000D00; // type:function size:0x4
|
||||
fn_405_D10 = .text:0x00000D10; // type:function size:0x4
|
||||
fn_405_D20 = .text:0x00000D20; // type:function size:0x4
|
||||
fn_405_D30 = .text:0x00000D30; // type:function size:0x4
|
||||
fn_405_D40 = .text:0x00000D40; // type:function size:0x4
|
||||
ExecCallback_DRAW_XLU__Q34nw4r3g3d15IScnObjCallbackFQ44nw4r3g3d6ScnObj6TimingPQ34nw4r3g3d6ScnObjUlPv = .text:0x00000D00; // type:function size:0x4
|
||||
ExecCallback_DRAW_OPA__Q34nw4r3g3d15IScnObjCallbackFQ44nw4r3g3d6ScnObj6TimingPQ34nw4r3g3d6ScnObjUlPv = .text:0x00000D10; // type:function size:0x4
|
||||
ExecCallback_CALC_MAT__Q34nw4r3g3d15IScnObjCallbackFQ44nw4r3g3d6ScnObj6TimingPQ34nw4r3g3d6ScnObjUlPv = .text:0x00000D20; // type:function size:0x4
|
||||
ExecCallback_CALC_WORLD__Q34nw4r3g3d15IScnObjCallbackFQ44nw4r3g3d6ScnObj6TimingPQ34nw4r3g3d6ScnObjUlPv = .text:0x00000D30; // type:function size:0x4
|
||||
ExecCallback_CALC_VIEW__Q34nw4r3g3d15IScnObjCallbackFQ44nw4r3g3d6ScnObj6TimingPQ34nw4r3g3d6ScnObjUlPv = .text:0x00000D40; // type:function size:0x4
|
||||
build__32sFStateFct_c<16dAcOstreamLava_c>FRC12sStateIDIf_c = .text:0x00000D50; // type:function size:0x60
|
||||
dispose__32sFStateFct_c<16dAcOstreamLava_c>FRP10sStateIf_c = .text:0x00000DB0; // type:function size:0xC
|
||||
initialize__29sFState_c<16dAcOstreamLava_c>Fv = .text:0x00000DC0; // type:function size:0x1C
|
||||
@@ -49,32 +49,37 @@ isSameName__31sFStateID_c<16dAcOstreamLava_c>CFPCc = .text:0x00001130; // type:f
|
||||
_ctors = .ctors:0x00000000; // type:label scope:global
|
||||
_dtors = .dtors:0x00000000; // type:label scope:global
|
||||
__destroy_global_chain_reference = .dtors:0x00000000; // type:object size:0x4 scope:global
|
||||
lbl_405_rodata_0 = .rodata:0x00000000; // type:object size:0x68
|
||||
lbl_405_rodata_68 = .rodata:0x00000068; // type:object size:0x4 align:4 data:float
|
||||
lbl_405_data_0 = .data:0x00000000; // type:object size:0xC data:4byte
|
||||
lbl_405_data_C = .data:0x0000000C; // type:object size:0x10
|
||||
lbl_405_data_1C = .data:0x0000001C; // type:object size:0x10
|
||||
lbl_405_data_2C = .data:0x0000002C; // type:object size:0x14
|
||||
lbl_405_rodata_00 = .rodata:0x00000000; // type:object size:0x4 data:float
|
||||
lbl_405_rodata_04 = .rodata:0x00000004; // type:object size:0x14 scope:local
|
||||
lbl_405_rodata_18 = .rodata:0x00000018; // type:object size:0x14 scope:local
|
||||
lbl_405_rodata_2C = .rodata:0x0000002C; // type:object size:0x14 scope:local
|
||||
lbl_405_rodata_40 = .rodata:0x00000040; // type:object size:0x14 scope:local
|
||||
lbl_405_rodata_54 = .rodata:0x00000054; // type:object size:0x14 scope:local
|
||||
lbl_405_rodata_68 = .rodata:0x00000068; // type:object size:0x4 scope:local align:4 data:float
|
||||
lbl_405_data_00 = .data:0x00000000; // type:object size:0xC data:string
|
||||
lbl_405_data_0C = .data:0x0000000C; // type:object size:0x10 data:string
|
||||
lbl_405_data_1C = .data:0x0000001C; // type:object size:0x10 data:string
|
||||
lbl_405_data_2C = .data:0x0000002C; // type:object size:0x14 data:string
|
||||
lbl_405_data_40 = .data:0x00000040; // type:object size:0x10 data:string
|
||||
lbl_405_data_50 = .data:0x00000050; // type:object size:0x10 data:string
|
||||
lbl_405_data_60 = .data:0x00000060; // type:object size:0x10 data:string
|
||||
lbl_405_data_70 = .data:0x00000070; // type:object size:0x18
|
||||
lbl_405_data_88 = .data:0x00000088; // type:object size:0x18
|
||||
lbl_405_data_70 = .data:0x00000070; // type:object size:0x18 data:string
|
||||
lbl_405_data_88 = .data:0x00000088; // type:object size:0x18 data:string
|
||||
lbl_405_data_A0 = .data:0x000000A0; // type:object size:0x18 data:string
|
||||
lbl_405_data_B8 = .data:0x000000B8; // type:object size:0x18 data:string
|
||||
lbl_405_data_D0 = .data:0x000000D0; // type:object size:0x18 data:string
|
||||
lbl_405_data_E8 = .data:0x000000E8; // type:object size:0x18
|
||||
lbl_405_data_100 = .data:0x00000100; // type:object size:0x18
|
||||
lbl_405_data_E8 = .data:0x000000E8; // type:object size:0x18 data:string
|
||||
lbl_405_data_100 = .data:0x00000100; // type:object size:0x18 data:string
|
||||
lbl_405_data_118 = .data:0x00000118; // type:object size:0x18 data:string
|
||||
lbl_405_data_130 = .data:0x00000130; // type:object size:0x18 data:string
|
||||
lbl_405_data_148 = .data:0x00000148; // type:object size:0x18 data:string
|
||||
g_profile_OBJ_STREAM_LAVA = .data:0x00000160; // type:object size:0x10
|
||||
lbl_405_data_170 = .data:0x00000170; // type:object size:0x8
|
||||
lbl_405_data_178 = .data:0x00000178; // type:object size:0x20
|
||||
lbl_405_data_198 = .data:0x00000198; // type:object size:0x4 data:4byte
|
||||
lbl_405_data_19C = .data:0x0000019C; // type:object size:0x4 data:4byte
|
||||
lbl_405_data_1A0 = .data:0x000001A0; // type:object size:0x8
|
||||
AcOstreamLava__vtable = .data:0x000001A8; // type:object size:0x80
|
||||
lbl_405_data_170 = .data:0x00000170; // type:object size:0x8 data:string
|
||||
lbl_405_data_178 = .data:0x00000178; // type:object size:0x20 data:string
|
||||
lbl_405_data_198 = .data:0x00000198; // type:object size:0x4 data:int
|
||||
lbl_405_data_19C = .data:0x0000019C; // type:object size:0x4 data:int
|
||||
lbl_405_data_1A0 = .data:0x000001A0; // type:object size:0x8 data:string
|
||||
__vt__16dAcOstreamLava_c = .data:0x000001A8; // type:object size:0x80
|
||||
lbl_405_data_228 = .data:0x00000228; // type:object size:0x30
|
||||
lbl_405_data_258 = .data:0x00000258; // type:object size:0x30
|
||||
lbl_405_data_288 = .data:0x00000288; // type:object size:0x18
|
||||
@@ -82,5 +87,5 @@ lbl_405_data_2A0 = .data:0x000002A0; // type:object size:0xC4
|
||||
lbl_405_data_364 = .data:0x00000364; // type:object size:0x34
|
||||
__global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global
|
||||
lbl_405_bss_8 = .bss:0x00000008; // type:object size:0x10 data:4byte
|
||||
AcOstreamLava__STATE_WAIT = .bss:0x00000018; // type:object size:0x40 data:4byte
|
||||
AcOstreamLava__STATE_STREAM = .bss:0x00000058; // type:object size:0x30 data:4byte
|
||||
StateID_Wait__16dAcOstreamLava_c = .bss:0x00000018; // type:object size:0x40 data:4byte
|
||||
StateID_Stream__16dAcOstreamLava_c = .bss:0x00000058; // type:object size:0x30 data:4byte
|
||||
|
||||
@@ -4,10 +4,10 @@ _unresolved = .text:0x00000060; // type:function size:0x4 scope:global
|
||||
dTgShutterFenceForbiddance_c_classInit__Fv = .text:0x00000070; // type:function size:0x30
|
||||
__ct__28dTgShutterFenceForbiddance_cFv = .text:0x000000A0; // type:function size:0x50
|
||||
__dt__28dTgShutterFenceForbiddance_cFv = .text:0x000000F0; // type:function size:0x7C
|
||||
TgShutterFenceForbiddance__init = .text:0x00000170; // type:function size:0x20
|
||||
fn_631_190 = .text:0x00000190; // type:function size:0x60
|
||||
create__28dTgShutterFenceForbiddance_cFv = .text:0x00000170; // type:function size:0x20
|
||||
actorExecute__28dTgShutterFenceForbiddance_cFv = .text:0x00000190; // type:function size:0x60
|
||||
_ctors = .ctors:0x00000000; // type:label scope:global
|
||||
_dtors = .dtors:0x00000000; // type:label scope:global
|
||||
g_profile_TAG_SHUTTER_FENCE_FORBIDDANCE = .data:0x00000000; // type:object size:0x10
|
||||
lbl_631_section4_10 = .data:0x00000010; // type:object size:0x74
|
||||
__vt__28dTgShutterFenceForbiddance_c = .data:0x00000010; // type:object size:0x74
|
||||
TgShutterFenceForbiddance__FIRST_PTR = .bss:0x00000008; // type:object size:0x4 data:4byte
|
||||
|
||||
@@ -852,8 +852,8 @@ fn_80024590 = .text:0x80024590; // type:function size:0xE4
|
||||
__ct__3SffFv = .text:0x80024680; // type:function size:0x48
|
||||
__dt__3SffFv = .text:0x800246D0; // type:function size:0x64
|
||||
fn_80024740 = .text:0x80024740; // type:function size:0x24
|
||||
fn_80024770 = .text:0x80024770; // type:function size:0x24
|
||||
fn_800247A0 = .text:0x800247A0; // type:function size:0x30
|
||||
fn_80024770__21BlurAndPaletteManagerFi = .text:0x80024770; // type:function size:0x24
|
||||
fn_800247A0__21BlurAndPaletteManagerFi = .text:0x800247A0; // type:function size:0x30
|
||||
fn_800247D0__21BlurAndPaletteManagerF7mVec3_cf = .text:0x800247D0; // type:function size:0x20
|
||||
__ct__21BlurAndPaletteManagerFv = .text:0x800247F0; // type:function size:0xBB0
|
||||
__ct__7mVec3_cFfff = .text:0x800253A0; // type:function size:0x10
|
||||
|
||||
+1
-1
@@ -2108,7 +2108,7 @@ config.libs = [
|
||||
Rel(NonMatching, "d_a_obj_insect_island", "REL/d/a/obj/d_a_obj_insect_island.cpp"),
|
||||
Rel(NonMatching, "d_a_obj_into_hole", "REL/d/a/obj/d_a_obj_into_hole.cpp"),
|
||||
Rel(Matching, "d_a_obj_iron_stage", "REL/d/a/obj/d_a_obj_iron_stage.cpp"),
|
||||
Rel(NonMatching, "d_a_obj_island_LOD", "REL/d/a/obj/d_a_obj_island_LOD.cpp"),
|
||||
Rel(Matching, "d_a_obj_island_LOD", "REL/d/a/obj/d_a_obj_island_LOD.cpp"),
|
||||
Rel(Matching, "d_a_obj_island_nusi", "REL/d/a/obj/d_a_obj_island_nusi.cpp"),
|
||||
Rel(
|
||||
NonMatching,
|
||||
|
||||
@@ -8,7 +8,19 @@ public:
|
||||
dAcOislandLOD_c() {}
|
||||
virtual ~dAcOislandLOD_c() {}
|
||||
|
||||
virtual bool createHeap() override;
|
||||
virtual int create() override;
|
||||
virtual int doDelete() override;
|
||||
virtual int actorExecute() override;
|
||||
virtual int draw() override;
|
||||
|
||||
private:
|
||||
static const char* const resFilenames[5];
|
||||
static const char* const resMdlNames[5];
|
||||
|
||||
/* 0x330 */ nw4r::g3d::ResFile mResFile;
|
||||
/* 0x334 */ m3d::smdl_c mMdl;
|
||||
/* 0x350 */ u8 mMdlLodIdx;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,20 +1,47 @@
|
||||
#ifndef D_A_OBJ_STREAM_LAVA_H
|
||||
#define D_A_OBJ_STREAM_LAVA_H
|
||||
|
||||
#include "common.h"
|
||||
#include "d/a/obj/d_a_obj_base.h"
|
||||
#include "d/col/bg/d_bg_w.h"
|
||||
#include "m/m3d/m_anmmatclr.h"
|
||||
#include "m/m3d/m_anmtexsrt.h"
|
||||
#include "nw4r/g3d/res/g3d_resfile.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "s/s_StateMgr.hpp"
|
||||
#include "toBeSorted/actor_event.h"
|
||||
#include "toBeSorted/stage_render_stuff.h"
|
||||
|
||||
class dAcOstreamLava_c : public dAcObjBase_c {
|
||||
public:
|
||||
dAcOstreamLava_c() : mStateMgr(*this, sStateID::null) {}
|
||||
dAcOstreamLava_c() : mStateMgr(*this, sStateID::null), mEvent(*this, nullptr), mScnCallback(this) {}
|
||||
virtual int create() override;
|
||||
virtual int doDelete() override;
|
||||
virtual int draw() override;
|
||||
virtual bool createHeap() override;
|
||||
virtual ~dAcOstreamLava_c() {}
|
||||
virtual int actorExecute() override;
|
||||
|
||||
STATE_FUNC_DECLARE(dAcOstreamLava_c, Wait);
|
||||
STATE_FUNC_DECLARE(dAcOstreamLava_c, Stream);
|
||||
|
||||
private:
|
||||
/* 0x??? */ STATE_MGR_DECLARE(dAcOstreamLava_c);
|
||||
const static f32 unkFloat0;
|
||||
static u32 eventFlags1;
|
||||
static u32 eventFlags2;
|
||||
|
||||
/* 0x330 */ nw4r::g3d::ResFile mResFile;
|
||||
/* 0x334 */ m3d::smdl_c mModel;
|
||||
/* 0x350 */ m3d::anmTexSrt_c mAnmTexSrtWait;
|
||||
/* 0x37C */ m3d::anmMatClr_c mAnmMatClr;
|
||||
/* 0x3A8 */ dBgW mCollision;
|
||||
/* 0x5B8 */ STATE_MGR_DECLARE(dAcOstreamLava_c);
|
||||
/* 0x5F4 */ ActorEventRelated mEvent;
|
||||
/* 0x644 */ dScnCallback_c mScnCallback;
|
||||
|
||||
/* 0x650 */ u8 mSubtype;
|
||||
/* 0x651 */ u8 mShouldStreamSceneflag;
|
||||
/* 0x652 */ u8 mEventId;
|
||||
/* 0x653 */ bool mHideActor;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,13 +1,16 @@
|
||||
#ifndef D_T_SHUTTER_FENCE_FORBIDDANCE_H
|
||||
#define D_T_SHUTTER_FENCE_FORBIDDANCE_H
|
||||
|
||||
#include "d/a/d_a_base.h"
|
||||
#include "d/t/d_tg.h"
|
||||
|
||||
class dTgShutterFenceForbiddance_c : public dAcBase_c {
|
||||
class dTgShutterFenceForbiddance_c : public dTg_c {
|
||||
public:
|
||||
dTgShutterFenceForbiddance_c();
|
||||
virtual ~dTgShutterFenceForbiddance_c();
|
||||
|
||||
virtual int create() override;
|
||||
virtual int actorExecute() override;
|
||||
|
||||
private:
|
||||
};
|
||||
|
||||
|
||||
+4
-1
@@ -15,7 +15,6 @@
|
||||
#include "f/f_manager.h"
|
||||
#include "f/f_profile.h"
|
||||
|
||||
|
||||
// Ghidra: fBase
|
||||
// size: 0x64
|
||||
// official name
|
||||
@@ -91,6 +90,10 @@ public:
|
||||
group_type = m_tmpCtData.group_type;
|
||||
}
|
||||
|
||||
inline u32 getFromParams(u8 shift, u32 mask) {
|
||||
return (params >> shift) & mask;
|
||||
}
|
||||
|
||||
public:
|
||||
/* 802e12f0 */ fBase_c();
|
||||
/* 802e23b0 */ static void *operator new(size_t);
|
||||
|
||||
@@ -268,6 +268,8 @@ public:
|
||||
void fn_800226E0(LightParams *);
|
||||
// light pillar related
|
||||
void fn_80024240(s16, s16, s16);
|
||||
bool fn_80024770(int);
|
||||
bool fn_800247A0(int);
|
||||
|
||||
u8 get0x2DE8() const {
|
||||
return field_0x2DE0[8];
|
||||
|
||||
@@ -15,6 +15,10 @@ public:
|
||||
void *callback2;
|
||||
|
||||
public:
|
||||
static u32 makeEventFlag(const u32 &clearMask, const u32 &unsetBits) {
|
||||
return clearMask & ~unsetBits;
|
||||
}
|
||||
|
||||
/** 0x800A0C40 */
|
||||
Event(const char *eventName, u32 unk, u32 eventFlags, void *callback1, void *callback2);
|
||||
Event(u32 eventId, s32 roomId, u32 eventFlags, void *callback1, void *callback2);
|
||||
|
||||
@@ -1,3 +1,62 @@
|
||||
#include "d/a/obj/d_a_obj_island_LOD.h"
|
||||
#include "common.h"
|
||||
#include "d/a/obj/d_a_obj_base.h"
|
||||
#include "d/d_stage.h"
|
||||
#include "f/f_base.h"
|
||||
#include "toBeSorted/blur_and_palette_manager.h"
|
||||
|
||||
const char* const dAcOislandLOD_c::resFilenames[5] = {
|
||||
"IslLODA",
|
||||
"IslLODB",
|
||||
"IslLODC",
|
||||
"IslLODD",
|
||||
"IslLODE",
|
||||
};
|
||||
|
||||
const char* const dAcOislandLOD_c::resMdlNames[5] = {
|
||||
"IslLODA",
|
||||
"IslLODB",
|
||||
"IslLODC",
|
||||
"IslLODD",
|
||||
"IslLODE",
|
||||
};
|
||||
|
||||
SPECIAL_ACTOR_PROFILE(OBJ_ISLAND_LOD, dAcOislandLOD_c, fProfile::OBJ_ISLAND_LOD, 0x211, 0, 3);
|
||||
|
||||
bool dAcOislandLOD_c::createHeap() {
|
||||
mMdlLodIdx = params & 0xf;
|
||||
void* data = getOarcResFile(dAcOislandLOD_c::resFilenames[mMdlLodIdx]);
|
||||
mResFile = nw4r::g3d::ResFile(data);
|
||||
dStage_c::bindStageResToFile(&mResFile);
|
||||
dStage_c::bindSkyCmnToResFile(&mResFile);
|
||||
nw4r::g3d::ResMdl mdl = mResFile.GetResMdl(dAcOislandLOD_c::resMdlNames[mMdlLodIdx]);
|
||||
TRY_CREATE(mMdl.create(mdl, &heap_allocator, 0x120, 1, nullptr));
|
||||
return true;
|
||||
}
|
||||
|
||||
int dAcOislandLOD_c::create() {
|
||||
CREATE_ALLOCATOR(dAcOislandLOD_c);
|
||||
updateMatrix();
|
||||
mMdl.setLocalMtx(mWorldMtx);
|
||||
mVec3_c min, max;
|
||||
mMdl.getBounds(&min, &max);
|
||||
boundingBox.Set(min, max);
|
||||
mCullingDistance = 500000.0;
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dAcOislandLOD_c::doDelete() {
|
||||
return SUCCEEDED;
|
||||
}
|
||||
int dAcOislandLOD_c::actorExecute() {
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dAcOislandLOD_c::draw() {
|
||||
BlurAndPaletteManager& blurAndPaletteManager = BlurAndPaletteManager::GetInstance();
|
||||
if (blurAndPaletteManager.fn_80024770(7) && !blurAndPaletteManager.fn_800247A0(7)) {
|
||||
return SUCCEEDED;
|
||||
}
|
||||
drawModelType1(&mMdl);
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
@@ -1,13 +1,176 @@
|
||||
#include "d/a/obj/d_a_obj_stream_lava.h"
|
||||
|
||||
SPECIAL_ACTOR_PROFILE(OBJ_STREAM_LAVA, dAcOstreamLava_c, fProfile::OBJ_STREAM_LAVA, 0x1FA, 0, 6);
|
||||
#include "common.h"
|
||||
#include "d/col/bg/d_bg_s.h"
|
||||
#include "d/d_room.h"
|
||||
#include "d/d_stage.h"
|
||||
#include "d/flag/sceneflag_manager.h"
|
||||
#include "m/m3d/m_fanm.h"
|
||||
#include "nw4r/g3d/res/g3d_resfile.h"
|
||||
|
||||
STATE_DEFINE(dAcOstreamLava_c, Wait);
|
||||
STATE_DEFINE(dAcOstreamLava_c, Stream);
|
||||
|
||||
void dAcOstreamLava_c::initializeState_Wait() {}
|
||||
void dAcOstreamLava_c::executeState_Wait() {}
|
||||
void dAcOstreamLava_c::finalizeState_Wait() {}
|
||||
void dAcOstreamLava_c::initializeState_Stream() {}
|
||||
void dAcOstreamLava_c::executeState_Stream() {}
|
||||
const f32 dAcOstreamLava_c::unkFloat0 = 0.0f;
|
||||
|
||||
static const char *const AcOstreamLava__OarcNames[] = {
|
||||
"FlowLavaD2", "FlowLavaD2", "FlowLavaLast_2", "FlowLavaLast_2", "FlowLavaLast_2",
|
||||
};
|
||||
static const char *const AcOstreamLava__ModelNames[] = {
|
||||
"FlowLavaD2_A", "FlowLavaD2_B", "FlowLavaLast_2A", "FlowLavaLast_2B", "FlowLavaLast_2C",
|
||||
};
|
||||
static const char *const AcOstreamLava__DbzNames[] = {
|
||||
"dzb/FlowLavaD2_A.dzb", "dzb/FlowLavaD2_B.dzb", "dzb/FlowLavaLast_2A.dzb",
|
||||
"dzb/FlowLavaLast_2B.dzb", "dzb/FlowLavaLast_2C.dzb",
|
||||
};
|
||||
static const char *const AcOstreamLava__PlcNames[] = {
|
||||
"dat/FlowLavaD2_A.plc", "dat/FlowLavaD2_B.plc", "dat/FlowLavaLast_2A.plc",
|
||||
"dat/FlowLavaLast_2B.plc", "dat/FlowLavaLast_2C.plc",
|
||||
};
|
||||
static const char *const AcOstreamLava__AnmClrNames[] = {
|
||||
"FlowLavaD2", "FlowLavaD2", "FlowLavaLast_2", "FlowLavaLast_2", "FlowLavaLast_2",
|
||||
};
|
||||
|
||||
SPECIAL_ACTOR_PROFILE(OBJ_STREAM_LAVA, dAcOstreamLava_c, fProfile::OBJ_STREAM_LAVA, 0x1FA, 0, 6);
|
||||
|
||||
bool dAcOstreamLava_c::createHeap() {
|
||||
mSubtype = params & 0xF;
|
||||
mResFile = nw4r::g3d::ResFile(getOarcResFile(AcOstreamLava__OarcNames[mSubtype]));
|
||||
dStage_c::bindStageResToFile(&mResFile);
|
||||
|
||||
nw4r::g3d::ResMdl mdl;
|
||||
nw4r::g3d::ResAnmTexSrt anmSrtWait;
|
||||
nw4r::g3d::ResAnmClr anmClr;
|
||||
|
||||
mdl = mResFile.GetResMdl(AcOstreamLava__ModelNames[mSubtype]);
|
||||
TRY_CREATE(mModel.create(mdl, &heap_allocator, 0x32C));
|
||||
|
||||
anmSrtWait = mResFile.GetResAnmTexSrt("Wait");
|
||||
TRY_CREATE(mAnmTexSrtWait.create(mdl, anmSrtWait, &heap_allocator, nullptr, 1));
|
||||
mModel.setAnm(mAnmTexSrtWait);
|
||||
|
||||
anmClr = mResFile.GetResAnmClr(AcOstreamLava__AnmClrNames[mSubtype]);
|
||||
TRY_CREATE(mAnmMatClr.create(mdl, anmClr, &heap_allocator, nullptr, 1));
|
||||
|
||||
void *dzb = getOarcFile(AcOstreamLava__OarcNames[mSubtype], AcOstreamLava__DbzNames[mSubtype]);
|
||||
void *plc = getOarcFile(AcOstreamLava__OarcNames[mSubtype], AcOstreamLava__PlcNames[mSubtype]);
|
||||
updateMatrix();
|
||||
mModel.setLocalMtx(mWorldMtx);
|
||||
|
||||
TRY_CREATE(!mCollision.Set((cBgD_t *)dzb, (PLC *)plc, cBgW::MOVE_BG_e, &mWorldMtx, &mScale));
|
||||
mCollision.Lock();
|
||||
|
||||
TRY_CREATE(mCollision.InitMapStuff(&heap_allocator));
|
||||
return true;
|
||||
}
|
||||
|
||||
int dAcOstreamLava_c::create() {
|
||||
CREATE_ALLOCATOR(dAcOstreamLava_c);
|
||||
dBgS::GetInstance()->Regist(&mCollision, this);
|
||||
dBgS::GetInstance()->RegistBg(&mCollision, this);
|
||||
|
||||
mShouldStreamSceneflag = getFromParams(4, 0xFF); // (params >> 4) & 0xFF;
|
||||
mEventId = getFromParams(0xC, 0xFF); // params >> 0xC;
|
||||
mHideActor = !getFromParams(0x14, 1); // (params >> 0x14 & 1) == 0;
|
||||
mModel.setAnm(mAnmMatClr);
|
||||
|
||||
bool shouldStream = SceneflagManager::sInstance->checkFlag(roomid, mShouldStreamSceneflag);
|
||||
if (shouldStream) {
|
||||
mStateMgr.changeState(StateID_Stream);
|
||||
} else {
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
}
|
||||
|
||||
mModel.setPriorityDraw(0x1C, 0x9);
|
||||
mVec3_c min, max;
|
||||
mModel.getBounds(&min, &max);
|
||||
boundingBox.Set(min, max);
|
||||
mCullingDistance = 50000.0f;
|
||||
|
||||
int roomId_tmp = roomid;
|
||||
if (addActorToRoom(-1)) {
|
||||
roomid = roomId_tmp;
|
||||
changeLoadedEntitiesWithSet();
|
||||
}
|
||||
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dAcOstreamLava_c::doDelete() {
|
||||
dBgS::GetInstance()->UnRegist(&mCollision);
|
||||
changeLoadedEntitiesNoSet();
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dAcOstreamLava_c::actorExecute() {
|
||||
mStateMgr.executeState();
|
||||
mAnmMatClr.play();
|
||||
|
||||
dRoom_c *currentRoom = dStage_c::GetInstance()->getRoom(roomid);
|
||||
|
||||
if (currentRoom->checkFlag(2)) {
|
||||
setObjectProperty(0x200);
|
||||
return SUCCEEDED;
|
||||
} else {
|
||||
clearObjectProperty(0x200);
|
||||
return SUCCEEDED;
|
||||
}
|
||||
}
|
||||
|
||||
int dAcOstreamLava_c::draw() {
|
||||
if (!mHideActor) {
|
||||
drawModelType1(&mModel);
|
||||
}
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
void dAcOstreamLava_c::initializeState_Wait() {
|
||||
mAnmTexSrtWait.setAnm(mModel, mResFile.GetResAnmTexSrt("Wait"), 0, m3d::PLAY_MODE_4);
|
||||
}
|
||||
|
||||
void dAcOstreamLava_c::executeState_Wait() {
|
||||
mAnmTexSrtWait.play();
|
||||
|
||||
bool shouldStream = SceneflagManager::sInstance->checkFlag(roomid, mShouldStreamSceneflag);
|
||||
if (shouldStream) {
|
||||
mStateMgr.changeState(StateID_Stream);
|
||||
}
|
||||
}
|
||||
|
||||
// BADLY MATCHING
|
||||
// Using the potential improvement causes issues with the andc instruction
|
||||
// Should be: andc r6, r0, r9
|
||||
// Currently: andc r6, r9, r0
|
||||
// https://decomp.me/scratch/3PKdt
|
||||
void dAcOstreamLava_c::finalizeState_Wait() {
|
||||
if (mEventId != 0xFF) {
|
||||
// Hacky solution:
|
||||
static volatile u32 FLAGS_1 = 0x00000001;
|
||||
static u32 FLAGS_2 = 0x00100001;
|
||||
u32 f1 = FLAGS_1;
|
||||
u32 f2 = FLAGS_2;
|
||||
u32 eventFlag = f2 & ~f1;
|
||||
|
||||
// Potential improvement:
|
||||
// Swaps the numbers in .data and swaps the operands in andc
|
||||
// u32 eventFlag = Event::makeEventFlag(0x100001, 0x1);
|
||||
|
||||
Event ev(mEventId, roomid, eventFlag, nullptr, nullptr);
|
||||
mEvent.scheduleEvent(ev, 0);
|
||||
}
|
||||
}
|
||||
|
||||
void dAcOstreamLava_c::initializeState_Stream() {
|
||||
mAnmTexSrtWait.setAnm(mModel, mResFile.GetResAnmTexSrt("Flow"), 0, m3d::PLAY_MODE_4);
|
||||
}
|
||||
|
||||
void dAcOstreamLava_c::executeState_Stream() {
|
||||
mAnmTexSrtWait.play();
|
||||
|
||||
bool shouldStream = SceneflagManager::sInstance->checkFlag(roomid, mShouldStreamSceneflag);
|
||||
if (!shouldStream) {
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
}
|
||||
}
|
||||
|
||||
void dAcOstreamLava_c::finalizeState_Stream() {}
|
||||
|
||||
@@ -1,8 +1,33 @@
|
||||
#include "d/t/d_t_shutter_fence_forbiddance.h"
|
||||
|
||||
#include "common.h"
|
||||
#include "f/f_base.h"
|
||||
|
||||
SPECIAL_ACTOR_PROFILE(
|
||||
TAG_SHUTTER_FENCE_FORBIDDANCE, dTgShutterFenceForbiddance_c, fProfile::TAG_SHUTTER_FENCE_FORBIDDANCE, 0x2A4, 0, 4
|
||||
);
|
||||
|
||||
dTgShutterFenceForbiddance_c::dTgShutterFenceForbiddance_c() {}
|
||||
dTgShutterFenceForbiddance_c::~dTgShutterFenceForbiddance_c() {}
|
||||
static dTgShutterFenceForbiddance_c *FIRST_PTR;
|
||||
|
||||
dTgShutterFenceForbiddance_c::dTgShutterFenceForbiddance_c() {
|
||||
if (!FIRST_PTR) {
|
||||
FIRST_PTR = this;
|
||||
}
|
||||
}
|
||||
dTgShutterFenceForbiddance_c::~dTgShutterFenceForbiddance_c() {
|
||||
if (this == FIRST_PTR) {
|
||||
FIRST_PTR = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
int dTgShutterFenceForbiddance_c::create() {
|
||||
if (this != FIRST_PTR) {
|
||||
return FAILED;
|
||||
}
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
// TODO after finding out more about d_a_obj_door_base
|
||||
int dTgShutterFenceForbiddance_c::actorExecute() {
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user