From 2577b3a537e389a13abc03928fda9dc669b07d01 Mon Sep 17 00:00:00 2001 From: robojumper Date: Sun, 20 Oct 2024 15:59:15 +0200 Subject: [PATCH] d_a_obj_utajima_island OK (#73) * d_a_obj_utajima_island OK * Name one field * mAngle constants --- .../rels/d_a_obj_utajima_islandNP/splits.txt | 3 + .../rels/d_a_obj_utajima_islandNP/symbols.txt | 44 +++--- config/SOUE01/splits.txt | 1 + config/SOUE01/symbols.txt | 20 +-- configure.py | 2 +- include/d/a/d_a_base.h | 2 +- include/d/a/obj/d_a_obj_utajima_island.h | 41 +++++- include/m/m_angle.h | 14 ++ include/s/s_Math.h | 1 + src/REL/d/a/obj/d_a_obj_utajima_island.cpp | 134 +++++++++++++++++- src/d/a/d_a_base.cpp | 2 +- src/m/m_angle.cpp | 12 +- 12 files changed, 238 insertions(+), 38 deletions(-) diff --git a/config/SOUE01/rels/d_a_obj_utajima_islandNP/splits.txt b/config/SOUE01/rels/d_a_obj_utajima_islandNP/splits.txt index 27bef86d..cb37dad2 100644 --- a/config/SOUE01/rels/d_a_obj_utajima_islandNP/splits.txt +++ b/config/SOUE01/rels/d_a_obj_utajima_islandNP/splits.txt @@ -17,3 +17,6 @@ REL/global_destructor_chain.c: REL/d/a/obj/d_a_obj_utajima_island.cpp: .text start:0x000000F0 end:0x00000F28 .ctors start:0x00000000 end:0x00000004 + .rodata start:0x00000000 end:0x00000034 + .data start:0x00000000 end:0x00000204 + .bss start:0x00000008 end:0x00000048 diff --git a/config/SOUE01/rels/d_a_obj_utajima_islandNP/symbols.txt b/config/SOUE01/rels/d_a_obj_utajima_islandNP/symbols.txt index c7abb010..af63478a 100644 --- a/config/SOUE01/rels/d_a_obj_utajima_islandNP/symbols.txt +++ b/config/SOUE01/rels/d_a_obj_utajima_islandNP/symbols.txt @@ -8,18 +8,18 @@ __dt__32sFState_c<19dAcOutajimaIsland_c>Fv = .text:0x000001D0; // type:function __dt__35sFStateFct_c<19dAcOutajimaIsland_c>Fv = .text:0x00000230; // type:function size:0x6C __dt__88sStateMgr_c<19dAcOutajimaIsland_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x000002A0; // type:function size:0xA0 __dt__58sFStateMgr_c<19dAcOutajimaIsland_c,20sStateMethodUsr_FI_c>Fv = .text:0x00000340; // type:function size:0xA4 -AcOutajimaIsland__initModels = .text:0x000003F0; // type:function size:0xEC -AcOutajimaIsland__init = .text:0x000004E0; // type:function size:0x180 +createHeap__19dAcOutajimaIsland_cFv = .text:0x000003F0; // type:function size:0xEC +actorCreate__19dAcOutajimaIsland_cFv = .text:0x000004E0; // type:function size:0x180 changeState__88sStateMgr_c<19dAcOutajimaIsland_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x00000660; // type:function size:0x10 -AcOutajimaIsland__init2 = .text:0x00000670; // type:function size:0x64 -fn_366_6E0 = .text:0x000006E0; // type:function size:0x8 -AcOutajimaIsland__update = .text:0x000006F0; // type:function size:0x5C +actorPostCreate__19dAcOutajimaIsland_cFv = .text:0x00000670; // type:function size:0x64 +doDelete__19dAcOutajimaIsland_cFv = .text:0x000006E0; // type:function size:0x8 +actorExecute__19dAcOutajimaIsland_cFv = .text:0x000006F0; // type:function size:0x5C executeState__88sStateMgr_c<19dAcOutajimaIsland_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000750; // type:function size:0x10 -AcOutajimaIsland__draw = .text:0x00000760; // type:function size:0x28 +draw__19dAcOutajimaIsland_cFv = .text:0x00000760; // type:function size:0x28 initializeState_Wait__19dAcOutajimaIsland_cFv = .text:0x00000790; // type:function size:0x4 executeState_Wait__19dAcOutajimaIsland_cFv = .text:0x000007A0; // type:function size:0x134 finalizeState_Wait__19dAcOutajimaIsland_cFv = .text:0x000008E0; // type:function size:0x4 -AcOutajimaIsland__movePlatforms = .text:0x000008F0; // type:function size:0x174 +movePlatforms__19dAcOutajimaIsland_cFv = .text:0x000008F0; // type:function size:0x174 __dt__19dAcOutajimaIsland_cFv = .text:0x00000A70; // type:function size:0xE8 getStateID__88sStateMgr_c<19dAcOutajimaIsland_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00000B60; // type:function size:0x10 build__35sFStateFct_c<19dAcOutajimaIsland_c>FRC12sStateIDIf_c = .text:0x00000B70; // type:function size:0x60 @@ -42,19 +42,19 @@ isSameName__34sFStateID_c<19dAcOutajimaIsland_c>CFPCc = .text:0x00000EA0; // typ _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_366_rodata_0 = .rodata:0x00000000; // type:object size:0x14 data:float -lbl_366_rodata_14 = .rodata:0x00000014; // type:object size:0x4 data:float -lbl_366_rodata_18 = .rodata:0x00000018; // type:object size:0x8 data:double -lbl_366_rodata_20 = .rodata:0x00000020; // type:object size:0x14 data:float -g_profile_OBJ_UTAJIMA_ISLAND = .data:0x00000000; // type:object size:0x50 data:4byte -lbl_366_data_50 = .data:0x00000050; // type:object size:0x28 -lbl_366_data_78 = .data:0x00000078; // type:object size:0x80 -lbl_366_data_F8 = .data:0x000000F8; // type:object size:0x30 -lbl_366_data_128 = .data:0x00000128; // type:object size:0x30 -lbl_366_data_158 = .data:0x00000158; // type:object size:0x18 -lbl_366_data_170 = .data:0x00000170; // type:object size:0x60 -lbl_366_data_1D0 = .data:0x000001D0; // type:object size:0x34 +floats__19dAcOutajimaIsland_c = .rodata:0x00000000; // type:object size:0x14 data:float +lbl_366_rodata_14 = .rodata:0x00000014; // type:object size:0x4 scope:local data:float +lbl_366_rodata_18 = .rodata:0x00000018; // type:object size:0x8 scope:local data:double +lbl_366_rodata_20 = .rodata:0x00000020; // type:object size:0x14 scope:local data:float +g_profile_OBJ_UTAJIMA_ISLAND = .data:0x00000000; // type:object size:0x10 data:4byte +lbl_366_data_50 = .data:0x00000050; // type:object size:0x28 scope:local +__vt__19dAcOutajimaIsland_c = .data:0x00000078; // type:object size:0x80 +__vt__58sFStateMgr_c<19dAcOutajimaIsland_c,20sStateMethodUsr_FI_c> = .data:0x000000F8; // type:object size:0x30 +__vt__88sStateMgr_c<19dAcOutajimaIsland_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x00000128; // type:object size:0x30 +__vt__35sFStateFct_c<19dAcOutajimaIsland_c> = .data:0x00000158; // type:object size:0x14 +__vt__32sFState_c<19dAcOutajimaIsland_c> = .data:0x00000170; // type:object size:0x18 +__vt__34sFStateID_c<19dAcOutajimaIsland_c> = .data:0x000001D0; // type:object size:0x34 __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global -lbl_366_bss_8 = .bss:0x00000008; // type:object size:0x1 data:byte -lbl_366_bss_C = .bss:0x0000000C; // type:object size:0xC -lbl_366_bss_18 = .bss:0x00000018; // type:object size:0x30 data:4byte +sPlatformsSettled__19dAcOutajimaIsland_c = .bss:0x00000008; // type:object size:0x1 data:byte +lbl_366_bss_C = .bss:0x0000000C; // type:object size:0xC scope:local +StateID_Wait__19dAcOutajimaIsland_c = .bss:0x00000018; // type:object size:0x30 data:4byte diff --git a/config/SOUE01/splits.txt b/config/SOUE01/splits.txt index 17302325..a0d69977 100644 --- a/config/SOUE01/splits.txt +++ b/config/SOUE01/splits.txt @@ -883,6 +883,7 @@ m/m_angle.cpp: .text start:0x802EE5F0 end:0x802EE6B8 .ctors start:0x804DB8CC end:0x804DB8D0 .sbss start:0x80575C08 end:0x80575C10 + .sdata2 start:0x8057CD90 end:0x8057CDB0 m/m_color_fader.cpp: .text start:0x802EE7E0 end:0x802EEB94 diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index cbe84d11..11f168e8 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -1075,7 +1075,7 @@ playSound__9dAcBase_cFUs = .text:0x8002D5D0; // type:function size:0x28 FUN_8002d600__9dAcBase_cFv = .text:0x8002D600; // type:function size:0x28 FUN_8002d630__9dAcBase_cFv = .text:0x8002D630; // type:function size:0x9C FUN_8002d6d0__9dAcBase_cFv = .text:0x8002D6D0; // type:function size:0x40 -playSoundEffect1__9dAcBase_cFv = .text:0x8002D710; // type:function size:0x28 +playSoundEffect1__9dAcBase_cFUs = .text:0x8002D710; // type:function size:0x28 FUN_8002d740__9dAcBase_cFv = .text:0x8002D740; // type:function size:0x28 FUN_8002d770__9dAcBase_cFv = .text:0x8002D770; // type:function size:0x28 FUN_8002d7a0__9dAcBase_cFv = .text:0x8002D7A0; // type:function size:0x28 @@ -17222,7 +17222,7 @@ chaseT__4sLibFPfff_i = .text:0x802DECD0; // type:function size:0x64 isInRange__4sLibFfff = .text:0x802DED40; // type:function size:0x4 isInRangeT__4sLibFfff_i = .text:0x802DED50; // type:function size:0x50 chaseAngle__4sLibFPsss = .text:0x802DEDA0; // type:function size:0x64 -sLib__chaseAngle = .text:0x802DEE10; // type:function size:0x98 +chaseAngle2__4sLibFPsss = .text:0x802DEE10; // type:function size:0x98 __ct__8sPhase_cFPPFPv_Q28sPhase_c15METHOD_RESULT_ei = .text:0x802DEEB0; // type:function size:0x14 callMethod__8sPhase_cFPv = .text:0x802DEED0; // type:function size:0xA4 vprintf_wrap = .text:0x802DEF80; // type:function size:0x8 @@ -45914,14 +45914,14 @@ lbl_8057CD80 = .sdata2:0x8057CD80; // type:object size:0x4 data:float lbl_8057CD84 = .sdata2:0x8057CD84; // type:object size:0x4 data:float lbl_8057CD88 = .sdata2:0x8057CD88; // type:object size:0x4 data:float lbl_8057CD8C = .sdata2:0x8057CD8C; // type:object size:0x4 data:float -lbl_8057CD90 = .sdata2:0x8057CD90; // type:object size:0x4 data:float -lbl_8057CD94 = .sdata2:0x8057CD94; // type:object size:0x4 data:float -lbl_8057CD98 = .sdata2:0x8057CD98; // type:object size:0x4 data:float -lbl_8057CD9C = .sdata2:0x8057CD9C; // type:object size:0x4 data:float -lbl_8057CDA0 = .sdata2:0x8057CDA0; // type:object size:0x4 data:float -lbl_8057CDA4 = .sdata2:0x8057CDA4; // type:object size:0x4 data:float -lbl_8057CDA8 = .sdata2:0x8057CDA8; // type:object size:0x4 data:float -lbl_8057CDAC = .sdata2:0x8057CDAC; // type:object size:0x4 data:float +sHalfCircleDeg__4mAng = .sdata2:0x8057CD90; // type:object size:0x4 data:float +sAngToDeg__4mAng = .sdata2:0x8057CD94; // type:object size:0x4 data:float +sAngToRad__4mAng = .sdata2:0x8057CD98; // type:object size:0x4 data:float +NotSure__4mAng = .sdata2:0x8057CD9C; // type:object size:0x4 data:float +sDegToRad__4mAng = .sdata2:0x8057CDA0; // type:object size:0x4 data:float +sDegToAng__4mAng = .sdata2:0x8057CDA4; // type:object size:0x4 data:float +sRadToAng__4mAng = .sdata2:0x8057CDA8; // type:object size:0x4 data:float +sRadToDeg__4mAng = .sdata2:0x8057CDAC; // type:object size:0x4 data:float lbl_8057CDB0 = .sdata2:0x8057CDB0; // type:object size:0x4 data:float lbl_8057CDB8 = .sdata2:0x8057CDB8; // type:object size:0x8 data:double lbl_8057CDC0 = .sdata2:0x8057CDC0; // type:object size:0x4 data:float diff --git a/configure.py b/configure.py index bb08ab7f..81c87b62 100644 --- a/configure.py +++ b/configure.py @@ -1707,7 +1707,7 @@ config.libs = [ Rel(NonMatching, "d_a_obj_updown_lava", "REL/d/a/obj/d_a_obj_updown_lava.cpp"), Rel(Matching, "d_a_obj_utajima", "REL/d/a/obj/d_a_obj_utajima.cpp"), Rel( - NonMatching, "d_a_obj_utajima_island", "REL/d/a/obj/d_a_obj_utajima_island.cpp" + Matching, "d_a_obj_utajima_island", "REL/d/a/obj/d_a_obj_utajima_island.cpp" ), Rel(Matching, "d_a_obj_utajima_lv2", "REL/d/a/obj/d_a_obj_utajima_lv2.cpp"), Rel( diff --git a/include/d/a/d_a_base.h b/include/d/a/d_a_base.h index bf7fbb9c..2be88e75 100644 --- a/include/d/a/d_a_base.h +++ b/include/d/a/d_a_base.h @@ -206,7 +206,7 @@ public: /* 8002d600 */ void FUN_8002d600(); /* 8002d630 */ void FUN_8002d630(); /* 8002d6d0 */ void FUN_8002d6d0(); - /* 8002d710 */ void playSoundEffect1(); + /* 8002d710 */ void playSoundEffect1(u16 effect); /* 8002d740 */ void FUN_8002d740(); /* 8002d770 */ void FUN_8002d770(); /* 8002d7a0 */ void FUN_8002d7a0(); diff --git a/include/d/a/obj/d_a_obj_utajima_island.h b/include/d/a/obj/d_a_obj_utajima_island.h index 0341c753..d4222b48 100644 --- a/include/d/a/obj/d_a_obj_utajima_island.h +++ b/include/d/a/obj/d_a_obj_utajima_island.h @@ -1,7 +1,14 @@ #ifndef D_A_OBJ_UTAJIMA_ISLAND_H #define D_A_OBJ_UTAJIMA_ISLAND_H +#include "d/a/d_a_base.h" #include "d/a/obj/d_a_obj_base.h" +#include "d/a/obj/d_a_obj_utajima_main_mecha.h" +#include "d/col/bg/d_bg_w.h" +#include "m/m3d/m_smdl.h" +#include "m/m_angle.h" +#include "m/m_vec.h" +#include "nw4r/g3d/g3d_resfile.h" #include "s/s_State.hpp" #include "s/s_StateMgr.hpp" @@ -10,10 +17,42 @@ public: dAcOutajimaIsland_c() : mStateMgr(*this, sStateID::null) {} virtual ~dAcOutajimaIsland_c() {} + virtual bool createHeap() override; + virtual int actorCreate() override; + virtual int actorPostCreate() override; + virtual int actorExecute() override; + + virtual int doDelete() override; + virtual int draw() override; + STATE_FUNC_DECLARE(dAcOutajimaIsland_c, Wait); private: - /* 0x??? */ STATE_MGR_DECLARE(dAcOutajimaIsland_c); + static const f32 floats[5]; + static bool sPlatformsSettled; + void movePlatforms(); + + s32 getParm2() { + return ((params >> 4) & 0xF); + } + + s32 getRingLayer() { + return params & 0xF; + } + + /* 0x330 */ m3d::smdl_c mMdl; + /* 0x34C */ nw4r::g3d::ResFile mRes; + /* 0x350 */ dBgW mBgW; + /* 0x560 */ STATE_MGR_DECLARE(dAcOutajimaIsland_c); + /* 0x59C */ dAcRef_c mMainMechaRef; + /* 0x5A8 */ mVec3_c mInitialPos; + /* 0x5B4 */ mAng3_c mInitialRot; + /* 0x5BA */ u8 mRingLayer; + /* 0x5BB */ u8 mParam2; + /* 0x5BC */ mAng field_0x5BC; + /* 0x5BE */ mAng3_c field_0x5BE; + /* 0x5C4 */ bool mIsMoving; + /* 0x5C5 */ bool mPlaySound; }; #endif diff --git a/include/m/m_angle.h b/include/m/m_angle.h index f291223f..8a8450c3 100644 --- a/include/m/m_angle.h +++ b/include/m/m_angle.h @@ -37,6 +37,20 @@ struct mAng { } s16 mVal; + + static mAng fromDeg(f32 deg) { + return deg * sDegToAng; + } + +private: + static const f32 sHalfCircleDeg; + static const f32 sAngToDeg; + static const f32 sAngToRad; + static const f32 NotSure; + static const f32 sDegToRad; + static const f32 sDegToAng; + static const f32 sRadToAng; + static const f32 sRadToDeg; }; class mAng3_c { diff --git a/include/s/s_Math.h b/include/s/s_Math.h index 753f18b5..52a173ca 100644 --- a/include/s/s_Math.h +++ b/include/s/s_Math.h @@ -12,6 +12,7 @@ BOOL chase(short *value, short target, short stepSize); BOOL chase(int *value, int target, int stepSize); BOOL chase(float *value, float target, float stepSize); BOOL chaseAngle(short *value, short target, short stepSize); +BOOL chaseAngle2(short *value, short target, short stepSize); // Inofficial names float extrapolate(float start, float end, float scale); diff --git a/src/REL/d/a/obj/d_a_obj_utajima_island.cpp b/src/REL/d/a/obj/d_a_obj_utajima_island.cpp index 4cdf3eb8..f2d41c08 100644 --- a/src/REL/d/a/obj/d_a_obj_utajima_island.cpp +++ b/src/REL/d/a/obj/d_a_obj_utajima_island.cpp @@ -1,9 +1,141 @@ #include "d/a/obj/d_a_obj_utajima_island.h" +#include "common.h" +#include "d/a/obj/d_a_obj_base.h" +#include "d/a/obj/d_a_obj_utajima_main_mecha.h" +#include "d/col/bg/d_bg_s.h" +#include "f/f_base.h" +#include "f/f_manager.h" +#include "f/f_profile_name.h" +#include "m/m_angle.h" +#include "nw4r/g3d/g3d_resmdl.h" +#include "s/s_Math.h" +#include "toBeSorted/room_manager.h" + SPECIAL_ACTOR_PROFILE(OBJ_UTAJIMA_ISLAND, dAcOutajimaIsland_c, fProfile::OBJ_UTAJIMA_ISLAND, 0x1D2, 0, 6); +bool dAcOutajimaIsland_c::sPlatformsSettled; + STATE_DEFINE(dAcOutajimaIsland_c, Wait); +// ????? +const f32 dAcOutajimaIsland_c::floats[] = { + 2500.0f, 1400.0f, 100000.0f, 3.67342e-39f, 9.0072003E15f, +}; + +bool dAcOutajimaIsland_c::createHeap() { + mRes = getOarcResFile("IslPuzIslet00"); + RoomManager::bindStageResToFile(&mRes); + RoomManager::bindSkyCmnToResFile(&mRes); + nw4r::g3d::ResMdl m = mRes.GetResMdl("IslPuzIslet00"); + + TRY_CREATE(mMdl.create(m, &heap_allocator, 0x120)); + + void *dzb = getOarcFile("IslPuzIslet00", "dzb/IslPuzIslet00.dzb"); + void *plc = getOarcFile("IslPuzIslet00", "dat/IslPuzIslet00.plc"); + updateMatrix(); + TRY_CREATE(!mBgW.Set((cBgD_t *)dzb, (PLC *)plc, cBgW::MOVE_BG_e, &mWorldMtx, &mScale)); + + return true; +} + +int dAcOutajimaIsland_c::actorCreate() { + mInitialPos = position; + mInitialRot = rotation; + + mRingLayer = getRingLayer(); + mParam2 = getParm2(); + s32 v = getParm2() * 30; + field_0x5BC = mAng::fromDeg(v); + field_0x5BE.x = field_0x5BC; + field_0x5BE.z = 0x88; + field_0x5BE.y = 0x88; + + movePlatforms(); + CREATE_ALLOCATOR(dAcOutajimaIsland_c); + mBgW.SetCrrFunc(dBgS_MoveBGProc_Typical); + dBgS::GetInstance()->Regist(&mBgW, this); + mStateMgr.changeState(StateID_Wait); + mMdl.setPriorityDraw(0x1C, 9); + + mVec3_c min; + mVec3_c max; + mMdl.getBounds(&min, &max); + boundingBox.Set(min, max); + mCullingDistance = 500000.0f; + return SUCCEEDED; +} + +int dAcOutajimaIsland_c::actorPostCreate() { + fBase_c *p = nullptr; + do { + p = fManager_c::searchBaseByProfName(fProfile::OBJ_UTAJIMA_MAIN_MECHA, p); + if (p != nullptr) { + mMainMechaRef.link(static_cast(p)); + } + } while (p != nullptr); + + return SUCCEEDED; +} + +int dAcOutajimaIsland_c::doDelete() { + return SUCCEEDED; +} + +int dAcOutajimaIsland_c::actorExecute() { + mStateMgr.executeState(); + updateMatrix(); + mMdl.setLocalMtx(mWorldMtx); + mBgW.Move(); + return SUCCEEDED; +} + +int dAcOutajimaIsland_c::draw() { + drawModelType1(&mMdl); + return SUCCEEDED; +} + void dAcOutajimaIsland_c::initializeState_Wait() {} -void dAcOutajimaIsland_c::executeState_Wait() {} +void dAcOutajimaIsland_c::executeState_Wait() { + movePlatforms(); + if (mIsMoving) { + mOldPosition.y += 1.0f; + mPlaySound = true; + sPlatformsSettled = false; + } + + if (mPlaySound) { + if (mRingLayer == 1) { + playSoundEffect1(0xC6E); + } else if (mRingLayer == 2) { + playSoundEffect1(0xC6F); + } else if (mRingLayer == 3) { + playSoundEffect1(0xC70); + } + + if (mOldPosition == position) { + mPlaySound = false; + if (mParam2 == 0 && !sPlatformsSettled) { + playSound(0xC71); + sPlatformsSettled = true; + } + } + } +} void dAcOutajimaIsland_c::finalizeState_Wait() {} + +void dAcOutajimaIsland_c::movePlatforms() { + // What is going on here? + s32 diff = field_0x5BC - field_0x5BE.x; + if (mAng(diff) > mAng::fromDeg(90.0f)) { + sLib::chase(&field_0x5BE.y.mVal, 0x7FFF, 1); + } else { + sLib::chase(&field_0x5BE.y.mVal, field_0x5BE.z, 1); + } + + sLib::chaseAngle2(&field_0x5BE.x.mVal, field_0x5BC, field_0x5BE.y); + + rotation.y = mInitialRot.y - field_0x5BE.x; + position.z = mInitialPos.z + ((mRingLayer - 1) * 1400.0f + 2500.0f) * rotation.y.cos(); + position.x = mInitialPos.x + ((mRingLayer - 1) * 1400.0f + 2500.0f) * rotation.y.sin(); +} diff --git a/src/d/a/d_a_base.cpp b/src/d/a/d_a_base.cpp index 9995b106..ba38f824 100644 --- a/src/d/a/d_a_base.cpp +++ b/src/d/a/d_a_base.cpp @@ -449,7 +449,7 @@ void dAcBase_c::FUN_8002d600() {} void dAcBase_c::FUN_8002d630() {} void dAcBase_c::FUN_8002d6d0() {} // currently named ActorBase__playSoundEffect1 -void dAcBase_c::playSoundEffect1() {} +void dAcBase_c::playSoundEffect1(u16) {} void dAcBase_c::FUN_8002d740() {} void dAcBase_c::FUN_8002d770() {} void dAcBase_c::FUN_8002d7a0() {} diff --git a/src/m/m_angle.cpp b/src/m/m_angle.cpp index 47912870..5ec73aa3 100644 --- a/src/m/m_angle.cpp +++ b/src/m/m_angle.cpp @@ -1,7 +1,17 @@ #include "m/m_angle.h" +#include "math.h" /** 80575c08 */ -mAng3_c mAng3_c::Zero = mAng3_c::mAng3_c(0, 0, 0); +mAng3_c mAng3_c::Zero = mAng3_c(0, 0, 0); + +const f32 mAng::sHalfCircleDeg = 360.0f / 2; +const f32 mAng::sAngToDeg = 360.0f / (1 << 16); +const f32 mAng::sAngToRad = 2 * M_PI / (1 << 16); +const f32 mAng::NotSure = 2.0f / (1 << 16); +const f32 mAng::sDegToRad = M_PI / 180.0f; +const f32 mAng::sDegToAng = (1 << 16) / 360.0f; +const f32 mAng::sRadToAng = (1 << 16) / (2 * M_PI); +const f32 mAng::sRadToDeg = 180.0f / M_PI; /** 802ee5f0 */ s32 mAng::step(s16 target, s32 steps, s16 max, s16 min) {