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
No known key found for this signature in database
GPG Key ID: 0DF30F9081000741
6 changed files with 7557 additions and 18 deletions

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

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

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();

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("""\