ksys/gdt: Add reset wrappers to Manager and CommonFlags

This commit is contained in:
Léo Lam
2020-11-10 22:47:40 +01:00
parent b4178ad2b9
commit fc4536b0d3
6 changed files with 7557 additions and 18 deletions
+6 -5
View File
@@ -53523,12 +53523,12 @@
0x00000071008e4098,getFlag_100enemy_Activated,168,_ZN4ksys3gdt26getFlag_100enemy_ActivatedEb
0x00000071008e4140,getBoolFlag,168,_ZN4ksys3gdt18getFlagGenericBoolENS0_10FlagHandleEb
0x00000071008e41e8,getIntFlag,168,_ZN4ksys3gdt17getFlagGenericS32ENS0_10FlagHandleEb
0x00000071008e4290,gdt::resetS32,276,
0x00000071008e4290,gdt::resetS32,276,_ZN4ksys3gdt8resetS32ENS0_10FlagHandleEb?
0x00000071008e43a4,getFlag_100enemy_IsPlayNow_ActivatedDemo,172,_ZN4ksys3gdt40getFlag_100enemy_IsPlayNow_ActivatedDemoEb
0x00000071008e4450,sub_71008E4450,172,_ZN4ksys3gdt45getFlag_100enemy_KillMasterSwordBaseAttentionEb
0x00000071008e44fc,sub_71008E44FC,180,_ZN4ksys3gdt45setFlag_100enemy_KillMasterSwordBaseAttentionEbb
0x00000071008e45b0,getFlag_100enemy_SwordPower_StartTmp,172,_ZN4ksys3gdt36getFlag_100enemy_SwordPower_StartTmpEb
0x00000071008e465c,sub_71008E465C,276,
0x00000071008e465c,sub_71008E465C,276,_ZN4ksys3gdt10resetStr64ENS0_10FlagHandleEb?
0x00000071008e4770,getFlag_ActorName_SeakSensor_Slot0,152,_ZN4ksys3gdt34getFlag_ActorName_SeakSensor_Slot0EPPKcb
0x00000071008e4808,setFlag_ActorName_SeakSensor_Slot0,212,_ZN4ksys3gdt34setFlag_ActorName_SeakSensor_Slot0ERKN4sead14SafeStringBaseIcEEb
0x00000071008e48dc,resetFlagMaybe_ActorName_SeakSensor_Slot0,24,
@@ -53536,7 +53536,7 @@
0x00000071008e4994,setFlag_AlbumPictureActorName,224,_ZN4ksys3gdt29setFlag_AlbumPictureActorNameERKN4sead14SafeStringBaseIcEEib
0x00000071008e4a74,getFlag_AlbumPictureIndex,180,_ZN4ksys3gdt25getFlag_AlbumPictureIndexEib
0x00000071008e4b28,sub_71008E4B28,192,_ZN4ksys3gdt25setFlag_AlbumPictureIndexEiib
0x00000071008e4be8,sub_71008E4BE8,300,
0x00000071008e4be8,sub_71008E4BE8,300,_ZN4ksys3gdt8resetS32ENS0_10FlagHandleEib?
0x00000071008e4d14,sub_71008E4D14,180,_ZN4ksys3gdt24getFlag_AlbumPictureSizeEib
0x00000071008e4dc8,sub_71008E4DC8,192,
0x00000071008e4e88,getFlag_AlbumSaveDistrictName,160,_ZN4ksys3gdt29getFlag_AlbumSaveDistrictNameEPPKcib
@@ -53547,7 +53547,7 @@
0x00000071008e5234,setFlag_AmiiboItemOnOff,180,_ZN4ksys3gdt23setFlag_AmiiboItemOnOffEbb
0x00000071008e52e8,getFlag_AnimalMaster_Appearance,172,_ZN4ksys3gdt31getFlag_AnimalMaster_AppearanceEb
0x00000071008e5394,sub_71008E5394,172,_ZN4ksys3gdt28getFlag_AoC_HardMode_EnabledEb
0x00000071008e5440,sub_71008E5440,276,
0x00000071008e5440,sub_71008E5440,276,_ZN4ksys3gdt8resetF32ENS0_10FlagHandleEb?
0x00000071008e5554,getFlag_App_Map_ForceSetScaleLevelWhenMiniMap,172,_ZN4ksys3gdt45getFlag_App_Map_ForceSetScaleLevelWhenMiniMapEb
0x00000071008e5600,sub_71008E5600,180,_ZN4ksys3gdt45setFlag_App_Map_ForceSetScaleLevelWhenMiniMapEib
0x00000071008e56b4,sub_71008E56B4,212,_ZN4ksys3gdt32setFlag_App_Map_WarpLocationNameERKN4sead14SafeStringBaseIcEEb
@@ -53906,7 +53906,8 @@
0x00000071008f40ac,sub_71008F40AC,28,
0x00000071008f40c8,sub_71008F40C8,160,_ZN4ksys3gdt25getFlag_MapApp_MapIconPosEPN4sead7Vector3IfEEib
0x00000071008f4168,sub_71008F4168,196,_ZN4ksys3gdt25setFlag_MapApp_MapIconPosERKN4sead7Vector3IfEEib
0x00000071008f422c,sub_71008F422C,328,
0x00000071008f422c,sub_71008F422C,0x1c,
0x00000071008f4248,_ZN4ksys3gdt10resetVec3fENS0_10FlagHandleEib,0x12c,_ZN4ksys3gdt10resetVec3fENS0_10FlagHandleEib?
0x00000071008f4374,sub_71008F4374,160,_ZN4ksys3gdt37getFlag_MapApp_PointGuideInvisibleKeyEPPKcib
0x00000071008f4414,sub_71008F4414,160,_ZN4ksys3gdt28getFlag_MapApp_PointGuidePosEPN4sead7Vector3IfEEib
0x00000071008f44b4,sub_71008F44B4,160,_ZN4ksys3gdt35getFlag_MapApp_PointGuideVisibleKeyEPPKcib
Can't render this file because it is too large.
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+24
View File
@@ -160,4 +160,28 @@ GDT_SET_FLAG_(setVec4f, const sead::Vector4f&)
#undef GDT_SET_FLAG_
#define GDT_RESET_FLAG_(NAME) \
[[gnu::noinline]] inline void NAME(FlagHandle handle, bool debug = false) { \
auto* mgr = Manager::instance(); \
if (mgr) \
mgr->NAME(handle, debug); \
} \
[[gnu::noinline]] inline void NAME(FlagHandle handle, s32 sub_idx, bool debug = false) { \
auto* mgr = Manager::instance(); \
if (mgr) \
mgr->NAME(handle, debug, sub_idx); \
}
GDT_RESET_FLAG_(resetBool)
GDT_RESET_FLAG_(resetS32)
GDT_RESET_FLAG_(resetF32)
GDT_RESET_FLAG_(resetStr)
GDT_RESET_FLAG_(resetStr64)
GDT_RESET_FLAG_(resetStr256)
GDT_RESET_FLAG_(resetVec2f)
GDT_RESET_FLAG_(resetVec3f)
GDT_RESET_FLAG_(resetVec4f)
#undef GDT_SET_FLAG_
} // namespace ksys::gdt
+82 -8
View File
@@ -145,6 +145,30 @@ public:
#undef PROXY_GET_SET_IMPL_
#define PROXY_RESET_IMPL_(NAME) \
bool NAME(s32 idx) { return getBuffer1()->NAME(idx, mRef.mCheckPermissions); } \
bool NAME(s32 idx, s32 sub_idx) { \
return getBuffer1()->NAME(idx, sub_idx, mRef.mCheckPermissions); \
} \
bool NAME(const sead::SafeString& name) { \
return getBuffer1()->NAME(name, mRef.mCheckPermissions); \
} \
bool NAME(const sead::SafeString& name, s32 sub_idx) { \
return getBuffer1()->NAME(name, sub_idx, mRef.mCheckPermissions); \
}
PROXY_RESET_IMPL_(resetBool)
PROXY_RESET_IMPL_(resetS32)
PROXY_RESET_IMPL_(resetF32)
PROXY_RESET_IMPL_(resetStr)
PROXY_RESET_IMPL_(resetStr64)
PROXY_RESET_IMPL_(resetStr256)
PROXY_RESET_IMPL_(resetVec2f)
PROXY_RESET_IMPL_(resetVec3f)
PROXY_RESET_IMPL_(resetVec4f)
#undef PROXY_RESET_IMPL_
private:
friend class TriggerParamRef;
Proxy(const TriggerParamRef& ref, bool param1) : mUseParam1(param1), mRef(ref) {}
@@ -345,16 +369,14 @@ public:
\
bool NAME(TRAITS::WrapperArgType value, FlagHandle handle, bool debug) { \
if (debug) { \
setBool(true, "IsChangedByDebug"); \
mBitFlags.set(BitFlag::_800); \
onChangedByDebug(); \
return NAME##NoCheckForce(TRAITS::convertValue(value), handle); \
} \
return NAME(TRAITS::convertValue(value), handle); \
} \
bool NAME(TRAITS::WrapperArgType value, const sead::SafeString& name, bool debug) { \
if (debug) { \
setBool(true, "IsChangedByDebug"); \
mBitFlags.set(BitFlag::_800); \
onChangedByDebug(); \
return NAME##NoCheckForce(TRAITS::convertValue(value), name); \
} \
return NAME(TRAITS::convertValue(value), name); \
@@ -362,8 +384,7 @@ public:
\
bool NAME(TRAITS::WrapperArgType value, FlagHandle handle, bool debug, s32 sub_idx) { \
if (debug) { \
setBool(true, "IsChangedByDebug"); \
mBitFlags.set(BitFlag::_800); \
onChangedByDebug(); \
return NAME##NoCheckForce(TRAITS::convertValue(value), handle, sub_idx); \
} \
return NAME(TRAITS::convertValue(value), handle, sub_idx); \
@@ -371,8 +392,7 @@ public:
bool NAME(TRAITS::WrapperArgType value, const sead::SafeString& name, bool debug, \
s32 sub_idx) { \
if (debug) { \
setBool(true, "IsChangedByDebug"); \
mBitFlags.set(BitFlag::_800); \
onChangedByDebug(); \
return NAME##NoCheckForce(TRAITS::convertValue(value), name, sub_idx); \
} \
return NAME(TRAITS::convertValue(value), name, sub_idx); \
@@ -390,6 +410,55 @@ public:
#undef GDT_SET_
#define GDT_RESET_(NAME) \
KSYS_ALWAYS_INLINE bool NAME##_(FlagHandle handle, bool debug) { \
if (mBitFlags.isOn(BitFlag::_40000)) \
return false; \
return unwrapHandle<false>( \
handle, debug, [&](u32 idx, TriggerParamRef& ref) { return ref.get().NAME(idx); }); \
} \
inline bool NAME(FlagHandle handle) { return NAME##_(handle, false); } \
inline bool NAME##NoCheck(FlagHandle handle) { return NAME##_(handle, true); } \
\
KSYS_ALWAYS_INLINE bool NAME##_(FlagHandle handle, bool debug, s32 sub_idx) { \
if (mBitFlags.isOn(BitFlag::_40000)) \
return false; \
return unwrapHandle<false>(handle, debug, [&](u32 idx, TriggerParamRef& ref) { \
return ref.get().NAME(idx, sub_idx); \
}); \
} \
inline bool NAME(FlagHandle handle, s32 sub_idx) { return NAME##_(handle, false, sub_idx); } \
inline bool NAME##NoCheck(FlagHandle handle, s32 sub_idx) { \
return NAME##_(handle, true, sub_idx); \
} \
\
inline bool NAME(FlagHandle handle, bool debug) { \
if (debug) { \
onChangedByDebug(); \
return NAME##NoCheck(handle); \
} \
return NAME(handle); \
} \
inline bool NAME(FlagHandle handle, bool debug, s32 sub_idx) { \
if (debug) { \
onChangedByDebug(); \
return NAME##NoCheck(handle, sub_idx); \
} \
return NAME(handle, sub_idx); \
}
GDT_RESET_(resetBool)
GDT_RESET_(resetS32)
GDT_RESET_(resetF32)
GDT_RESET_(resetStr)
GDT_RESET_(resetStr64)
GDT_RESET_(resetStr256)
GDT_RESET_(resetVec2f)
GDT_RESET_(resetVec3f)
GDT_RESET_(resetVec4f)
#undef GDT_RESET_
void init(sead::Heap* heap, sead::Framework* framework);
void addReinitCallback(ReinitSignal::Slot& slot);
@@ -467,6 +536,11 @@ private:
unwrapHandle<Write, false>(handle, fn);
}
void onChangedByDebug() {
setBool(true, "IsChangedByDebug");
mBitFlags.set(BitFlag::_800);
}
void loadGameData(const sead::SafeString& path);
void loadShopGameDataInfo(const sead::SafeString& path);
void unloadResources();
+11 -5
View File
@@ -249,7 +249,8 @@ s32 getFlagGenericS32(FlagHandle handle, bool debug = false);
f"void getFlag_{name}({info.arg_type}* value, s32 idx, bool debug = false);\n")
# Setter
f.write(f"void setFlag_{name}({info.get_setter_arg_type()} value, s32 idx, bool debug = false);\n")
# TODO: resetter (see resetFlag_ActorName_SeakSensor_Slot0 for an example)
# Resetter
f.write(f"void resetFlag_{name}(s32 idx, bool debug = false);\n")
else:
# Getter
if info.is_value_inline():
@@ -260,8 +261,8 @@ s32 getFlagGenericS32(FlagHandle handle, bool debug = false);
f"void getFlag_{name}({info.arg_type}* value, bool debug = false);\n")
# Setter
f.write(f"void setFlag_{name}({info.get_setter_arg_type()} value, bool debug = false);\n")
# TODO: resetter (see resetFlag_ActorName_SeakSensor_Slot0 for an example)
# Resetter
f.write(f"void resetFlag_{name}(bool debug = false);\n")
f.write("""\
@@ -299,7 +300,10 @@ s32 getFlagGenericS32(FlagHandle handle, bool debug) { return getS32(handle, deb
f.write(
f"void setFlag_{name}({info.get_setter_arg_type()} value, s32 idx, bool debug) {{ "
f"{info.get_setter_fn_name()}(value, flag_{name}(), idx, debug); }}\n")
# TODO: resetter (see resetFlag_ActorName_SeakSensor_Slot0 for an example)
# Resetter
f.write(
f"void resetFlag_{name}(s32 idx, bool debug) {{ "
f"re{info.get_setter_fn_name()}(flag_{name}(), idx, debug); }}\n")
else:
# Getter
if info.is_value_inline():
@@ -312,7 +316,9 @@ s32 getFlagGenericS32(FlagHandle handle, bool debug) { return getS32(handle, deb
f.write(
f"void setFlag_{name}({info.get_setter_arg_type()} value, bool debug) {{ "
f"{info.get_setter_fn_name()}(value, flag_{name}(), debug); }}\n")
# TODO: resetter (see resetFlag_ActorName_SeakSensor_Slot0 for an example)
# Resetter
f.write(
f"void resetFlag_{name}(bool debug) {{ re{info.get_setter_fn_name()}(flag_{name}(), debug); }}\n")
f.write("""\