diff --git a/AmongUsMenu.vcxproj b/AmongUsMenu.vcxproj
index a34ea2f9..d2ae7227 100644
--- a/AmongUsMenu.vcxproj
+++ b/AmongUsMenu.vcxproj
@@ -63,7 +63,7 @@
-
+
@@ -666,4 +666,4 @@ git rev-parse --abbrev-ref HEAD >> gitparams.h
-
+
\ No newline at end of file
diff --git a/AmongUsMenu.vcxproj.filters b/AmongUsMenu.vcxproj.filters
index 42b920dc..146339d5 100644
--- a/AmongUsMenu.vcxproj.filters
+++ b/AmongUsMenu.vcxproj.filters
@@ -1,4 +1,4 @@
-
+
@@ -67,7 +67,7 @@
hooks
-
+
hooks
diff --git a/appdata/il2cpp-classes.h b/appdata/il2cpp-classes.h
index 3a6909b6..fd07fb74 100644
--- a/appdata/il2cpp-classes.h
+++ b/appdata/il2cpp-classes.h
@@ -5,7 +5,6 @@ DO_APP_CLASS(GameData, "Assembly-CSharp, GameData");
DO_APP_CLASS(Palette, "Assembly-CSharp, Palette");
DO_APP_CLASS(PlayerControl, "Assembly-CSharp, PlayerControl");
DO_APP_CLASS(ShipStatus, "Assembly-CSharp, ShipStatus");
-DO_APP_CLASS(GameOptionsData, "Assembly-CSharp, GameOptionsData");
DO_APP_CLASS(Camera, "UnityEngine.CoreModule, UnityEngine.Camera");
DO_APP_CLASS(LobbyBehaviour, "Assembly-CSharp, LobbyBehaviour");
//DO_APP_CLASS(SaveManager, "Assembly-CSharp, SaveManager");
diff --git a/appdata/il2cpp-functions.h b/appdata/il2cpp-functions.h
index ecc7949d..6e71f5b8 100644
--- a/appdata/il2cpp-functions.h
+++ b/appdata/il2cpp-functions.h
@@ -42,7 +42,7 @@ DO_APP_FUNC(float, AirshipStatus_CalculateLightRadius, (AirshipStatus* __this, G
DO_APP_FUNC(bool, AutoOpenDoor_DoUpdate, (AutoOpenDoor* __this, float dt, MethodInfo* method), "Assembly-CSharp, System.Boolean AutoOpenDoor::DoUpdate(System.Single)");
-DO_APP_FUNC(void, NoShadowBehaviour_LateUpdate, (NoShadowBehaviour* __this, MethodInfo* method), "Assembly-CSharp, System.Void NoShadowBehaviour::LateUpdate()");
+//DO_APP_FUNC(void, NoShadowBehaviour_LateUpdate, (NoShadowBehaviour* __this, MethodInfo* method), "Assembly-CSharp, System.Void NoShadowBehaviour::LateUpdate()");
DO_APP_FUNC(void, NoShadowBehaviour_SetMaskFunction, (NoShadowBehaviour* __this, int32_t func, MethodInfo* method), "Assembly-CSharp, System.Void NoShadowBehaviour::SetMaskFunction(System.Int32)");
DO_APP_FUNC(Vector3, Camera_ScreenToWorldPoint, (Camera* __this, Vector3 position, MethodInfo* method), "UnityEngine.CoreModule, UnityEngine.Vector3 UnityEngine.Camera::ScreenToWorldPoint(UnityEngine.Vector3)");
@@ -56,9 +56,6 @@ DO_APP_FUNC(GameData_PlayerInfo*, GameData_GetPlayerById, (GameData* __this, uin
DO_APP_FUNC(void, GameObject_SetActive, (GameObject* __this, bool value, MethodInfo* method), "UnityEngine.CoreModule, System.Void UnityEngine.GameObject::SetActive(System.Boolean)");
-DO_APP_FUNC(GameOptionsData*, GameOptionsData_Deserialize, (BinaryReader* reader, MethodInfo* method), "Assembly-CSharp, GameOptionsData GameOptionsData::Deserialize(System.IO.BinaryReader)");
-DO_APP_FUNC(GameOptionsData*, GameOptionsData_Deserialize_1, (MessageReader* reader, MethodInfo* method), "Assembly-CSharp, GameOptionsData GameOptionsData::Deserialize(Hazel.MessageReader)");
-
DO_APP_FUNC(void, KeyboardJoystick_Update, (KeyboardJoystick* __this, MethodInfo* method), "Assembly-CSharp, System.Void KeyboardJoystick::Update()");
DO_APP_FUNC(void, ScreenJoystick_FixedUpdate, (ScreenJoystick* __this, MethodInfo* method), "Assembly-CSharp, System.Void ScreenJoystick::FixedUpdate()");
@@ -84,14 +81,14 @@ DO_APP_FUNC(void, PlayerControl_CompleteTask, (PlayerControl* __this, uint32_t i
DO_APP_FUNC(void, PlayerControl_FixedUpdate, (PlayerControl* __this, MethodInfo* method), "Assembly-CSharp, System.Void PlayerControl::FixedUpdate()");
DO_APP_FUNC(GameData_PlayerInfo*, PlayerControl_get_Data, (PlayerControl* __this, MethodInfo* method), "Assembly-CSharp, GameData.PlayerInfo PlayerControl::get_Data()");
DO_APP_FUNC(Vector2, PlayerControl_GetTruePosition, (PlayerControl* __this, MethodInfo* method), "Assembly-CSharp, UnityEngine.Vector2 PlayerControl::GetTruePosition()");
-DO_APP_FUNC(void, PlayerControl_RpcSyncSettings, (PlayerControl* __this, GameOptionsData* gameOptions, MethodInfo* method), "Assembly-CSharp, System.Void PlayerControl::RpcSyncSettings(GameOptionsData)");
+DO_APP_FUNC(void, PlayerControl_RpcSyncSettings, (PlayerControl* __this, Byte__Array* optionsByteArray, MethodInfo* method), "Assembly-CSharp, System.Void PlayerControl::RpcSyncSettings(System.Byte[])");
DO_APP_FUNC(void, PlayerControl_RpcPlayAnimation, (PlayerControl* __this, uint8_t animType, MethodInfo* method), "Assembly-CSharp, System.Void PlayerControl::RpcPlayAnimation(System.Byte)");
DO_APP_FUNC(void, PlayerControl_CmdReportDeadBody, (PlayerControl* __this, GameData_PlayerInfo* target, MethodInfo* method), "Assembly-CSharp, System.Void PlayerControl::CmdReportDeadBody(GameData.PlayerInfo)");
DO_APP_FUNC(void, PlayerControl_MurderPlayer, (PlayerControl* __this, PlayerControl* target, MethodInfo* method), "Assembly-CSharp, System.Void PlayerControl::MurderPlayer(PlayerControl)");
DO_APP_FUNC(void, PlayerControl_RpcMurderPlayer, (PlayerControl* __this, PlayerControl* target, MethodInfo* method), "Assembly-CSharp, System.Void PlayerControl::RpcMurderPlayer(PlayerControl)");
DO_APP_FUNC(void, PlayerControl_ReportDeadBody, (PlayerControl* __this, GameData_PlayerInfo* target, MethodInfo* method), "Assembly-CSharp, System.Void PlayerControl::ReportDeadBody(GameData.PlayerInfo)");
DO_APP_FUNC(void, PlayerControl_StartMeeting, (PlayerControl* __this, GameData_PlayerInfo* target, MethodInfo* method), "Assembly-CSharp, System.Void PlayerControl::StartMeeting(GameData.PlayerInfo)");
-DO_APP_FUNC(void, PlayerControl_RpcSetRole, (PlayerControl* __this, RoleTypes__Enum roleType, MethodInfo* method), "Assembly-CSharp, System.Void PlayerControl::RpcSetRole(RoleTypes)");
+DO_APP_FUNC(void, PlayerControl_RpcSetRole, (PlayerControl* __this, RoleTypes__Enum roleType, MethodInfo* method), "Assembly-CSharp, System.Void PlayerControl::RpcSetRole(AmongUs.GameOptions.RoleTypes)");
DO_APP_FUNC(void, PlayerControl_RpcSetScanner, (PlayerControl* __this, bool value, MethodInfo* method), "Assembly-CSharp, System.Void PlayerControl::RpcSetScanner(System.Boolean)");
DO_APP_FUNC(void, PlayerControl_CmdCheckColor, (PlayerControl* __this, uint8_t bodyColor, MethodInfo* method), "Assembly-CSharp, System.Void PlayerControl::CmdCheckColor(System.Byte)");
DO_APP_FUNC(void, PlayerControl_RpcSetColor, (PlayerControl* __this, uint8_t bodyColor, MethodInfo* method), "Assembly-CSharp, System.Void PlayerControl::RpcSetColor(System.Byte)");
@@ -127,7 +124,6 @@ DO_APP_FUNC(void, Vent_EnterVent, (Vent* __this, PlayerControl* pc, MethodInfo*
DO_APP_FUNC(void, Vent_ExitVent, (Vent* __this, PlayerControl* pc, MethodInfo* method), "Assembly-CSharp, System.Void Vent::ExitVent(PlayerControl)");
DO_APP_FUNC(void, HudManager_Update, (HudManager* __this, MethodInfo* method), "Assembly-CSharp, System.Void HudManager::Update()");
-DO_APP_FUNC(void, HudManager_ShowMap, (HudManager* __this, Action_1_MapBehaviour_* mapAction, MethodInfo* method), "Assembly-CSharp, System.Void HudManager::ShowMap(System.Action)");
DO_APP_FUNC(void, HudManager_SetHudActive, (HudManager* __this, bool isActive, MethodInfo* method), "Assembly-CSharp, System.Void HudManager::SetHudActive(System.Boolean)");
DO_APP_FUNC(void, ChatController_AddChat, (ChatController* __this, PlayerControl* sourcePlayer, String* chatText, MethodInfo* method), "Assembly-CSharp, System.Void ChatController::AddChat(PlayerControl, System.String)");
DO_APP_FUNC(void, ChatController_SetVisible, (ChatController* __this, bool visible, MethodInfo* method), "Assembly-CSharp, System.Void ChatController::SetVisible(System.Boolean)");
@@ -196,20 +192,13 @@ DO_APP_FUNC(void, TMP_Text_set_text, (TMP_Text* __this, String* value, MethodInf
DO_APP_FUNC(Color32, Color32_op_Implicit, (Color c, MethodInfo* method), "UnityEngine.CoreModule, UnityEngine.Color32 UnityEngine.Color32::op_Implicit(UnityEngine.Color)");
DO_APP_FUNC(void, RoleManager_SelectRoles, (RoleManager* __this, MethodInfo* method), "Assembly-CSharp, System.Void RoleManager::SelectRoles()");
-DO_APP_FUNC(void, RoleManager_AssignRolesForTeam, (List_1_GameData_PlayerInfo_* players, RoleOptionsData* opts, RoleTeamTypes__Enum team, int32_t teamMax, Nullable_1_RoleTypes_ defaultRole, MethodInfo* method), "Assembly-CSharp, System.Void RoleManager::AssignRolesForTeam(System.Collections.Generic.List, RoleOptionsData, RoleTeamTypes, System.Int32, System.Nullable)");
-DO_APP_FUNC(void, RoleManager_AssignRolesFromList, (List_1_GameData_PlayerInfo_* players, int32_t teamMax, List_1_RoleTypes_* roleList, int32_t* rolesAssigned, MethodInfo* method), "Assembly-CSharp, System.Void RoleManager::AssignRolesFromList(System.Collections.Generic.List, System.Int32, System.Collections.Generic.List, System.Int32&)");
+//DO_APP_FUNC(void, RoleManager_AssignRolesForTeam, (List_1_GameData_PlayerInfo_* players, RoleOptionsData* opts, RoleTeamTypes__Enum team, int32_t teamMax, Nullable_1_RoleTypes_ defaultRole, MethodInfo* method), "Assembly-CSharp, System.Void RoleManager::AssignRolesForTeam(System.Collections.Generic.List, RoleOptionsData, RoleTeamTypes, System.Int32, System.Nullable)");
+//DO_APP_FUNC(void, RoleManager_AssignRolesFromList, (List_1_GameData_PlayerInfo_* players, int32_t teamMax, List_1_RoleTypes_* roleList, int32_t* rolesAssigned, MethodInfo* method), "Assembly-CSharp, System.Void RoleManager::AssignRolesFromList(System.Collections.Generic.List, System.Int32, System.Collections.Generic.List, System.Int32&)");
DO_APP_FUNC(void, InnerNetClient_EnqueueDisconnect, (InnerNetClient* __this, DisconnectReasons__Enum reason, String* stringReason, MethodInfo* method), "Assembly-CSharp, System.Void InnerNet.InnerNetClient::EnqueueDisconnect(DisconnectReasons, System.String)");
DO_APP_FUNC(void, InnerNetClient_DisconnectInternal, (InnerNetClient* __this, DisconnectReasons__Enum reason, String* stringReason, MethodInfo* method), "Assembly-CSharp, System.Void InnerNet.InnerNetClient::DisconnectInternal(DisconnectReasons, System.String)");
DO_APP_FUNC(void, PlayerPhysics_FixedUpdate, (PlayerPhysics* __this, MethodInfo* method), "Assembly-CSharp, System.Void PlayerPhysics::FixedUpdate()");
-// deprecated
-DO_APP_FUNC(String*, SaveManager_get_PlayerName, (MethodInfo* method), "Assembly-CSharp, System.String SaveManager::get_PlayerName()");
-// deprecated
-DO_APP_FUNC(void, SaveManager_set_PlayerName, (String* value, MethodInfo* method), "Assembly-CSharp, System.Void SaveManager::set_PlayerName(System.String)");
-// deprecated
-DO_APP_FUNC(bool, SaveManager_GetPurchase, (String* itemKey, String* bundleKey, MethodInfo* method), "Assembly-CSharp, System.Boolean SaveManager::GetPurchase(System.String, System.String)");
-
DO_APP_FUNC(void, PlayerControl_TurnOnProtection, (PlayerControl* __this, bool visible, int32_t colorId, MethodInfo* method), "Assembly-CSharp, System.Void PlayerControl::TurnOnProtection(System.Boolean, System.Int32)");
DO_APP_FUNC(void, PlayerControl_RemoveProtection, (PlayerControl* __this, MethodInfo* method), "Assembly-CSharp, System.Void PlayerControl::RemoveProtection()");
@@ -228,4 +217,9 @@ DO_APP_FUNC(void, PlayerStorageManager_OnReadPlayerPrefsComplete, (PlayerStorage
DO_APP_FUNC(PlayerData*, DataManager_get_Player, (MethodInfo* method), "Assembly-CSharp, AmongUs.Data.Player.PlayerData AmongUs.Data.DataManager::get_Player()");
DO_APP_FUNC(String*, PlayerCustomizationData_get_Name, (PlayerCustomizationData* __this, MethodInfo* method), "Assembly-CSharp, System.String AmongUs.Data.Player.PlayerCustomizationData::get_Name()");
DO_APP_FUNC(void, PlayerCustomizationData_set_Name, (PlayerCustomizationData* __this, String* value, MethodInfo* method), "Assembly-CSharp, System.Void AmongUs.Data.Player.PlayerCustomizationData::set_Name(System.String)");
-DO_APP_FUNC(bool, PlayerPurchasesData_GetPurchase, (PlayerPurchasesData* __this, String* itemKey, String* bundleKey, MethodInfo* method), "Assembly-CSharp, System.Boolean PlayerPurchasesData::GetPurchase(System.String, System.String)");
\ No newline at end of file
+DO_APP_FUNC(bool, PlayerPurchasesData_GetPurchase, (PlayerPurchasesData* __this, String* itemKey, String* bundleKey, MethodInfo* method), "Assembly-CSharp, System.Boolean PlayerPurchasesData::GetPurchase(System.String, System.String)");
+
+// 2022.12.08e
+DO_APP_FUNC(void, GameOptionsManager_set_CurrentGameOptions, (GameOptionsManager* __this, IGameOptions* value, MethodInfo* method), "Assembly-CSharp, System.Void GameOptionsManager::set_CurrentGameOptions(AmongUs.GameOptions.IGameOptions)");
+DO_APP_FUNC(GameManager*, GameManager_get_Instance, (MethodInfo* method), "Assembly-CSharp, GameManager GameManager::get_Instance()");
+DO_APP_FUNC(LogicOptions*, GameManager_get_LogicOptions, (GameManager* __this, MethodInfo* method), "Assembly-CSharp, LogicOptions GameManager::get_LogicOptions()");
\ No newline at end of file
diff --git a/appdata/il2cpp-types.h b/appdata/il2cpp-types.h
index 4546f230..0fb3b6ec 100644
--- a/appdata/il2cpp-types.h
+++ b/appdata/il2cpp-types.h
@@ -4022,7 +4022,7 @@ namespace app
int32_t m_spriteIndex;
int32_t m_spriteAnimationID;
bool m_ignoreActiveState;
- struct TMP_Text_TextBackingContainer m_TextBackingArray;
+ struct TMP_Text_TextBackingContainer m_TextBackingArray;
void* k_Power;
};
@@ -4169,9 +4169,8 @@ namespace app
VirtualInvokeData InternalUpdate;
};
- struct TMP_Text__StaticFields
- {
-
+ struct TMP_Text__StaticFields {
+ // ...
};
struct TMP_Text__Class
@@ -4495,13 +4494,11 @@ namespace app
#pragma endregion
#pragma region FullAccount
- struct FullAccount__Fields
- {
+ struct FullAccount__Fields {
struct MonoBehaviour__Fields _;
struct GameObject* randomizeNameButton;
struct GameObject* editNameButton;
- void* linkUnlinkAccountsButton;
- struct GameObject* goOfflineButton;
+ struct GameObject* manageAccount;
};
struct FullAccount
@@ -4658,6 +4655,7 @@ namespace app
struct SpriteRenderer* HighlightedFX;
struct TextMeshPro* NameText;
struct TextMeshPro* LevelNumberText;
+ struct TextMeshPro* ColorBlindName;
bool AnimateButtonsFromLeft;
bool AmDead;
bool DidReport;
@@ -4934,6 +4932,7 @@ namespace app
void* EmergencyOverlay;
void* ReportOverlay;
void* MeetingBackground;
+ void* EmergencyButton;
struct Vector2 InitialSpawnCenter;
struct Vector2 MeetingSpawnCenter;
struct Vector2 MeetingSpawnCenter2;
@@ -4973,7 +4972,6 @@ namespace app
#else
int32_t Type;
#endif
- bool _ShouldCheckForGameEnd_k__BackingField;
float _HideCountdown_k__BackingField;
void* _CosmeticsCache_k__BackingField;
void* logger;
@@ -5573,6 +5571,10 @@ namespace app
StatsScientistChargesGained = 0x00000604,
StatsGuardianAngelCrewmatesProtected = 0x00000605,
StatsShapeshifterShiftedKills = 0x00000606,
+ CrewmateGhostRole = 0x00000607,
+ ImpostorGhostRole = 0x00000608,
+ HauntAbilityName = 0x00000609,
+ SeekButton = 0x0000060a,
SanctionDuration = 0x000006a4,
SanctionPermanent = 0x000006a5,
SanctionConduct = 0x000006a6,
@@ -5602,6 +5604,24 @@ namespace app
FeaturedCubes = 0x0000076f,
BugReportPopUpAttachScreenshotDesc = 0x00000770,
UserIdTokenError = 0x00000771,
+ NewGameMode = 0x00000772,
+ NewModeInfo = 0x00000773,
+ HideSeekHowToPlayTitleOne = 0x00000774,
+ HideSeekHowToPlayCaptionOne = 0x00000775,
+ HideSeekHowToPlayCaptionTwo = 0x00000776,
+ HideSeekHowToPlayCaptionThree = 0x00000777,
+ HideSeekHowToPlayPageOne = 0x00000778,
+ HideSeekHowToPlayImpostorOne = 0x00000779,
+ HideSeekHowToPlaySubtextOne = 0x0000077a,
+ HideSeekHowToPlayCrewmateInfoOne = 0x0000077b,
+ HideSeekHowToPlayCrewmateInfoTwo = 0x0000077c,
+ HideSeekHowToPlayImpostorInfoOne = 0x0000077d,
+ HideSeekHowToPlayFlashlightDefault = 0x0000077e,
+ HideSeekHowToPlayFinalHide = 0x0000077f,
+ HideSeekHowToPlayFlashlightMobile = 0x00000780,
+ HideSeekHowToPlayFlashlightSwitch = 0x00000781,
+ HideSeekHowToPlayFlashlightConsoles = 0x00000782,
+ HideSeekHowToPlayFlashlightPlayStation = 0x00000783,
QCLocationLaptop = 0x000007d0,
QCLocationSkeld = 0x000007d1,
QCLocationMira = 0x000007d2,
@@ -5933,19 +5953,54 @@ namespace app
MaxVentUses = 0x00000a8c,
MaxTimeInVent = 0x00000a8d,
MinCrewmatesForVitals = 0x00000a8e,
- FinalEscapeTime = 0x00000a8f,
+ EscapeTime = 0x00000a8f,
AllTasksComplete = 0x00000a90,
EscapePrompt = 0x00000a91,
- CrewmateFlashlightFov = 0x00000a92,
- ImpostorFlashlightFov = 0x00000a93,
+ CrewmateFlashlightSize = 0x00000a92,
+ ImpostorFlashlightSize = 0x00000a93,
CrewmateLeadTime = 0x00000a94,
CrewmadeHideBlurb = 0x00000a95,
ImpostorKillBlurb = 0x00000a96,
HideCountdown = 0x00000a97,
- MusicDistance = 0x00000a98,
+ ScaryMusicDistance = 0x00000a98,
ShortTaskTimeValue = 0x00000a99,
LongTaskTimeValue = 0x00000a9a,
CommonTaskTimeValue = 0x00000a9b,
+ UseFlashlight = 0x00000a9c,
+ FinalEscapeTime = 0x00000a9d,
+ VeryScaryMusicDistance = 0x00000a9e,
+ SeekerFinalSpeed = 0x00000a9f,
+ SeekerFinalVents = 0x00000aa0,
+ SeekerFinalMap = 0x00000aa1,
+ CrewmateVentCooldown = 0x00000aa2,
+ SeekerPings = 0x00000aa3,
+ MaxPingTime = 0x00000aa4,
+ ShowPingTime = 0x00000aa5,
+ MinPingTime = 0x00000aa6,
+ ShowCrewmateNames = 0x00000aa7,
+ ShowImpostorNames = 0x00000aa8,
+ HideActionButton = 0x00000aa9,
+ RuleOneCrewmates = 0x00000aaa,
+ RuleTwoCrewmates = 0x00000aab,
+ RuleThreeCrewmates = 0x00000aac,
+ RuleOneImpostor = 0x00000aad,
+ RuleTwoImpostor = 0x00000aae,
+ RuleThreeImpostor = 0x00000aaf,
+ RuleOneCrewmatesTitle = 0x00000ab0,
+ RuleTwoCrewmatesTitle = 0x00000ab1,
+ RuleThreeCrewmatesTitle = 0x00000ab2,
+ RuleOneImpostorTitle = 0x00000ab3,
+ RuleTwoImpostorTitle = 0x00000ab4,
+ RoundRobin = 0x00000ab5,
+ OptionUnavailablePublicLobby = 0x00000ab6,
+ StatsHidenSeekGamesCrewmateSurvived = 0x00000ab7,
+ StatsHidenSeekTimesVented = 0x00000ab8,
+ StatsTimesPettedPet = 0x00000ab9,
+ StatsImpostorKills_HideAndSeek = 0x00000aba,
+ StatsFastestCrewmateWin_HideAndSeek = 0x00000abb,
+ StatsFastestImpostorWin_HideAndSeek = 0x00000abc,
+ StatsHideAndSeekImpostorVictory = 0x00000abd,
+ StatsHideAndSeekCrewmateVictory = 0x00000abe,
AmongUsFriends = 0x00000af0,
FriendsGuestWarning = 0x00000af1,
PlatformFriends = 0x00000af2,
@@ -5999,6 +6054,9 @@ namespace app
FriendListUnavailable = 0x00000b22,
SignInIssueTitle = 0x00000b23,
SignInIssueText = 0x00000b24,
+ Ghost = 0x00000b25,
+ CurrentlyHaunting = 0x00000b26,
+ RestorePurchases = 0x00000b27,
QCAccIsRole = 0x00000bb8,
QCAccIsRoleNeg = 0x00000bb9,
QCAccShapeshited = 0x00000bba,
@@ -6057,6 +6115,24 @@ namespace app
ConfirmDeleteAccounts = 0x00000c88,
ConfirmDeleteAccountsEmpty = 0x00000c89,
AccountRequestDelete = 0x00000c8a,
+ HasBeenKilled = 0x00000c8b,
+ GameType = 0x00000dac,
+ GameTypeError = 0x00000dad,
+ GameTypeClassic = 0x00000dae,
+ GameTypeHideAndSeek = 0x00000daf,
+ PetAction = 0x00000db0,
+ CreateLabel = 0x00000db1,
+ TagFiltersTitle = 0x00000db2,
+ TagFiltersHelpFindGame = 0x00000db3,
+ TagFiltersHelpCreate = 0x00000db4,
+ TagsFilteredSingular = 0x00000db5,
+ TagsFilteredPlural = 0x00000db6,
+ TagsAppliedSingular = 0x00000db7,
+ TagsAppliedPlural = 0x00000db8,
+ DefaultFilterTag_FirstTime = 0x00000db9,
+ DefaultFilterTag_Casual = 0x00000dba,
+ DefaultFilterTag_Serious = 0x00000dbb,
+ DefaultFilterTag_Expert = 0x00000dbc,
};
#else
@@ -6606,6 +6682,10 @@ namespace app
StringNames__Enum_StatsScientistChargesGained = 0x00000604,
StringNames__Enum_StatsGuardianAngelCrewmatesProtected = 0x00000605,
StringNames__Enum_StatsShapeshifterShiftedKills = 0x00000606,
+ StringNames__Enum_CrewmateGhostRole = 0x00000607,
+ StringNames__Enum_ImpostorGhostRole = 0x00000608,
+ StringNames__Enum_HauntAbilityName = 0x00000609,
+ StringNames__Enum_SeekButton = 0x0000060a,
StringNames__Enum_SanctionDuration = 0x000006a4,
StringNames__Enum_SanctionPermanent = 0x000006a5,
StringNames__Enum_SanctionConduct = 0x000006a6,
@@ -6635,6 +6715,24 @@ namespace app
StringNames__Enum_FeaturedCubes = 0x0000076f,
StringNames__Enum_BugReportPopUpAttachScreenshotDesc = 0x00000770,
StringNames__Enum_UserIdTokenError = 0x00000771,
+ StringNames__Enum_NewGameMode = 0x00000772,
+ StringNames__Enum_NewModeInfo = 0x00000773,
+ StringNames__Enum_HideSeekHowToPlayTitleOne = 0x00000774,
+ StringNames__Enum_HideSeekHowToPlayCaptionOne = 0x00000775,
+ StringNames__Enum_HideSeekHowToPlayCaptionTwo = 0x00000776,
+ StringNames__Enum_HideSeekHowToPlayCaptionThree = 0x00000777,
+ StringNames__Enum_HideSeekHowToPlayPageOne = 0x00000778,
+ StringNames__Enum_HideSeekHowToPlayImpostorOne = 0x00000779,
+ StringNames__Enum_HideSeekHowToPlaySubtextOne = 0x0000077a,
+ StringNames__Enum_HideSeekHowToPlayCrewmateInfoOne = 0x0000077b,
+ StringNames__Enum_HideSeekHowToPlayCrewmateInfoTwo = 0x0000077c,
+ StringNames__Enum_HideSeekHowToPlayImpostorInfoOne = 0x0000077d,
+ StringNames__Enum_HideSeekHowToPlayFlashlightDefault = 0x0000077e,
+ StringNames__Enum_HideSeekHowToPlayFinalHide = 0x0000077f,
+ StringNames__Enum_HideSeekHowToPlayFlashlightMobile = 0x00000780,
+ StringNames__Enum_HideSeekHowToPlayFlashlightSwitch = 0x00000781,
+ StringNames__Enum_HideSeekHowToPlayFlashlightConsoles = 0x00000782,
+ StringNames__Enum_HideSeekHowToPlayFlashlightPlayStation = 0x00000783,
StringNames__Enum_QCLocationLaptop = 0x000007d0,
StringNames__Enum_QCLocationSkeld = 0x000007d1,
StringNames__Enum_QCLocationMira = 0x000007d2,
@@ -6966,19 +7064,54 @@ namespace app
StringNames__Enum_MaxVentUses = 0x00000a8c,
StringNames__Enum_MaxTimeInVent = 0x00000a8d,
StringNames__Enum_MinCrewmatesForVitals = 0x00000a8e,
- StringNames__Enum_FinalEscapeTime = 0x00000a8f,
+ StringNames__Enum_EscapeTime = 0x00000a8f,
StringNames__Enum_AllTasksComplete = 0x00000a90,
StringNames__Enum_EscapePrompt = 0x00000a91,
- StringNames__Enum_CrewmateFlashlightFov = 0x00000a92,
- StringNames__Enum_ImpostorFlashlightFov = 0x00000a93,
+ StringNames__Enum_CrewmateFlashlightSize = 0x00000a92,
+ StringNames__Enum_ImpostorFlashlightSize = 0x00000a93,
StringNames__Enum_CrewmateLeadTime = 0x00000a94,
StringNames__Enum_CrewmadeHideBlurb = 0x00000a95,
StringNames__Enum_ImpostorKillBlurb = 0x00000a96,
StringNames__Enum_HideCountdown = 0x00000a97,
- StringNames__Enum_MusicDistance = 0x00000a98,
+ StringNames__Enum_ScaryMusicDistance = 0x00000a98,
StringNames__Enum_ShortTaskTimeValue = 0x00000a99,
StringNames__Enum_LongTaskTimeValue = 0x00000a9a,
StringNames__Enum_CommonTaskTimeValue = 0x00000a9b,
+ StringNames__Enum_UseFlashlight = 0x00000a9c,
+ StringNames__Enum_FinalEscapeTime = 0x00000a9d,
+ StringNames__Enum_VeryScaryMusicDistance = 0x00000a9e,
+ StringNames__Enum_SeekerFinalSpeed = 0x00000a9f,
+ StringNames__Enum_SeekerFinalVents = 0x00000aa0,
+ StringNames__Enum_SeekerFinalMap = 0x00000aa1,
+ StringNames__Enum_CrewmateVentCooldown = 0x00000aa2,
+ StringNames__Enum_SeekerPings = 0x00000aa3,
+ StringNames__Enum_MaxPingTime = 0x00000aa4,
+ StringNames__Enum_ShowPingTime = 0x00000aa5,
+ StringNames__Enum_MinPingTime = 0x00000aa6,
+ StringNames__Enum_ShowCrewmateNames = 0x00000aa7,
+ StringNames__Enum_ShowImpostorNames = 0x00000aa8,
+ StringNames__Enum_HideActionButton = 0x00000aa9,
+ StringNames__Enum_RuleOneCrewmates = 0x00000aaa,
+ StringNames__Enum_RuleTwoCrewmates = 0x00000aab,
+ StringNames__Enum_RuleThreeCrewmates = 0x00000aac,
+ StringNames__Enum_RuleOneImpostor = 0x00000aad,
+ StringNames__Enum_RuleTwoImpostor = 0x00000aae,
+ StringNames__Enum_RuleThreeImpostor = 0x00000aaf,
+ StringNames__Enum_RuleOneCrewmatesTitle = 0x00000ab0,
+ StringNames__Enum_RuleTwoCrewmatesTitle = 0x00000ab1,
+ StringNames__Enum_RuleThreeCrewmatesTitle = 0x00000ab2,
+ StringNames__Enum_RuleOneImpostorTitle = 0x00000ab3,
+ StringNames__Enum_RuleTwoImpostorTitle = 0x00000ab4,
+ StringNames__Enum_RoundRobin = 0x00000ab5,
+ StringNames__Enum_OptionUnavailablePublicLobby = 0x00000ab6,
+ StringNames__Enum_StatsHidenSeekGamesCrewmateSurvived = 0x00000ab7,
+ StringNames__Enum_StatsHidenSeekTimesVented = 0x00000ab8,
+ StringNames__Enum_StatsTimesPettedPet = 0x00000ab9,
+ StringNames__Enum_StatsImpostorKills_HideAndSeek = 0x00000aba,
+ StringNames__Enum_StatsFastestCrewmateWin_HideAndSeek = 0x00000abb,
+ StringNames__Enum_StatsFastestImpostorWin_HideAndSeek = 0x00000abc,
+ StringNames__Enum_StatsHideAndSeekImpostorVictory = 0x00000abd,
+ StringNames__Enum_StatsHideAndSeekCrewmateVictory = 0x00000abe,
StringNames__Enum_AmongUsFriends = 0x00000af0,
StringNames__Enum_FriendsGuestWarning = 0x00000af1,
StringNames__Enum_PlatformFriends = 0x00000af2,
@@ -7032,6 +7165,9 @@ namespace app
StringNames__Enum_FriendListUnavailable = 0x00000b22,
StringNames__Enum_SignInIssueTitle = 0x00000b23,
StringNames__Enum_SignInIssueText = 0x00000b24,
+ StringNames__Enum_Ghost = 0x00000b25,
+ StringNames__Enum_CurrentlyHaunting = 0x00000b26,
+ StringNames__Enum_RestorePurchases = 0x00000b27,
StringNames__Enum_QCAccIsRole = 0x00000bb8,
StringNames__Enum_QCAccIsRoleNeg = 0x00000bb9,
StringNames__Enum_QCAccShapeshited = 0x00000bba,
@@ -7090,6 +7226,24 @@ namespace app
StringNames__Enum_ConfirmDeleteAccounts = 0x00000c88,
StringNames__Enum_ConfirmDeleteAccountsEmpty = 0x00000c89,
StringNames__Enum_AccountRequestDelete = 0x00000c8a,
+ StringNames__Enum_HasBeenKilled = 0x00000c8b,
+ StringNames__Enum_GameType = 0x00000dac,
+ StringNames__Enum_GameTypeError = 0x00000dad,
+ StringNames__Enum_GameTypeClassic = 0x00000dae,
+ StringNames__Enum_GameTypeHideAndSeek = 0x00000daf,
+ StringNames__Enum_PetAction = 0x00000db0,
+ StringNames__Enum_CreateLabel = 0x00000db1,
+ StringNames__Enum_TagFiltersTitle = 0x00000db2,
+ StringNames__Enum_TagFiltersHelpFindGame = 0x00000db3,
+ StringNames__Enum_TagFiltersHelpCreate = 0x00000db4,
+ StringNames__Enum_TagsFilteredSingular = 0x00000db5,
+ StringNames__Enum_TagsFilteredPlural = 0x00000db6,
+ StringNames__Enum_TagsAppliedSingular = 0x00000db7,
+ StringNames__Enum_TagsAppliedPlural = 0x00000db8,
+ StringNames__Enum_DefaultFilterTag_FirstTime = 0x00000db9,
+ StringNames__Enum_DefaultFilterTag_Casual = 0x00000dba,
+ StringNames__Enum_DefaultFilterTag_Serious = 0x00000dbb,
+ StringNames__Enum_DefaultFilterTag_Expert = 0x00000dbc,
};
#endif
@@ -7451,14 +7605,14 @@ namespace app
#pragma endregion
#pragma region AirshipStatus
- struct AirshipStatus__Fields
- {
+ struct AirshipStatus__Fields {
struct ShipStatus__Fields _;
void* Ladders;
void* SpawnInGame;
struct MovingPlatformBehaviour* GapPlatform;
void* ShowerParticles;
void* LightAffectors;
+ struct GameObject* outOfOrderPlat;
};
struct AirshipStatus
@@ -7704,25 +7858,27 @@ namespace app
#pragma region RoleTypes__Enum
#if defined(_CPLUSPLUS_)
- enum class RoleTypes__Enum : uint16_t
- {
+ enum class RoleTypes__Enum : uint16_t {
Crewmate = 0x0000,
Impostor = 0x0001,
Scientist = 0x0002,
Engineer = 0x0003,
GuardianAngel = 0x0004,
Shapeshifter = 0x0005,
+ CrewmateGhost = 0x0006,
+ ImpostorGhost = 0x0007,
};
#else
- enum RoleTypes__Enum
- {
+ enum RoleTypes__Enum {
RoleTypes__Enum_Crewmate = 0x0000,
RoleTypes__Enum_Impostor = 0x0001,
RoleTypes__Enum_Scientist = 0x0002,
RoleTypes__Enum_Engineer = 0x0003,
RoleTypes__Enum_GuardianAngel = 0x0004,
RoleTypes__Enum_Shapeshifter = 0x0005,
+ RoleTypes__Enum_CrewmateGhost = 0x0006,
+ RoleTypes__Enum_ImpostorGhost = 0x0007,
};
#endif
@@ -7765,8 +7921,7 @@ namespace app
#pragma endregion
#pragma region RoleBehaviour
- struct RoleBehaviour__Fields
- {
+ struct RoleBehaviour__Fields {
struct MonoBehaviour__Fields _;
#if defined(_CPLUSPLUS_)
RoleTypes__Enum Role;
@@ -7806,9 +7961,15 @@ namespace app
int32_t TeamType;
#endif
struct AbilityButtonSettings* Ability;
+#if defined(_CPLUSPLUS_)
+ RoleTypes__Enum DefaultGhostRole;
+#else
+ uint16_t DefaultGhostRole;
+#endif
struct AudioClip* UseSound;
struct AudioClip* IntroSound;
struct PlayerControl* Player;
+ void* buttonManager;
};
struct RoleBehaviour
@@ -7823,6 +7984,8 @@ namespace app
VirtualInvokeData Finalize;
VirtualInvokeData GetHashCode;
VirtualInvokeData ToString;
+ VirtualInvokeData __unknown;
+ VirtualInvokeData get_IsAffectedByComms;
VirtualInvokeData CanUse;
VirtualInvokeData DidWin;
VirtualInvokeData Deinitialize;
@@ -7835,8 +7998,10 @@ namespace app
VirtualInvokeData SetPlayerTarget;
VirtualInvokeData SetCooldown;
VirtualInvokeData IsValidTarget;
- VirtualInvokeData __unknown;
+ VirtualInvokeData FindClosestTarget;
VirtualInvokeData GetAbilityDistance;
+ VirtualInvokeData AdjustTasks;
+ VirtualInvokeData AppendTaskHint;
};
struct RoleBehaviour__StaticFields {
@@ -7854,6 +8019,18 @@ namespace app
};
#pragma endregion
+#pragma region Nullable_1_AmongUs_GameOptions_RoleTypes_
+ struct Nullable_1_AmongUs_GameOptions_RoleTypes_
+ {
+#if defined(_CPLUSPLUS_)
+ RoleTypes__Enum value;
+#else
+ uint16_t value;
+#endif
+ bool has_value;
+ };
+#pragma endregion
+
#pragma region GameData_PlayerInfo
struct __declspec(align(4)) GameData_PlayerInfo__Fields {
uint8_t PlayerId;
@@ -7864,6 +8041,7 @@ namespace app
#else
uint16_t RoleType;
#endif
+ struct Nullable_1_AmongUs_GameOptions_RoleTypes_ RoleWhenAlive;
struct Dictionary_2_PlayerOutfitType_GameData_PlayerOutfit_* Outfits;
uint32_t PlayerLevel;
bool Disconnected;
@@ -7904,11 +8082,11 @@ namespace app
#pragma endregion
#pragma region MovingPlatformBehaviour
- struct MovingPlatformBehaviour__Fields
- {
+ struct MovingPlatformBehaviour__Fields {
struct MonoBehaviour__Fields _;
struct Vector3 LeftPosition;
struct Vector3 RightPosition;
+ struct Vector3 DisabledPosition;
struct Vector3 LeftUsePosition;
struct Vector3 RightUsePosition;
void* MovingSound;
@@ -7992,14 +8170,14 @@ namespace app
#endif
- struct Minigame__Fields
- {
+ struct Minigame__Fields {
struct MonoBehaviour__Fields _;
#if defined(_CPLUSPLUS_)
TransitionType__Enum TransType;
#else
int32_t TransType;
#endif
+ struct Vector2 TargetPosition;
void* MyTask;
void* MyNormTask;
void* _Console_k__BackingField;
@@ -8362,66 +8540,66 @@ namespace app
#pragma endregion
#pragma region List_1_RoleEffectAnimation_
-struct __declspec(align(4)) List_1_RoleEffectAnimation___Fields {
- struct RoleEffectAnimation__Array *_items;
- int32_t _size;
- int32_t _version;
- struct Object *_syncRoot;
-};
-
-struct List_1_RoleEffectAnimation_ {
- void *klass;
- MonitorData *monitor;
- struct List_1_RoleEffectAnimation___Fields fields;
-};
+ struct __declspec(align(4)) List_1_RoleEffectAnimation___Fields {
+ struct RoleEffectAnimation__Array* _items;
+ int32_t _size;
+ int32_t _version;
+ struct Object* _syncRoot;
+ };
+
+ struct List_1_RoleEffectAnimation_ {
+ void* klass;
+ MonitorData* monitor;
+ struct List_1_RoleEffectAnimation___Fields fields;
+ };
#if defined(_CPLUSPLUS_)
-enum class RoleEffectAnimation_EffectType__Enum : int32_t {
- Default = 0x00000000,
- ProtectLoop = 0x00000001,
- Shapeshift = 0x00000002,
-};
+ enum class RoleEffectAnimation_EffectType__Enum : int32_t {
+ Default = 0x00000000,
+ ProtectLoop = 0x00000001,
+ Shapeshift = 0x00000002,
+ };
#else
-enum RoleEffectAnimation_EffectType__Enum {
- RoleEffectAnimation_EffectType__Enum_Default = 0x00000000,
- RoleEffectAnimation_EffectType__Enum_ProtectLoop = 0x00000001,
- RoleEffectAnimation_EffectType__Enum_Shapeshift = 0x00000002,
-};
+ enum RoleEffectAnimation_EffectType__Enum {
+ RoleEffectAnimation_EffectType__Enum_Default = 0x00000000,
+ RoleEffectAnimation_EffectType__Enum_ProtectLoop = 0x00000001,
+ RoleEffectAnimation_EffectType__Enum_Shapeshift = 0x00000002,
+ };
#endif
#pragma endregion
#pragma region RoleEffectAnimation
-struct RoleEffectAnimation__Fields {
- struct MonoBehaviour__Fields _;
+ struct RoleEffectAnimation__Fields {
+ struct MonoBehaviour__Fields _;
#if defined(_CPLUSPLUS_)
- RoleEffectAnimation_EffectType__Enum effectType;
+ RoleEffectAnimation_EffectType__Enum effectType;
#else
- int32_t effectType;
+ int32_t effectType;
#endif
- struct AnimationClip* Clip;
- struct SpriteAnim* Animator;
- struct Action* MidAnimCB;
- struct SpriteRenderer* Renderer;
- struct AudioClip* UseSound;
- struct AudioSource* AudioSource;
- struct PlayerControl* parent;
-};
-
-struct RoleEffectAnimation {
- void* klass;
- MonitorData* monitor;
- struct RoleEffectAnimation__Fields fields;
-};
-
-struct RoleEffectAnimation__Array {
- void* klass;
- MonitorData* monitor;
- Il2CppArrayBounds* bounds;
- il2cpp_array_size_t max_length;
- struct RoleEffectAnimation* vector[32];
-};
+ struct AnimationClip* Clip;
+ struct SpriteAnim* Animator;
+ struct Action* MidAnimCB;
+ struct SpriteRenderer* Renderer;
+ struct AudioClip* UseSound;
+ struct AudioSource* AudioSource;
+ struct PlayerControl* parent;
+ };
+
+ struct RoleEffectAnimation {
+ void* klass;
+ MonitorData* monitor;
+ struct RoleEffectAnimation__Fields fields;
+ };
+
+ struct RoleEffectAnimation__Array {
+ void* klass;
+ MonitorData* monitor;
+ Il2CppArrayBounds* bounds;
+ il2cpp_array_size_t max_length;
+ struct RoleEffectAnimation* vector[32];
+ };
#pragma endregion
#pragma region List_1_PlayerTask_
@@ -8532,10 +8710,9 @@ struct RoleEffectAnimation__Array {
#pragma endregion
#pragma region FollowerCamera
- struct FollowerCamera__Fields
- {
+ struct FollowerCamera__Fields {
struct MonoBehaviour__Fields _;
- void* Target;
+ struct MonoBehaviour* Target;
struct Vector2 Offset;
bool Locked;
float shakeAmount;
@@ -8633,8 +8810,7 @@ struct RoleEffectAnimation__Array {
int32_t PoolIndex;
};
- struct ChatBubble__Fields
- {
+ struct ChatBubble__Fields {
struct PoolableBehavior__Fields _;
void* Player; // struct PoolablePlayer
struct SpriteRenderer* Xmark;
@@ -8644,6 +8820,7 @@ struct RoleEffectAnimation__Array {
struct SpriteRenderer* Background;
struct SpriteRenderer* MaskArea;
void* PlatformIcon;
+ struct TextMeshPro* ColorBlindName;
struct GameData_PlayerInfo* playerInfo;
int32_t maskLayer;
};
@@ -8749,6 +8926,38 @@ struct RoleEffectAnimation__Array {
};
#pragma endregion
+#pragma region PlayerMaterial
+#if defined(_CPLUSPLUS_)
+ enum class PlayerMaterial_MaskType__Enum : int32_t {
+ None = 0x00000000,
+ SimpleUI = 0x00000001,
+ ComplexUI = 0x00000002,
+ Exile = 0x00000003,
+ ScrollingUI = 0x00000004,
+ };
+
+#else
+ enum PlayerMaterial_MaskType__Enum {
+ PlayerMaterial_MaskType__Enum_None = 0x00000000,
+ PlayerMaterial_MaskType__Enum_SimpleUI = 0x00000001,
+ PlayerMaterial_MaskType__Enum_ComplexUI = 0x00000002,
+ PlayerMaterial_MaskType__Enum_Exile = 0x00000003,
+ PlayerMaterial_MaskType__Enum_ScrollingUI = 0x00000004,
+ };
+
+#endif
+
+ struct PlayerMaterial_Properties {
+#if defined(_CPLUSPLUS_)
+ PlayerMaterial_MaskType__Enum MaskType;
+#else
+ int32_t MaskType;
+#endif
+ int32_t MaskLayer;
+ int32_t ColorId;
+ };
+#pragma endregion
+
#pragma region SkinLayer
struct SkinLayer__Fields {
@@ -8756,6 +8965,7 @@ struct RoleEffectAnimation__Array {
struct SpriteRenderer* layer;
void* animator;
void* skin;
+ struct PlayerMaterial_Properties matProperties;
};
struct SkinLayer {
@@ -8786,19 +8996,41 @@ struct RoleEffectAnimation__Array {
#pragma endregion
#pragma region PlayerPhysics
+
+#if defined(_CPLUSPLUS_)
+ enum class PlayerBodyTypes__Enum : int32_t {
+ Normal = 0x00000000,
+ Horse = 0x00000001,
+ Seeker = 0x00000002,
+ };
+
+#else
+ enum PlayerBodyTypes__Enum {
+ PlayerBodyTypes__Enum_Normal = 0x00000000,
+ PlayerBodyTypes__Enum_Horse = 0x00000001,
+ PlayerBodyTypes__Enum_Seeker = 0x00000002,
+ };
+
+#endif
+
struct PlayerPhysics__Fields {
struct InnerNetObject__Fields _;
uint8_t lastClimbLadderSid;
- void* AnimationGroups;
- void* CurrentAnimationGroup;
+ void* ImpostorDiscoveredSound;
+ void* Animations;
+ void* inputHandler;
float Speed;
float GhostSpeed;
+ void* logger;
void* body;
struct PlayerControl* myPlayer;
- void* logger;
- void* GlowAnimator;
- void* ImpostorDiscoveredSound;
- void* inputHandler;
+#if defined(_CPLUSPLUS_)
+ PlayerBodyTypes__Enum bodyType;
+#else
+ int32_t bodyType;
+#endif
+ void* petCoroutine;
+ bool _DoingCustomAnimation_k__BackingField;
};
struct PlayerPhysics {
@@ -8837,57 +9069,33 @@ struct RoleEffectAnimation__Array {
};
#pragma endregion
-#pragma region PlayerMaterial
-#if defined(_CPLUSPLUS_)
- enum class PlayerMaterial_MaskType__Enum : int32_t {
- None = 0x00000000,
- SimpleUI = 0x00000001,
- ComplexUI = 0x00000002,
- Exile = 0x00000003,
- ScrollingUI = 0x00000004,
- };
-
-#else
- enum PlayerMaterial_MaskType__Enum {
- PlayerMaterial_MaskType__Enum_None = 0x00000000,
- PlayerMaterial_MaskType__Enum_SimpleUI = 0x00000001,
- PlayerMaterial_MaskType__Enum_ComplexUI = 0x00000002,
- PlayerMaterial_MaskType__Enum_Exile = 0x00000003,
- PlayerMaterial_MaskType__Enum_ScrollingUI = 0x00000004,
- };
-
-#endif
-
- struct PlayerMaterial_Properties {
-#if defined(_CPLUSPLUS_)
- PlayerMaterial_MaskType__Enum MaskType;
-#else
- int32_t MaskType;
-#endif
- int32_t MaskLayer;
- int32_t ColorId;
- };
-#pragma endregion
-
#pragma region CosmeticsLayer
struct CosmeticsLayer__Fields {
struct MonoBehaviour__Fields _;
bool alwaysDrawNormalPlayer;
+ bool uiPet;
+ float zIndexSpacing;
+ bool showColorBlindText;
void* bodySprites;
struct TextMeshPro* colorBlindText;
void* hat;
struct TextMeshPro* nameText;
+ struct GameObject* nameTextContainer;
struct Transform* petParent;
- bool showColorBlindText;
struct SkinLayer* skin;
- bool uiPet;
void* visor;
- float zIndexSpacing;
+#if defined(_CPLUSPLUS_)
+ PlayerBodyTypes__Enum bodyType;
+#else
+ int32_t bodyType;
+#endif
struct PlayerMaterial_Properties bodyMatProperties;
void* currentBodySprite;
struct PetBehaviour* currentPet;
- bool initialized;
void* normalBodySprite;
+ bool initialized;
+ bool visible;
+ bool isNameVisible;
bool lockVisible;
};
@@ -8935,7 +9143,10 @@ struct RoleEffectAnimation__Array {
int32_t _CurrentOutfitType_k__BackingField;
#endif
bool inVent;
+ bool walkingToVent;
+ bool petting;
bool inMovingPlat;
+ bool onLadder;
bool protectedByGuardianThisRound;
bool shapeshifting;
struct GameData_PlayerInfo* _cachedData;
@@ -8947,23 +9158,21 @@ struct RoleEffectAnimation__Array {
float killTimer;
int32_t RemainingEmergencies;
void* LightPrefab;
- void* myLight;
+ void* lightSource;
struct Collider2D* Collider;
struct PlayerPhysics* MyPhysics;
struct CustomNetworkTransform* NetTransform;
- void* myAnim;
- void* horseAnim;
+ struct Collider2D* clickKillCollider;
struct List_1_PlayerTask_* myTasks;
struct Vector3 defaultPlayerScale;
- void* ScannerAnims;
- struct SpriteRenderer__Array* ScannersImages;
struct List_1_RoleEffectAnimation_* currentRoleAnimations;
+ struct GameObject* TargetFlashlight;
bool isDummy;
bool notRealPlayer;
+ void* logger;
void* hitBuffer;
void* closest;
bool isNew;
- void* logger;
void* cache;
void* itemsInRange;
void* newItemsInRange;
@@ -8992,10 +9201,8 @@ struct RoleEffectAnimation__Array {
VirtualInvokeData Deserialize;
};
- struct PlayerControl__StaticFields
- {
+ struct PlayerControl__StaticFields {
struct PlayerControl* LocalPlayer;
- struct GameOptionsData* GameOptions;
struct List_1_PlayerControl_* AllPlayerControls;
};
@@ -9128,23 +9335,29 @@ struct RoleEffectAnimation__Array {
void* SabotageButton;
void* ImpostorVentButton;
void* UseButton;
+ void* PetButton;
void* AbilityButton;
void* ReportButton;
struct TextMeshPro* GameSettings;
struct GameObject* TaskStuff;
+ struct TaskPanelBehaviour* TaskPanel;
+ struct CrewmatesKilledTracker* CrewmatesKilled;
struct ChatController* Chat;
void* Dialogue;
- struct TextMeshPro* TaskText;
struct Transform* TaskCompleteOverlay;
float taskDirtyTimer;
void* ShadowQuad;
struct SpriteRenderer* FullScreen;
void* _ReactorFlash_k__BackingField;
void* _OxyFlash_k__BackingField;
- struct SpriteRenderer* MapButton;
+ void* MapButton;
void* KillOverlay;
void* joystick;
+ void* joystickR;
void* Joysticks;
+ struct MonoBehaviour* RightVJoystick;
+ struct Collider2D* LeftStickDeadZone;
+ struct Collider2D* RightStickDeadZone;
void* discussEmblem;
void* shhhEmblem;
void* IntroPrefab;
@@ -9159,6 +9372,9 @@ struct RoleEffectAnimation__Array {
struct GameObject* GameLoadAnimation;
float consoleUIHorizontalShift;
struct GameObject* playerListPrompt;
+ void* AlertFlash;
+ void* DangerMeter;
+ struct GameObject* SettingsButton;
void* tasksString;
void* lightFlashHandle;
bool _IsIntroDisplayed_k__BackingField;
@@ -9282,13 +9498,13 @@ struct RoleEffectAnimation__Array {
struct KeyboardJoystick__Fields fields;
};
- struct KeyboardJoystick__VTable
- {
+ struct KeyboardJoystick__VTable {
VirtualInvokeData Equals;
VirtualInvokeData Finalize;
VirtualInvokeData GetHashCode;
VirtualInvokeData ToString;
- VirtualInvokeData get_Delta;
+ VirtualInvokeData get_DeltaL;
+ VirtualInvokeData get_DeltaR;
VirtualInvokeData ToggleVisuals;
};
@@ -9325,13 +9541,13 @@ struct RoleEffectAnimation__Array {
struct ScreenJoystick__Fields fields;
};
- struct ScreenJoystick__VTable
- {
+ struct ScreenJoystick__VTable {
VirtualInvokeData Equals;
VirtualInvokeData Finalize;
VirtualInvokeData GetHashCode;
VirtualInvokeData ToString;
- VirtualInvokeData get_Delta;
+ VirtualInvokeData get_DeltaL;
+ VirtualInvokeData get_DeltaR;
VirtualInvokeData ToggleVisuals;
};
@@ -9400,6 +9616,9 @@ struct RoleEffectAnimation__Array {
VirtualInvokeData ToString;
};
+ struct VoteSpreader__StaticFields {
+ };
+
struct VoteSpreader__Class {
Il2CppClass_0 _0;
Il2CppRuntimeInterfaceOffsetPair* interfaceOffsets;
@@ -9518,14 +9737,12 @@ struct RoleEffectAnimation__Array {
#pragma endregion
#pragma region CustomNetworkTransform
- struct CustomNetworkTransform__Fields
- {
+ struct CustomNetworkTransform__Fields {
struct InnerNetObject__Fields _;
- void* XRange;
- void* YRange;
float sendInterval;
float snapThreshold;
float interpolateMovement;
+ struct PlayerControl* myPlayer;
void* body;
struct Vector2 targetSyncPosition;
struct Vector2 targetSyncVelocity;
@@ -9733,19 +9950,33 @@ struct RoleEffectAnimation__Array {
#endif
#if defined(_CPLUSPLUS_)
- enum class GameModes__Enum : int32_t
- {
+ enum class GameModes__Enum : uint8_t {
+ None = 0x00,
+ Normal = 0x01,
+ HideNSeek = 0x02,
+ };
+
+#else
+ enum GameModes__Enum {
+ GameModes__Enum_None = 0x00,
+ GameModes__Enum_Normal = 0x01,
+ GameModes__Enum_HideNSeek = 0x02,
+ };
+
+#endif
+
+#if defined(_CPLUSPLUS_)
+ enum class NetworkModes__Enum : int32_t {
LocalGame = 0x00000000,
OnlineGame = 0x00000001,
FreePlay = 0x00000002,
};
#else
- enum GameModes__Enum
- {
- GameModes__Enum_LocalGame = 0x00000000,
- GameModes__Enum_OnlineGame = 0x00000001,
- GameModes__Enum_FreePlay = 0x00000002,
+ enum NetworkModes__Enum {
+ NetworkModes__Enum_LocalGame = 0x00000000,
+ NetworkModes__Enum_OnlineGame = 0x00000001,
+ NetworkModes__Enum_FreePlay = 0x00000002,
};
#endif
@@ -9770,8 +10001,7 @@ struct RoleEffectAnimation__Array {
#endif
- struct InnerNetClient__Fields
- {
+ struct InnerNetClient__Fields {
struct MonoBehaviour__Fields _;
float MinSendInterval;
uint32_t NetIdCnt;
@@ -9784,6 +10014,7 @@ struct RoleEffectAnimation__Array {
void* allObjectsFast;
void* Streams;
int32_t msgNum;
+ void* serverLogger;
struct String* networkAddress;
int32_t networkPort;
bool useDtls;
@@ -9794,9 +10025,9 @@ struct RoleEffectAnimation__Array {
int32_t mode;
#endif
#if defined(_CPLUSPLUS_)
- GameModes__Enum GameMode;
+ NetworkModes__Enum NetworkMode;
#else
- int32_t GameMode;
+ int32_t NetworkMode;
#endif
int32_t GameId;
int32_t HostId;
@@ -9813,6 +10044,7 @@ struct RoleEffectAnimation__Array {
void* LastMatchmakerError;
void* PreSpawnDispatcher;
void* Dispatcher;
+ void* gameOptionsFactory;
bool _IsGamePublic_k__BackingField;
#if defined(_CPLUSPLUS_)
InnerNetClient_GameStates__Enum GameState;
@@ -10400,14 +10632,13 @@ struct RoleEffectAnimation__Array {
#pragma endregion
#pragma region DeadBody
- struct DeadBody__Fields
- {
+ struct DeadBody__Fields {
struct MonoBehaviour__Fields _;
bool Reported;
uint8_t ParentId;
- void* myCollider;
- void* bloodSplatter;
- void* bodyRenderer;
+ struct Collider2D* myCollider;
+ struct SpriteRenderer* bloodSplatter;
+ struct SpriteRenderer* bodyRenderer;
};
struct DeadBody
@@ -10577,8 +10808,7 @@ struct RoleEffectAnimation__Array {
MonitorData* monitor;
struct CosmeticData__Fields fields;
};
- struct CosmeticData__VTable
- {
+ struct CosmeticData__VTable {
VirtualInvokeData Equals;
VirtualInvokeData Finalize;
VirtualInvokeData GetHashCode;
@@ -10591,6 +10821,7 @@ struct RoleEffectAnimation__Array {
VirtualInvokeData PreviewOnPlayer;
VirtualInvokeData GetItemCategory;
VirtualInvokeData SetProdId;
+ VirtualInvokeData CoLoadIcon;
};
struct CosmeticData__StaticFields
@@ -10660,11 +10891,11 @@ struct RoleEffectAnimation__Array {
#pragma region HatData__Array
struct HatData__Array {
- struct HatData__Array__Class* klass;
- MonitorData* monitor;
- Il2CppArrayBounds* bounds;
- il2cpp_array_size_t max_length;
- struct HatData* vector[32];
+ struct HatData__Array__Class* klass;
+ MonitorData* monitor;
+ Il2CppArrayBounds* bounds;
+ il2cpp_array_size_t max_length;
+ struct HatData* vector[32];
};
struct HatData__Array__VTable {
@@ -10694,9 +10925,9 @@ struct RoleEffectAnimation__Array {
};
struct List_1_HatData_ {
- struct List_1_HatData___Class* klass;
- MonitorData* monitor;
- struct List_1_HatData___Fields fields;
+ struct List_1_HatData___Class* klass;
+ MonitorData* monitor;
+ struct List_1_HatData___Fields fields;
};
struct List_1_HatData___VTable {
@@ -10851,10 +11082,13 @@ struct RoleEffectAnimation__Array {
void* shadowRend;
void* body;
struct Collider2D* Collider;
+ struct Transform* PettingHandPosition;
void* idleClip;
void* sadClip;
void* scaredClip;
void* walkClip;
+ void* petClip;
+ bool beingPet;
};
struct PetBehaviour {
@@ -11047,98 +11281,91 @@ struct RoleEffectAnimation__Array {
};
#pragma endregion
-#pragma region GameOptionsDataParent
- struct __declspec(align(4)) GameOptionsDataParent__Fields {
- float playerSpeedMod;
- int32_t killDistance;
- float killCooldown;
- int32_t numCommonTasks;
- int32_t numLongTasks;
- int32_t numShortTasks;
- int32_t numImpostors;
- bool isDefaults;
- };
-
- struct GameOptionsDataParent {
- struct GameOptionsDataParent__Class* klass;
+#pragma region IRoleOptionsCollection
+ struct IRoleOptionsCollection {
+ struct IRoleOptionsCollection__Class* klass;
MonitorData* monitor;
- struct GameOptionsDataParent__Fields fields;
};
- struct GameOptionsDataParent__VTable {
- VirtualInvokeData Equals;
- VirtualInvokeData Finalize;
- VirtualInvokeData GetHashCode;
- VirtualInvokeData ToString;
+ struct IRoleOptionsCollection__VTable {
+ VirtualInvokeData GetNumPerGame;
+ VirtualInvokeData GetChancePerGame;
+ VirtualInvokeData SetRoleRate;
+ VirtualInvokeData SetRoleRecommended;
};
- struct GameOptionsDataParent__StaticFields {
+ struct IRoleOptionsCollection__StaticFields {
};
- struct GameOptionsDataParent__Class {
+ struct IRoleOptionsCollection__Class {
Il2CppClass_0 _0;
Il2CppRuntimeInterfaceOffsetPair* interfaceOffsets;
- struct GameOptionsDataParent__StaticFields* static_fields;
+ struct IRoleOptionsCollection__StaticFields* static_fields;
const Il2CppRGCTXData* rgctx_data;
Il2CppClass_1 _1;
- struct GameOptionsDataParent__VTable vtable;
+ struct IRoleOptionsCollection__VTable vtable;
};
-
#pragma endregion
-#pragma region GameOptionsData
-
-#if defined(_CPLUSPLUS_)
- enum class GameKeywords__Enum : uint32_t
- {
- All = 0x00000000,
- English = 0x00000100,
- SpanishLA = 0x00000002,
- Brazilian = 0x00000800,
- Portuguese = 0x00000010,
- Korean = 0x00000004,
- Russian = 0x00000008,
- Dutch = 0x00001000,
- Filipino = 0x00000040,
- French = 0x00002000,
- German = 0x00004000,
- Italian = 0x00008000,
- Japanese = 0x00000200,
- SpanishEU = 0x00000400,
- Arabic = 0x00000020,
- Polish = 0x00000080,
- SChinese = 0x00010000,
- TChinese = 0x00020000,
- Irish = 0x00040000,
- Other = 0x00000001,
+#pragma region LogicOptions
+ struct LogicOptions {
+ struct LogicOptions__Class* klass;
+ MonitorData* monitor;
+ //struct LogicOptions__Fields fields;
};
-#else
- enum GameKeywords__Enum
- {
- GameKeywords__Enum_All = 0x00000000,
- GameKeywords__Enum_English = 0x00000100,
- GameKeywords__Enum_SpanishLA = 0x00000002,
- GameKeywords__Enum_Brazilian = 0x00000800,
- GameKeywords__Enum_Portuguese = 0x00000010,
- GameKeywords__Enum_Korean = 0x00000004,
- GameKeywords__Enum_Russian = 0x00000008,
- GameKeywords__Enum_Dutch = 0x00001000,
- GameKeywords__Enum_Filipino = 0x00000040,
- GameKeywords__Enum_French = 0x00002000,
- GameKeywords__Enum_German = 0x00004000,
- GameKeywords__Enum_Italian = 0x00008000,
- GameKeywords__Enum_Japanese = 0x00000200,
- GameKeywords__Enum_SpanishEU = 0x00000400,
- GameKeywords__Enum_Arabic = 0x00000020,
- GameKeywords__Enum_Polish = 0x00000080,
- GameKeywords__Enum_SChinese = 0x00010000,
- GameKeywords__Enum_TChinese = 0x00020000,
- GameKeywords__Enum_Irish = 0x00040000,
- GameKeywords__Enum_Other = 0x00000001,
+ struct LogicOptions__VTable {
+ VirtualInvokeData Equals;
+ VirtualInvokeData Finalize;
+ VirtualInvokeData GetHashCode;
+ VirtualInvokeData ToString;
+ VirtualInvokeData __unknown;
+ VirtualInvokeData __unknown_1;
+ VirtualInvokeData __unknown_2;
+ VirtualInvokeData __unknown_3;
+ VirtualInvokeData OnPlayerDisconnect;
+ VirtualInvokeData HandleRPC;
+ VirtualInvokeData Serialize;
+ VirtualInvokeData Deserialize;
+ VirtualInvokeData __unknown_4;
+ VirtualInvokeData GetAdjustedNumImpostors;
+ VirtualInvokeData SetRecommendations;
+ VirtualInvokeData __unknown_5;
+ VirtualInvokeData GetGhostsDoTasks;
+ VirtualInvokeData GetEngineerCooldown;
+ VirtualInvokeData GetEngineerInVentTime;
+ VirtualInvokeData GetGuardianAngelCooldown;
+ VirtualInvokeData GetShapeshifterDuration;
+ VirtualInvokeData GetShapeshifterCooldown;
+ VirtualInvokeData GetShapeshifterLeaveSkin;
+ VirtualInvokeData GetScientistCooldown;
+ VirtualInvokeData GetScientistBatteryCharge;
+ VirtualInvokeData GetKillCooldown;
+ VirtualInvokeData GetKillDistance;
+ VirtualInvokeData GetPlayerSpeedMod;
+ VirtualInvokeData GetConfirmImpostor;
+ VirtualInvokeData GetEmergencyCooldown;
+ VirtualInvokeData GetNumEmergencyMeetings;
+ VirtualInvokeData GetVisualTasks;
+ VirtualInvokeData GetAnonymousVotes;
+ VirtualInvokeData GetTaskBarMode;
+ VirtualInvokeData GetShowCrewmateNames;
+ };
+
+ struct LogicOptions__StaticFields {
+ };
+
+ struct LogicOptions__Class {
+ Il2CppClass_0 _0;
+ Il2CppRuntimeInterfaceOffsetPair* interfaceOffsets;
+ struct LogicOptions__StaticFields* static_fields;
+ const Il2CppRGCTXData* rgctx_data;
+ Il2CppClass_1 _1;
+ struct LogicOptions__VTable vtable;
};
+#pragma endregion
-#endif
+#pragma region IGameOptions
#if defined(_CPLUSPLUS_)
enum class TaskBarMode__Enum : int32_t
@@ -11159,87 +11386,244 @@ struct RoleEffectAnimation__Array {
#endif
#if defined(_CPLUSPLUS_)
- enum class GameType__Enum : int32_t {
- Normal = 0x00000000,
+ enum class ByteOptionNames__Enum : int32_t {
+ Invalid = 0x00000000,
+ MapId = 0x00000001,
};
#else
- enum GameType__Enum {
- GameType__Enum_Normal = 0x00000000,
+ enum ByteOptionNames__Enum {
+ ByteOptionNames__Enum_Invalid = 0x00000000,
+ ByteOptionNames__Enum_MapId = 0x00000001,
+ };
+
+#endif
+
+#if defined(_CPLUSPLUS_)
+ enum class FloatOptionNames__Enum : int32_t {
+ Invalid = 0x00000000,
+ KillCooldown = 0x00000001,
+ PlayerSpeedMod = 0x00000002,
+ ImpostorLightMod = 0x00000003,
+ CrewLightMod = 0x00000004,
+ CrewmateTimeInVent = 0x00000064,
+ FinalEscapeTime = 0x00000065,
+ EscapeTime = 0x00000066,
+ SeekerFinalSpeed = 0x00000067,
+ MaxPingTime = 0x00000068,
+ CrewmateFlashlightSize = 0x00000069,
+ ImpostorFlashlightSize = 0x0000006a,
+ ShapeshifterCooldown = 0x000003e8,
+ ShapeshifterDuration = 0x000003e9,
+ ProtectionDurationSeconds = 0x0000044c,
+ GuardianAngelCooldown = 0x0000044d,
+ ScientistCooldown = 0x000004b0,
+ ScientistBatteryCharge = 0x000004b1,
+ EngineerCooldown = 0x00000514,
+ EngineerInVentMaxTime = 0x00000515,
+ };
+
+#else
+ enum FloatOptionNames__Enum {
+ FloatOptionNames__Enum_Invalid = 0x00000000,
+ FloatOptionNames__Enum_KillCooldown = 0x00000001,
+ FloatOptionNames__Enum_PlayerSpeedMod = 0x00000002,
+ FloatOptionNames__Enum_ImpostorLightMod = 0x00000003,
+ FloatOptionNames__Enum_CrewLightMod = 0x00000004,
+ FloatOptionNames__Enum_CrewmateTimeInVent = 0x00000064,
+ FloatOptionNames__Enum_FinalEscapeTime = 0x00000065,
+ FloatOptionNames__Enum_EscapeTime = 0x00000066,
+ FloatOptionNames__Enum_SeekerFinalSpeed = 0x00000067,
+ FloatOptionNames__Enum_MaxPingTime = 0x00000068,
+ FloatOptionNames__Enum_CrewmateFlashlightSize = 0x00000069,
+ FloatOptionNames__Enum_ImpostorFlashlightSize = 0x0000006a,
+ FloatOptionNames__Enum_ShapeshifterCooldown = 0x000003e8,
+ FloatOptionNames__Enum_ShapeshifterDuration = 0x000003e9,
+ FloatOptionNames__Enum_ProtectionDurationSeconds = 0x0000044c,
+ FloatOptionNames__Enum_GuardianAngelCooldown = 0x0000044d,
+ FloatOptionNames__Enum_ScientistCooldown = 0x000004b0,
+ FloatOptionNames__Enum_ScientistBatteryCharge = 0x000004b1,
+ FloatOptionNames__Enum_EngineerCooldown = 0x00000514,
+ FloatOptionNames__Enum_EngineerInVentMaxTime = 0x00000515,
};
#endif
- struct GameOptionsData__Fields
- {
- struct GameOptionsDataParent__Fields _;
- int32_t MaxPlayers;
#if defined(_CPLUSPLUS_)
- GameKeywords__Enum Keywords;
+ enum class BoolOptionNames__Enum : int32_t {
+ Invalid = 0x00000000,
+ VisualTasks = 0x00000001,
+ GhostsDoTasks = 0x00000002,
+ ConfirmImpostor = 0x00000003,
+ AnonymousVotes = 0x00000004,
+ IsDefaults = 0x00000005,
+ UseFlashlight = 0x00000006,
+ SeekerFinalVents = 0x00000007,
+ SeekerFinalMap = 0x00000008,
+ SeekerPings = 0x00000009,
+ ShowCrewmateNames = 0x0000000a,
+ ShapeshifterLeaveSkin = 0x000003e8,
+ ImpostorsCanSeeProtect = 0x0000044c,
+ };
+
#else
- uint32_t Keywords;
+ enum BoolOptionNames__Enum {
+ BoolOptionNames__Enum_Invalid = 0x00000000,
+ BoolOptionNames__Enum_VisualTasks = 0x00000001,
+ BoolOptionNames__Enum_GhostsDoTasks = 0x00000002,
+ BoolOptionNames__Enum_ConfirmImpostor = 0x00000003,
+ BoolOptionNames__Enum_AnonymousVotes = 0x00000004,
+ BoolOptionNames__Enum_IsDefaults = 0x00000005,
+ BoolOptionNames__Enum_UseFlashlight = 0x00000006,
+ BoolOptionNames__Enum_SeekerFinalVents = 0x00000007,
+ BoolOptionNames__Enum_SeekerFinalMap = 0x00000008,
+ BoolOptionNames__Enum_SeekerPings = 0x00000009,
+ BoolOptionNames__Enum_ShowCrewmateNames = 0x0000000a,
+ BoolOptionNames__Enum_ShapeshifterLeaveSkin = 0x000003e8,
+ BoolOptionNames__Enum_ImpostorsCanSeeProtect = 0x0000044c,
+ };
+
#endif
- uint8_t MapId;
- int32_t NumEmergencyMeetings;
- int32_t EmergencyCooldown;
- bool ghostsDoTasks;
- int32_t DiscussionTime;
- int32_t VotingTime;
- float CrewLightMod;
- float ImpostorLightMod;
- bool ConfirmImpostor;
- bool VisualTasks;
- bool AnonymousVotes;
+
#if defined(_CPLUSPLUS_)
- TaskBarMode__Enum TaskBarMode;
+ enum class Int32OptionNames__Enum : int32_t {
+ Invalid = 0x00000000,
+ NumImpostors = 0x00000001,
+ KillDistance = 0x00000002,
+ NumEmergencyMeetings = 0x00000003,
+ EmergencyCooldown = 0x00000004,
+ DiscussionTime = 0x00000005,
+ VotingTime = 0x00000006,
+ MaxImpostors = 0x00000007,
+ MinPlayers = 0x00000008,
+ MaxPlayers = 0x00000009,
+ NumCommonTasks = 0x0000000a,
+ NumShortTasks = 0x0000000b,
+ NumLongTasks = 0x0000000c,
+ TaskBarMode = 0x0000000d,
+ CrewmatesRemainingForVitals = 0x00000064,
+ CrewmateVentUses = 0x00000065,
+ ImpostorPlayerID = 0x00000066,
+ };
+
#else
- int32_t TaskBarMode;
+ enum Int32OptionNames__Enum {
+ Int32OptionNames__Enum_Invalid = 0x00000000,
+ Int32OptionNames__Enum_NumImpostors = 0x00000001,
+ Int32OptionNames__Enum_KillDistance = 0x00000002,
+ Int32OptionNames__Enum_NumEmergencyMeetings = 0x00000003,
+ Int32OptionNames__Enum_EmergencyCooldown = 0x00000004,
+ Int32OptionNames__Enum_DiscussionTime = 0x00000005,
+ Int32OptionNames__Enum_VotingTime = 0x00000006,
+ Int32OptionNames__Enum_MaxImpostors = 0x00000007,
+ Int32OptionNames__Enum_MinPlayers = 0x00000008,
+ Int32OptionNames__Enum_MaxPlayers = 0x00000009,
+ Int32OptionNames__Enum_NumCommonTasks = 0x0000000a,
+ Int32OptionNames__Enum_NumShortTasks = 0x0000000b,
+ Int32OptionNames__Enum_NumLongTasks = 0x0000000c,
+ Int32OptionNames__Enum_TaskBarMode = 0x0000000d,
+ Int32OptionNames__Enum_CrewmatesRemainingForVitals = 0x00000064,
+ Int32OptionNames__Enum_CrewmateVentUses = 0x00000065,
+ Int32OptionNames__Enum_ImpostorPlayerID = 0x00000066,
+ };
+
#endif
- struct RoleOptionsData* RoleOptions;
+
#if defined(_CPLUSPLUS_)
- GameType__Enum gameType;
+ enum class UInt32OptionNames__Enum : int32_t {
+ Invalid = 0x00000000,
+ Keywords = 0x00000001,
+ };
+
#else
- int32_t gameType;
+ enum UInt32OptionNames__Enum {
+ UInt32OptionNames__Enum_Invalid = 0x00000000,
+ UInt32OptionNames__Enum_Keywords = 0x00000001,
+ };
+
#endif
- void* settings;
+
+#if defined(_CPLUSPLUS_)
+ enum class Int32ArrayOptionNames__Enum : int32_t {
+ Invalid = 0x00000000,
+ MaxImpostors = 0x00000001,
+ MinPlayers = 0x00000002,
};
- struct GameOptionsData
- {
- struct GameOptionsData__Class* klass;
- void* monitor;
- struct GameOptionsData__Fields fields;
+#else
+ enum Int32ArrayOptionNames__Enum {
+ Int32ArrayOptionNames__Enum_Invalid = 0x00000000,
+ Int32ArrayOptionNames__Enum_MaxImpostors = 0x00000001,
+ Int32ArrayOptionNames__Enum_MinPlayers = 0x00000002,
};
- struct GameOptionsData__VTable
- {
- VirtualInvokeData Equals;
- VirtualInvokeData Finalize;
- VirtualInvokeData GetHashCode;
- VirtualInvokeData ToString;
+#endif
+
+#if defined(_CPLUSPLUS_)
+ enum class FloatArrayOptionNames__Enum : int32_t {
+ Invalid = 0x00000000,
+ KillDistances = 0x00000001,
};
- struct GameOptionsData__StaticFields
- {
- void* KillDistances;
- void* KillDistanceStrings;
- void* RecommendedKillCooldown;
- void* RecommendedImpostors;
- void* MaxImpostors;
- void* MinPlayers;
+#else
+ enum FloatArrayOptionNames__Enum {
+ FloatArrayOptionNames__Enum_Invalid = 0x00000000,
+ FloatArrayOptionNames__Enum_KillDistances = 0x00000001,
};
- struct GameOptionsData__Class
- {
+#endif
+
+ struct IGameOptions {
+ struct IGameOptions__Class* klass;
+ MonitorData* monitor;
+ };
+
+ struct IGameOptions__VTable {
+ VirtualInvokeData get_Version;
+ VirtualInvokeData get_GameMode;
+ VirtualInvokeData get_MaxPlayers;
+ VirtualInvokeData get_Keywords;
+ VirtualInvokeData get_MapId;
+ VirtualInvokeData get_NumImpostors;
+ VirtualInvokeData get_TotalTaskCount;
+ VirtualInvokeData get_IsDefaults;
+ VirtualInvokeData get_RoleOptions;
+ VirtualInvokeData AreInvalid;
+ VirtualInvokeData SetRecommendations;
+ VirtualInvokeData SetByte;
+ VirtualInvokeData SetFloat;
+ VirtualInvokeData SetBool;
+ VirtualInvokeData SetInt;
+ VirtualInvokeData SetUInt;
+ VirtualInvokeData GetByte;
+ VirtualInvokeData GetFloat;
+ VirtualInvokeData GetBool;
+ VirtualInvokeData GetInt;
+ VirtualInvokeData GetIntArray;
+ VirtualInvokeData GetFloatArray;
+ VirtualInvokeData TryGetByte;
+ VirtualInvokeData TryGetFloat;
+ VirtualInvokeData TryGetBool;
+ VirtualInvokeData TryGetInt;
+ VirtualInvokeData TryGetIntArray;
+ VirtualInvokeData TryGetFloatArray;
+ };
+
+ struct IGameOptions__StaticFields {
+ };
+
+ struct IGameOptions__Class {
Il2CppClass_0 _0;
Il2CppRuntimeInterfaceOffsetPair* interfaceOffsets;
- struct GameOptionsData__StaticFields* static_fields;
+ struct IGameOptions__StaticFields* static_fields;
const Il2CppRGCTXData* rgctx_data;
Il2CppClass_1 _1;
- struct GameOptionsData__VTable vtable;
+ struct IGameOptions__VTable vtable;
};
+
#pragma endregion
+
#pragma region List_1_GameData_PlayerInfo_
struct __declspec(align(4)) List_1_GameData_PlayerInfo___Fields
{
@@ -11319,315 +11703,6 @@ struct RoleEffectAnimation__Array {
};
#pragma endregion
-#pragma region RoleOptionsData
- struct __declspec(align(4)) RoleOptionsData__Fields
- {
- bool ShapeshifterLeaveSkin;
- float ShapeshifterCooldown;
- float ShapeshifterDuration;
- float ScientistCooldown;
- float ScientistBatteryCharge;
- float GuardianAngelCooldown;
- bool ImpostorsCanSeeProtect;
- float ProtectionDurationSeconds;
- float EngineerCooldown;
- float EngineerInVentMaxTime;
- struct Dictionary_2_RoleTypes_RoleOptionsData_RoleRate_* roleRates;
- };
-
- struct RoleOptionsData
- {
- struct RoleOptionsData__Class* klass;
- void* monitor;
- struct RoleOptionsData__Fields fields;
- };
-
- struct RoleOptionsData__VTable
- {
- VirtualInvokeData Equals;
- VirtualInvokeData Finalize;
- VirtualInvokeData GetHashCode;
- VirtualInvokeData ToString;
- };
-
- struct IEqualityComparer_1_RoleTypes_
- {
- struct IEqualityComparer_1_RoleTypes___Class* klass;
- MonitorData* monitor;
- };
-
- struct IEqualityComparer_1_RoleTypes___StaticFields
- {
- };
-
- struct IEqualityComparer_1_RoleTypes___VTable
- {
- VirtualInvokeData Equals;
- VirtualInvokeData GetHashCode;
- };
-
- struct IEqualityComparer_1_RoleTypes___Class
- {
- Il2CppClass_0 _0;
- Il2CppRuntimeInterfaceOffsetPair* interfaceOffsets;
- struct IEqualityComparer_1_RoleTypes___StaticFields* static_fields;
- const Il2CppRGCTXData* rgctx_data;
- Il2CppClass_1 _1;
- struct IEqualityComparer_1_RoleTypes___VTable vtable;
- };
-
- struct __declspec(align(4)) Dictionary_2_RoleTypes_RoleOptionsData_RoleRate___Fields
- {
- struct Int32__Array* buckets;
- struct Dictionary_2_TKey_TValue_Entry_RoleTypes_RoleOptionsData_RoleRate___Array* entries;
- int32_t count;
- int32_t version;
- int32_t freeList;
- int32_t freeCount;
- struct IEqualityComparer_1_RoleTypes_* comparer;
- struct Dictionary_2_TKey_TValue_KeyCollection_RoleTypes_RoleOptionsData_RoleRate_* keys;
- struct Dictionary_2_TKey_TValue_ValueCollection_RoleTypes_RoleOptionsData_RoleRate_* values;
- struct Object* _syncRoot;
- };
-
- struct __declspec(align(4)) Dictionary_2_TKey_TValue_ValueCollection_RoleTypes_RoleOptionsData_RoleRate___Fields
- {
- struct Dictionary_2_RoleTypes_RoleOptionsData_RoleRate_* dictionary;
- };
-
- struct Dictionary_2_TKey_TValue_ValueCollection_RoleTypes_RoleOptionsData_RoleRate_
- {
- struct Dictionary_2_TKey_TValue_ValueCollection_RoleTypes_RoleOptionsData_RoleRate___Class* klass;
- MonitorData* monitor;
- struct Dictionary_2_TKey_TValue_ValueCollection_RoleTypes_RoleOptionsData_RoleRate___Fields fields;
- };
-
- struct Dictionary_2_TKey_TValue_ValueCollection_RoleTypes_RoleOptionsData_RoleRate___VTable
- {
- VirtualInvokeData Equals;
- VirtualInvokeData Finalize;
- VirtualInvokeData GetHashCode;
- VirtualInvokeData ToString;
- VirtualInvokeData get_Count;
- VirtualInvokeData System_Collections_Generic_ICollection_TValue__get_IsReadOnly;
- VirtualInvokeData System_Collections_Generic_ICollection_TValue__Add;
- VirtualInvokeData System_Collections_Generic_ICollection_TValue__Clear;
- VirtualInvokeData System_Collections_Generic_ICollection_TValue__Contains;
- VirtualInvokeData CopyTo;
- VirtualInvokeData System_Collections_Generic_ICollection_TValue__Remove;
- VirtualInvokeData System_Collections_Generic_IEnumerable_TValue__GetEnumerator;
- VirtualInvokeData System_Collections_IEnumerable_GetEnumerator;
- VirtualInvokeData System_Collections_ICollection_CopyTo;
- VirtualInvokeData get_Count_1;
- VirtualInvokeData System_Collections_ICollection_get_SyncRoot;
- VirtualInvokeData System_Collections_ICollection_get_IsSynchronized;
- VirtualInvokeData get_Count_2;
- };
-
- struct Dictionary_2_TKey_TValue_ValueCollection_RoleTypes_RoleOptionsData_RoleRate___StaticFields
- {
- };
-
- struct Dictionary_2_TKey_TValue_ValueCollection_RoleTypes_RoleOptionsData_RoleRate___Class
- {
- Il2CppClass_0 _0;
- Il2CppRuntimeInterfaceOffsetPair* interfaceOffsets;
- struct Dictionary_2_TKey_TValue_ValueCollection_RoleTypes_RoleOptionsData_RoleRate___StaticFields* static_fields;
- const Il2CppRGCTXData* rgctx_data;
- Il2CppClass_1 _1;
- struct Dictionary_2_TKey_TValue_ValueCollection_RoleTypes_RoleOptionsData_RoleRate___VTable vtable;
- };
-
- struct __declspec(align(4)) Dictionary_2_TKey_TValue_KeyCollection_RoleTypes_RoleOptionsData_RoleRate___Fields
- {
- struct Dictionary_2_RoleTypes_RoleOptionsData_RoleRate_* dictionary;
- };
-
- struct Dictionary_2_TKey_TValue_KeyCollection_RoleTypes_RoleOptionsData_RoleRate_
- {
- struct Dictionary_2_TKey_TValue_KeyCollection_RoleTypes_RoleOptionsData_RoleRate___Class* klass;
- MonitorData* monitor;
- struct Dictionary_2_TKey_TValue_KeyCollection_RoleTypes_RoleOptionsData_RoleRate___Fields fields;
- };
-
- struct Dictionary_2_TKey_TValue_KeyCollection_RoleTypes_RoleOptionsData_RoleRate___VTable
- {
- VirtualInvokeData Equals;
- VirtualInvokeData Finalize;
- VirtualInvokeData GetHashCode;
- VirtualInvokeData ToString;
- VirtualInvokeData get_Count;
- VirtualInvokeData System_Collections_Generic_ICollection_TKey__get_IsReadOnly;
- VirtualInvokeData System_Collections_Generic_ICollection_TKey__Add;
- VirtualInvokeData System_Collections_Generic_ICollection_TKey__Clear;
- VirtualInvokeData System_Collections_Generic_ICollection_TKey__Contains;
- VirtualInvokeData CopyTo;
- VirtualInvokeData System_Collections_Generic_ICollection_TKey__Remove;
- VirtualInvokeData System_Collections_Generic_IEnumerable_TKey__GetEnumerator;
- VirtualInvokeData System_Collections_IEnumerable_GetEnumerator;
- VirtualInvokeData System_Collections_ICollection_CopyTo;
- VirtualInvokeData get_Count_1;
- VirtualInvokeData System_Collections_ICollection_get_SyncRoot;
- VirtualInvokeData System_Collections_ICollection_get_IsSynchronized;
- VirtualInvokeData get_Count_2;
- };
-
- struct Dictionary_2_TKey_TValue_KeyCollection_RoleTypes_RoleOptionsData_RoleRate___StaticFields
- {
- };
-
- struct Dictionary_2_TKey_TValue_KeyCollection_RoleTypes_RoleOptionsData_RoleRate___Class
- {
- Il2CppClass_0 _0;
- Il2CppRuntimeInterfaceOffsetPair* interfaceOffsets;
- struct Dictionary_2_TKey_TValue_KeyCollection_RoleTypes_RoleOptionsData_RoleRate___StaticFields* static_fields;
- const Il2CppRGCTXData* rgctx_data;
- Il2CppClass_1 _1;
- struct Dictionary_2_TKey_TValue_KeyCollection_RoleTypes_RoleOptionsData_RoleRate___VTable vtable;
- };
-
- struct Dictionary_2_RoleTypes_RoleOptionsData_RoleRate_
- {
- struct Dictionary_2_RoleTypes_RoleOptionsData_RoleRate___Class* klass;
- MonitorData* monitor;
- struct Dictionary_2_RoleTypes_RoleOptionsData_RoleRate___Fields fields;
- };
-
- struct Dictionary_2_RoleTypes_RoleOptionsData_RoleRate___VTable
- {
- VirtualInvokeData Equals;
- VirtualInvokeData Finalize;
- VirtualInvokeData GetHashCode;
- VirtualInvokeData ToString;
- VirtualInvokeData get_Item;
- VirtualInvokeData set_Item;
- VirtualInvokeData System_Collections_Generic_IDictionary_TKey_TValue__get_Keys;
- VirtualInvokeData System_Collections_Generic_IDictionary_TKey_TValue__get_Values;
- VirtualInvokeData ContainsKey;
- VirtualInvokeData Add;
- VirtualInvokeData Remove;
- VirtualInvokeData TryGetValue;
- VirtualInvokeData get_Count;
- VirtualInvokeData System_Collections_Generic_ICollection_System_Collections_Generic_KeyValuePair_TKey_TValue___get_IsReadOnly;
- VirtualInvokeData System_Collections_Generic_ICollection_System_Collections_Generic_KeyValuePair_TKey_TValue___Add;
- VirtualInvokeData Clear;
- VirtualInvokeData System_Collections_Generic_ICollection_System_Collections_Generic_KeyValuePair_TKey_TValue___Contains;
- VirtualInvokeData System_Collections_Generic_ICollection_System_Collections_Generic_KeyValuePair_TKey_TValue___CopyTo;
- VirtualInvokeData System_Collections_Generic_ICollection_System_Collections_Generic_KeyValuePair_TKey_TValue___Remove;
- VirtualInvokeData System_Collections_Generic_IEnumerable_System_Collections_Generic_KeyValuePair_TKey_TValue___GetEnumerator;
- VirtualInvokeData System_Collections_IEnumerable_GetEnumerator;
- VirtualInvokeData System_Collections_IDictionary_get_Item;
- VirtualInvokeData System_Collections_IDictionary_set_Item;
- VirtualInvokeData System_Collections_IDictionary_get_Keys;
- VirtualInvokeData System_Collections_IDictionary_get_Values;
- VirtualInvokeData System_Collections_IDictionary_Contains;
- VirtualInvokeData System_Collections_IDictionary_Add;
- VirtualInvokeData Clear_1;
- VirtualInvokeData System_Collections_IDictionary_get_IsReadOnly;
- VirtualInvokeData System_Collections_IDictionary_get_IsFixedSize;
- VirtualInvokeData System_Collections_IDictionary_GetEnumerator;
- VirtualInvokeData System_Collections_IDictionary_Remove;
- VirtualInvokeData System_Collections_ICollection_CopyTo;
- VirtualInvokeData get_Count_1;
- VirtualInvokeData System_Collections_ICollection_get_SyncRoot;
- VirtualInvokeData System_Collections_ICollection_get_IsSynchronized;
- VirtualInvokeData ContainsKey_1;
- VirtualInvokeData TryGetValue_1;
- VirtualInvokeData System_Collections_Generic_IReadOnlyDictionary_TKey_TValue__get_Keys;
- VirtualInvokeData System_Collections_Generic_IReadOnlyDictionary_TKey_TValue__get_Values;
- VirtualInvokeData get_Count_2;
- VirtualInvokeData GetObjectData;
- VirtualInvokeData OnDeserialization;
- VirtualInvokeData GetObjectData_1;
- VirtualInvokeData OnDeserialization_1;
- };
-
- struct Dictionary_2_RoleTypes_RoleOptionsData_RoleRate___Class
- {
- Il2CppClass_0 _0;
- Il2CppRuntimeInterfaceOffsetPair* interfaceOffsets;
- struct Dictionary_2_RoleTypes_RoleOptionsData_RoleRate___StaticFields* static_fields;
- const Il2CppRGCTXData* rgctx_data;
- Il2CppClass_1 _1;
- struct Dictionary_2_RoleTypes_RoleOptionsData_RoleRate___VTable vtable;
- };
-
- struct Dictionary_2_RoleTypes_RoleOptionsData_RoleRate___StaticFields
- {
- };
-
- struct RoleOptionsData_RoleRate
- {
- int32_t MaxCount;
- int32_t Chance;
- };
-
- struct Dictionary_2_TKey_TValue_Entry_RoleTypes_RoleOptionsData_RoleRate_
- {
- int32_t hashCode;
- int32_t next;
-#if defined(_CPLUSPLUS_)
- RoleTypes__Enum key;
-#else
- uint16_t key;
-#endif
- struct RoleOptionsData_RoleRate value;
- };
-
- struct Dictionary_2_TKey_TValue_Entry_RoleTypes_RoleOptionsData_RoleRate___Array
- {
- struct Dictionary_2_TKey_TValue_Entry_RoleTypes_RoleOptionsData_RoleRate___Array__Class* klass;
- MonitorData* monitor;
- Il2CppArrayBounds* bounds;
- il2cpp_array_size_t max_length;
- struct Dictionary_2_TKey_TValue_Entry_RoleTypes_RoleOptionsData_RoleRate_ vector[32];
- };
-
- struct Dictionary_2_TKey_TValue_Entry_RoleTypes_RoleOptionsData_RoleRate___Array__VTable
- {
- };
-
- struct Dictionary_2_TKey_TValue_Entry_RoleTypes_RoleOptionsData_RoleRate___Array__Class
- {
- Il2CppClass_0 _0;
- Il2CppRuntimeInterfaceOffsetPair* interfaceOffsets;
- struct Dictionary_2_TKey_TValue_Entry_RoleTypes_RoleOptionsData_RoleRate___Array__StaticFields* static_fields;
- const Il2CppRGCTXData* rgctx_data;
- Il2CppClass_1 _1;
- struct Dictionary_2_TKey_TValue_Entry_RoleTypes_RoleOptionsData_RoleRate___Array__VTable vtable;
- };
-
- struct RoleOptionsData__StaticFields
- {
- };
-
- struct Dictionary_2_TKey_TValue_Entry_RoleTypes_RoleOptionsData_RoleRate___Array__StaticFields
- {
- };
-
- struct RoleOptionsData__Class
- {
- Il2CppClass_0 _0;
- Il2CppRuntimeInterfaceOffsetPair* interfaceOffsets;
- struct RoleOptionsData__StaticFields* static_fields;
- const Il2CppRGCTXData* rgctx_data;
- Il2CppClass_1 _1;
- struct RoleOptionsData__VTable vtable;
- };
-#pragma endregion
-
-#pragma region Nullable_1_RoleTypes_
- struct Nullable_1_RoleTypes_
- {
-#if defined(_CPLUSPLUS_)
- RoleTypes__Enum value;
-#else
- uint16_t value;
-#endif
- bool has_value;
- };
-#pragma endregion
-
#pragma region RoleTypes__Enum__Array
struct RoleTypes__Enum__Array
{
@@ -11657,23 +11732,20 @@ struct RoleEffectAnimation__Array {
#pragma endregion
#pragma region List_1_RoleTypes_
- struct __declspec(align(4)) List_1_RoleTypes___Fields
- {
+ struct __declspec(align(4)) List_1_AmongUs_GameOptions_RoleTypes___Fields {
struct RoleTypes__Enum__Array* _items;
int32_t _size;
int32_t _version;
struct Object* _syncRoot;
};
- struct List_1_RoleTypes_
- {
- struct List_1_RoleTypes___Class* klass;
- void* monitor;
- struct List_1_RoleTypes___Fields fields;
+ struct List_1_AmongUs_GameOptions_RoleTypes_ {
+ struct List_1_AmongUs_GameOptions_RoleTypes___Class* klass;
+ MonitorData* monitor;
+ struct List_1_AmongUs_GameOptions_RoleTypes___Fields fields;
};
- struct List_1_RoleTypes___VTable
- {
+ struct List_1_AmongUs_GameOptions_RoleTypes___VTable {
VirtualInvokeData Equals;
VirtualInvokeData Finalize;
VirtualInvokeData GetHashCode;
@@ -11711,19 +11783,17 @@ struct RoleEffectAnimation__Array {
VirtualInvokeData get_Count_2;
};
- struct List_1_RoleTypes___StaticFields
- {
+ struct List_1_AmongUs_GameOptions_RoleTypes___StaticFields {
struct RoleTypes__Enum__Array* _emptyArray;
};
- struct List_1_RoleTypes___Class
- {
+ struct List_1_AmongUs_GameOptions_RoleTypes___Class {
Il2CppClass_0 _0;
Il2CppRuntimeInterfaceOffsetPair* interfaceOffsets;
- struct List_1_RoleTypes___StaticFields* static_fields;
+ struct List_1_AmongUs_GameOptions_RoleTypes___StaticFields* static_fields;
const Il2CppRGCTXData* rgctx_data;
Il2CppClass_1 _1;
- struct List_1_RoleTypes___VTable vtable;
+ struct List_1_AmongUs_GameOptions_RoleTypes___VTable vtable;
};
#pragma endregion
@@ -11802,8 +11872,7 @@ struct RoleEffectAnimation__Array {
struct MonoBehaviour__Fields _;
};
- struct PlainDoor__Fields
- {
+ struct PlainDoor__Fields {
struct SomeKindaDoor__Fields _;
#if defined(_CPLUSPLUS_)
SystemTypes__Enum Room;
@@ -11813,6 +11882,7 @@ struct RoleEffectAnimation__Array {
int32_t Id;
bool Open;
void* myCollider;
+ struct Collider2D* shadowCollider;
void* animator;
void* OpenDoorAnim;
void* CloseDoorAnim;
@@ -11898,8 +11968,7 @@ struct RoleEffectAnimation__Array {
#pragma endregion
#pragma region Vent
- struct Vent__Fields
- {
+ struct Vent__Fields {
struct MonoBehaviour__Fields _;
int32_t Id;
struct Vent* Left;
@@ -11912,7 +11981,7 @@ struct RoleEffectAnimation__Array {
struct Vector3 Offset;
float spreadAmount;
float spreadShift;
- void* myRend;
+ struct SpriteRenderer* myRend;
};
struct Vent
@@ -11957,6 +12026,8 @@ struct RoleEffectAnimation__Array {
struct __declspec(align(4)) StatsManager_Stats__Fields {
float banPoints;
int64_t lastGameStarted;
+ float FastestCrewmateWin_HideAndSeek;
+ float FastestImpostorWin_HideAndSeek;
void* gameplayStats;
void* winReasons;
void* loseReasons;
@@ -12288,6 +12359,8 @@ struct RoleEffectAnimation__Array {
VirtualInvokeData Finalize;
VirtualInvokeData GetHashCode;
VirtualInvokeData ToString;
+ VirtualInvokeData get_IsDead;
+ VirtualInvokeData get_IsAffectedByComms;
VirtualInvokeData CanUse;
VirtualInvokeData DidWin;
VirtualInvokeData Deinitialize;
@@ -12302,6 +12375,8 @@ struct RoleEffectAnimation__Array {
VirtualInvokeData IsValidTarget;
VirtualInvokeData FindClosestTarget;
VirtualInvokeData GetAbilityDistance;
+ VirtualInvokeData AdjustTasks;
+ VirtualInvokeData AppendTaskHint;
};
struct EngineerRole__StaticFields
@@ -12508,4 +12583,7 @@ struct RoleEffectAnimation__Array {
typedef Il2CppObject PlayerCustomizationData;
typedef Il2CppObject PlayerPurchasesData;
+ typedef Il2CppObject GameOptionsManager;
+ typedef Il2CppObject GameManager;
+ typedef Il2CppObject GameOptionsFactory;
}
\ No newline at end of file
diff --git a/gui/tabs/game_tab.cpp b/gui/tabs/game_tab.cpp
index 535ffe03..80f52648 100644
--- a/gui/tabs/game_tab.cpp
+++ b/gui/tabs/game_tab.cpp
@@ -13,21 +13,21 @@ namespace GameTab {
if (SteppedSliderFloat("Player Speed", &State.PlayerSpeed, 0.5f, 3.f, 0.25f, "%.2fx", ImGuiSliderFlags_Logarithmic | ImGuiSliderFlags_NoInput)) {
if (!IsInGame()) State.PlayerSpeed = State.PrevPlayerSpeed;
else {
- (*Game::pGameOptionsData)->fields._.playerSpeedMod = State.PlayerSpeed;
+ GameOptions().SetFloat(app::FloatOptionNames__Enum::PlayerSpeedMod, State.PlayerSpeed);
State.PrevPlayerSpeed = State.PlayerSpeed;
}
}
if (CustomListBoxInt("Kill Distance", &State.KillDistance, KILL_DISTANCE, 225 * State.dpiScale)) {
if (!IsInGame()) State.KillDistance = State.PrevKillDistance;
else {
- (*Game::pGameOptionsData)->fields._.killDistance = State.KillDistance;
+ GameOptions().SetInt(app::Int32OptionNames__Enum::KillDistance, State.KillDistance);
State.PrevKillDistance = State.KillDistance;
}
}
if (CustomListBoxInt("Task Bar Updates", &State.TaskBarUpdates, TASKBARUPDATES, 225 * State.dpiScale)) {
if (!IsInGame()) State.TaskBarUpdates = State.PrevTaskBarUpdates;
else {
- (*Game::pGameOptionsData)->fields.TaskBarMode = (TaskBarMode__Enum)State.TaskBarUpdates;
+ GameOptions().SetInt(app::Int32OptionNames__Enum::TaskBarMode, State.TaskBarUpdates);
State.PrevTaskBarUpdates = State.TaskBarUpdates;
}
}
@@ -94,51 +94,55 @@ namespace GameTab {
State.rpcQueue.push(new RpcUsePlatform());
}
#ifdef _DEBUG
- if ((IsInGame() || IsInLobby()) && Game::pGameOptionsData != NULL)
+ if (IsInGame() || IsInLobby())
{
ImGui::Dummy(ImVec2(7, 7) * State.dpiScale);
ImGui::Separator();
ImGui::Dummy(ImVec2(7, 7) * State.dpiScale);
- app::GameOptionsData* options = *Game::pGameOptionsData;
- if (options != NULL)
+ GameOptions options;
+ if (options.GetGameMode() == GameModes__Enum::Normal)
{
auto allPlayers = GetAllPlayerControl();
- RoleRates roleRates = RoleRates(options->fields, (int)allPlayers.size());
+ RoleRates roleRates = RoleRates(options, (int)allPlayers.size());
// this should be all the major ones. if people want more they're simple enough to add.
- ImGui::Text("Visual Tasks: %s", (options->fields.VisualTasks == true ? "on" : "off"));
- ImGui::Text("Taskbar Update Mode: %s", (options->fields.TaskBarMode == app::TaskBarMode__Enum::Normal ? "Normal" : "MeetingOnly"));
- ImGui::Text("Confirm Impostor: %s", (options->fields.ConfirmImpostor == true ? "on" : "off"));
- ImGui::Text("Kill CD: %.2f", options->fields._.killCooldown);
+ ImGui::Text("Visual Tasks: %s", (options.GetBool(app::BoolOptionNames__Enum::VisualTasks) ? "on" : "off"));
+ ImGui::Text("Taskbar Update Mode: %s", (options.GetInt(app::Int32OptionNames__Enum::TaskBarMode)
+ == (int)app::TaskBarMode__Enum::Normal ? "Normal" : "MeetingOnly"));
+ ImGui::Text("Confirm Impostor: %s", (options.GetBool(app::BoolOptionNames__Enum::ConfirmImpostor) ? "on" : "off"));
+ ImGui::Text("Kill CD: %.2f", options.GetKillCooldown());
ImGui::Dummy(ImVec2(3, 3) * State.dpiScale);
ImGui::Separator();
ImGui::Dummy(ImVec2(3, 3) * State.dpiScale);
ImGui::Text("Max Engineers: %d", roleRates.GetRoleCount(app::RoleTypes__Enum::Engineer));
- ImGui::Text("Engineer CD: %.2f", options->fields.RoleOptions->fields.EngineerCooldown);
- ImGui::Text("Engineer Duration: %.2f", options->fields.RoleOptions->fields.EngineerInVentMaxTime);
+ ImGui::Text("Engineer CD: %.2f", options.GetFloat(app::FloatOptionNames__Enum::EngineerCooldown, 1.0F));
+ ImGui::Text("Engineer Duration: %.2f", options.GetFloat(app::FloatOptionNames__Enum::EngineerInVentMaxTime, 1.0F) );
ImGui::Dummy(ImVec2(3, 3) * State.dpiScale);
ImGui::Separator();
ImGui::Dummy(ImVec2(3, 3) * State.dpiScale);
ImGui::Text("Max Angels: %d", roleRates.GetRoleCount(app::RoleTypes__Enum::GuardianAngel));
- ImGui::Text("Angel CD: %.2f", options->fields.RoleOptions->fields.GuardianAngelCooldown);
- ImGui::Text("Angel Duration: %.2f", options->fields.RoleOptions->fields.ProtectionDurationSeconds);
+ ImGui::Text("Angel CD: %.2f", options.GetFloat(app::FloatOptionNames__Enum::GuardianAngelCooldown, 1.0F));
+ ImGui::Text("Angel Duration: %.2f", options.GetFloat(app::FloatOptionNames__Enum::ProtectionDurationSeconds, 1.0F));
ImGui::Dummy(ImVec2(3, 3) * State.dpiScale);
ImGui::Separator();
ImGui::Dummy(ImVec2(3, 3) * State.dpiScale);
ImGui::Text("Max Shapeshifters: %d", roleRates.GetRoleCount(app::RoleTypes__Enum::Shapeshifter));
- ImGui::Text("Shapeshifter CD: %.2f", options->fields.RoleOptions->fields.ShapeshifterCooldown);
- ImGui::Text("Shapeshifter Duration: %.2f", options->fields.RoleOptions->fields.ShapeshifterDuration);
+ ImGui::Text("Shapeshifter CD: %.2f", options.GetFloat(app::FloatOptionNames__Enum::ShapeshifterCooldown, 1.0F));
+ ImGui::Text("Shapeshifter Duration: %.2f", options.GetFloat(app::FloatOptionNames__Enum::ShapeshifterDuration, 1.0F));
ImGui::Dummy(ImVec2(3, 3) * State.dpiScale);
ImGui::Separator();
ImGui::Dummy(ImVec2(3, 3) * State.dpiScale);
}
+ else if (options.GetGameMode() == GameModes__Enum::HideNSeek) {
+ // TODO: HideNSeek
+ }
}
#endif
ImGui::EndTabItem();
diff --git a/gui/tabs/host_tab.cpp b/gui/tabs/host_tab.cpp
index 12dc0f63..4f67b99d 100644
--- a/gui/tabs/host_tab.cpp
+++ b/gui/tabs/host_tab.cpp
@@ -7,18 +7,18 @@
namespace HostTab {
static void SetRoleAmount(RoleTypes__Enum type, int amount) {
- il2cpp::Dictionary roleRates = (*Game::pGameOptionsData)->fields.RoleOptions->fields.roleRates;
- if (auto value = roleRates[type]) {
- if (amount > 0)
- value->Chance = 100;
- if (amount > value->MaxCount)
- value->MaxCount = amount;
- }
+ auto&& options = GameOptions().GetRoleOptions();
+ auto maxCount = options.GetNumPerGame(type);
+ if (amount > maxCount)
+ options.SetRoleRate(type, amount, 100);
+ else if (amount > 0)
+ options.SetRoleRate(type, maxCount, 100);
}
void Render() {
if (IsHost() && IsInLobby()) {
if (ImGui::BeginTabItem("Host")) {
+ GameOptions options;
ImGui::Text("Select Roles:");
ImGui::BeginChild("host#list", ImVec2(200, 0) * State.dpiScale, true);
bool shouldEndListBox = ImGui::ListBoxHeader("Choose Roles", ImVec2(200, 150) * State.dpiScale);
@@ -56,8 +56,8 @@ namespace HostTab {
SetRoleAmount(RoleTypes__Enum::Engineer, State.engineers_amount);
SetRoleAmount(RoleTypes__Enum::Scientist, State.scientists_amount);
SetRoleAmount(RoleTypes__Enum::Shapeshifter, State.shapeshifters_amount);
- if((*Game::pGameOptionsData)->fields._.numImpostors <= State.impostors_amount + State.shapeshifters_amount)
- (*Game::pGameOptionsData)->fields._.numImpostors = State.impostors_amount + State.shapeshifters_amount;
+ if(options.GetNumImpostors() <= State.impostors_amount + State.shapeshifters_amount)
+ options.SetInt(app::Int32OptionNames__Enum::NumImpostors, State.impostors_amount + State.shapeshifters_amount);
}
}
}
@@ -68,16 +68,16 @@ namespace HostTab {
ImGui::BeginChild("host#actions", ImVec2(200, 0) * State.dpiScale, true);
// AU v2022.8.24 has been able to change maps in lobby.
- State.mapHostChoice = (*Game::pGameOptionsData)->fields.MapId;
+ State.mapHostChoice = options.GetByte(app::ByteOptionNames__Enum::MapId);
State.mapHostChoice = std::clamp(State.mapHostChoice, 0, 4);
if (CustomListBoxInt("Map", &State.mapHostChoice, MAP_NAMES, 75 * State.dpiScale)) {
if (!IsInGame()) {
if (State.mapHostChoice == 3) {
- (*Game::pGameOptionsData)->fields.MapId = 0;
+ options.SetByte(app::ByteOptionNames__Enum::MapId, 0);
State.FlipSkeld = true;
}
else {
- (*Game::pGameOptionsData)->fields.MapId = State.mapHostChoice;
+ options.SetByte(app::ByteOptionNames__Enum::MapId, State.mapHostChoice);
State.FlipSkeld = false;
}
}
diff --git a/gui/tabs/self_tab.cpp b/gui/tabs/self_tab.cpp
index 8c9d483e..61c82a39 100644
--- a/gui/tabs/self_tab.cpp
+++ b/gui/tabs/self_tab.cpp
@@ -1,4 +1,4 @@
-#include "pch-il2cpp.h"
+#include "pch-il2cpp.h"
#include "self_tab.h"
#include "game.h"
#include "gui-helpers.hpp"
@@ -71,7 +71,9 @@ namespace SelfTab {
if (ImGui::Checkbox("Reveal Votes", &State.RevealVotes)) {
State.Save();
}
- if (!IsInGame() && !IsInLobby() || (*Game::pGameOptionsData)->fields.AnonymousVotes) {
+ if (!IsInGame() && !IsInLobby()
+ || GameOptions().GetGameMode() != GameModes__Enum::Normal
+ || GameOptions().GetBool(app::BoolOptionNames__Enum::AnonymousVotes)) {
ImGui::SameLine();
if (ImGui::Checkbox("Reveal Anonymous Votes", &State.RevealAnonymousVotes)) {
State.Save();
@@ -125,11 +127,11 @@ namespace SelfTab {
auto self = GetPlayerData(*Game::pLocalPlayer);
if (self->fields.IsDead)
return;
+ GameOptions options;
if (PlayerIsImpostor(self)
- && (*Game::pGameOptionsData)->fields.RoleOptions->fields.ImpostorsCanSeeProtect)
+ && options.GetBool(app::BoolOptionNames__Enum::ImpostorsCanSeeProtect))
return;
- float& _Duration = (*Game::pGameOptionsData)->fields.RoleOptions->fields.ProtectionDurationSeconds;
- const float ProtectionDurationSeconds = _Duration;
+ const float ProtectionDurationSeconds = options.GetFloat(app::FloatOptionNames__Enum::ProtectionDurationSeconds, 1.0F);
for (auto player : GetAllPlayerControl()) {
if (!player->fields.protectedByGuardian)
continue;
@@ -149,10 +151,11 @@ namespace SelfTab {
synchronized(State.protectMutex) {
pair = State.protectMonitor[player->fields.PlayerId];
}
- _Duration = ProtectionDurationSeconds - (app::Time_get_time(nullptr) - pair.second);
+ float _Duration = ProtectionDurationSeconds - (app::Time_get_time(nullptr) - pair.second);
+ options.SetFloat(app::FloatOptionNames__Enum::ProtectionDurationSeconds, _Duration);
if (_Duration > 0.f)
app::PlayerControl_TurnOnProtection(player, State.ShowProtections, pair.first, nullptr);
- _Duration = ProtectionDurationSeconds;
+ options.SetFloat(app::FloatOptionNames__Enum::ProtectionDurationSeconds, ProtectionDurationSeconds);
}
}
}
\ No newline at end of file
diff --git a/gui/tabs/settings_tab.cpp b/gui/tabs/settings_tab.cpp
index e2576ca1..7161cb9c 100644
--- a/gui/tabs/settings_tab.cpp
+++ b/gui/tabs/settings_tab.cpp
@@ -62,10 +62,11 @@ namespace SettingsTab {
State.userName = std::string(*nameBuffer);
}
}
-
+ /*
ImGui::Dummy(ImVec2(7, 7) * State.dpiScale);
ImGui::Separator();
ImGui::Dummy(ImVec2(7, 7) * State.dpiScale);
+
if (ImGui::Button("Unlock all Steam achievements"))
{
for (const char* achievement : steamAchievements)
@@ -73,7 +74,7 @@ namespace SettingsTab {
Game::SteamUserStats_SetAchievement(convert_to_string(std::string(achievement)));
}
Game::SteamUserStats_StoreStats();
- }
+ }*/
ImGui::EndTabItem();
}
diff --git a/hooks/GameOptionsData.cpp b/hooks/GameOptionsData.cpp
deleted file mode 100644
index ce2c062e..00000000
--- a/hooks/GameOptionsData.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-#include "pch-il2cpp.h"
-#include "_hooks.h"
-#include "state.hpp"
-
-GameOptionsData* dGameOptionsData_Deserialize(BinaryReader* reader, MethodInfo* method) {
- auto gameOptions = GameOptionsData_Deserialize(reader, method);
-
- State.PrevPlayerSpeed = gameOptions->fields._.playerSpeedMod;
- State.PlayerSpeed = gameOptions->fields._.playerSpeedMod;
- State.PrevKillDistance = gameOptions->fields._.killDistance;
- State.KillDistance = gameOptions->fields._.killDistance;
- State.PrevTaskBarUpdates = (int)gameOptions->fields.TaskBarMode;
- State.TaskBarUpdates = (int)gameOptions->fields.TaskBarMode;
- State.mapHostChoice = gameOptions->fields.MapId;
- State.impostors_amount = gameOptions->fields._.numImpostors;
-
- return gameOptions;
-}
-
-GameOptionsData* dGameOptionsData_Deserialize_1(MessageReader* reader, MethodInfo* method) {
- auto gameOptions = GameOptionsData_Deserialize_1(reader, method);
-
- State.PrevPlayerSpeed = gameOptions->fields._.playerSpeedMod;
- State.PlayerSpeed = gameOptions->fields._.playerSpeedMod;
- State.PrevKillDistance = gameOptions->fields._.killDistance;
- State.KillDistance = gameOptions->fields._.killDistance;
- State.PrevTaskBarUpdates = (int)gameOptions->fields.TaskBarMode;
- State.TaskBarUpdates = (int)gameOptions->fields.TaskBarMode;
- State.mapHostChoice = gameOptions->fields.MapId;
- State.impostors_amount = gameOptions->fields._.numImpostors;
-
- return gameOptions;
-}
\ No newline at end of file
diff --git a/hooks/GameOptionsManager.cpp b/hooks/GameOptionsManager.cpp
new file mode 100644
index 00000000..280bb968
--- /dev/null
+++ b/hooks/GameOptionsManager.cpp
@@ -0,0 +1,11 @@
+#include "pch-il2cpp.h"
+#include "_hooks.h"
+#include "state.hpp"
+
+void dGameOptionsManager_set_CurrentGameOptions(GameOptionsManager* __this, IGameOptions* value, MethodInfo* method) {
+ GameOptionsManager_set_CurrentGameOptions(__this, value, method);
+ GameOptions gameOptions(value);
+ if (gameOptions.HasOptions()) {
+ SaveGameOptions(gameOptions);
+ }
+}
\ No newline at end of file
diff --git a/hooks/HudManager.cpp b/hooks/HudManager.cpp
index bffad002..c183a10f 100644
--- a/hooks/HudManager.cpp
+++ b/hooks/HudManager.cpp
@@ -4,15 +4,6 @@
#include "utility.h"
#include "game.h"
-void dHudManager_ShowMap(HudManager* __this, Action_1_MapBehaviour_* mapAction, MethodInfo* method) {
- HudManager_ShowMap(__this, mapAction, method);
-
- //if (State.ChatAlwaysActive)
- // ChatController_SetVisible(__this->fields.Chat, true, NULL);
- //else
- // ChatController_SetVisible(__this->fields.Chat, false, NULL);
-}
-
void dHudManager_Update(HudManager* __this, MethodInfo* method) {
static bool bChatAlwaysActivePrevious = false;
if (bChatAlwaysActivePrevious != State.ChatAlwaysActive)
diff --git a/hooks/InnerNetClient.cpp b/hooks/InnerNetClient.cpp
index 20794dcd..f9e5052c 100644
--- a/hooks/InnerNetClient.cpp
+++ b/hooks/InnerNetClient.cpp
@@ -162,7 +162,7 @@ bool bogusTransformSnap(PlayerSelection& _player, Vector2 newPosition)
return false; //For some reason the playercontroller is not marked dead at this point, so we check what layer the player is on
auto currentPosition = PlayerControl_GetTruePosition(player.get_PlayerControl(), NULL);
auto distanceToTarget = (int32_t)Vector2_Distance(currentPosition, newPosition, NULL); //rounding off as the smallest kill distance is zero
- auto killDistance = std::clamp((*Game::pGameOptionsData)->fields._.killDistance, 0, 2);
+ auto killDistance = std::clamp(GameOptions().GetInt(app::Int32OptionNames__Enum::KillDistance), 0, 2);
auto initialSpawnLocation = GetSpawnLocation(player.get_PlayerControl()->fields.PlayerId, (int)il2cpp::List((*Game::pGameData)->fields.AllPlayers).size(), true);
auto meetingSpawnLocation = GetSpawnLocation(player.get_PlayerControl()->fields.PlayerId, (int)il2cpp::List((*Game::pGameData)->fields.AllPlayers).size(), false);
if (Equals(initialSpawnLocation, newPosition)) return false;
@@ -227,7 +227,7 @@ void dInnerNetClient_DisconnectInternal(InnerNetClient* __this, DisconnectReason
// IsInGame() || IsInLobby()
if (__this->fields.GameState == InnerNetClient_GameStates__Enum::Started
|| __this->fields.GameState == InnerNetClient_GameStates__Enum::Joined
- || __this->fields.GameMode == GameModes__Enum::FreePlay) {
+ || __this->fields.NetworkMode == NetworkModes__Enum::FreePlay) {
onGameEnd();
}
InnerNetClient_DisconnectInternal(__this, reason, stringReason, method);
diff --git a/hooks/MeetingHud.cpp b/hooks/MeetingHud.cpp
index 6d77e1d3..372d1239 100644
--- a/hooks/MeetingHud.cpp
+++ b/hooks/MeetingHud.cpp
@@ -103,18 +103,19 @@ void dMeetingHud_PopulateResults(MeetingHud* __this, Il2CppArraySize* states, Me
}
}
- auto prevAnonymousVotes = (*Game::pGameOptionsData)->fields.AnonymousVotes;
+ GameOptions options;
+ const auto prevAnonymousVotes = options.GetBool(app::BoolOptionNames__Enum::AnonymousVotes);
if (prevAnonymousVotes && State.RevealAnonymousVotes)
- (*Game::pGameOptionsData)->fields.AnonymousVotes = false;
+ options.SetBool(app::BoolOptionNames__Enum::AnonymousVotes, false);
MeetingHud_PopulateResults(__this, states, method);
- (*Game::pGameOptionsData)->fields.AnonymousVotes = prevAnonymousVotes;
+ options.SetBool(app::BoolOptionNames__Enum::AnonymousVotes, prevAnonymousVotes);
}
void RevealAnonymousVotes() {
if (!State.InMeeting
|| !app::MeetingHud__TypeInfo
|| !app::MeetingHud__TypeInfo->static_fields->Instance
- || !(*Game::pGameOptionsData)->fields.AnonymousVotes)
+ || !GameOptions().GetBool(app::BoolOptionNames__Enum::AnonymousVotes))
return;
auto meetingHud = app::MeetingHud__TypeInfo->static_fields->Instance;
for (auto votedForArea : il2cpp::Array(meetingHud->fields.playerStates)) {
@@ -179,9 +180,10 @@ void dMeetingHud_Update(MeetingHud* __this, MethodInfo* method) {
// avoid duplicate votes
if (isBeforeResultsState) {
- auto prevAnonymousVotes = (*Game::pGameOptionsData)->fields.AnonymousVotes;
+ GameOptions options;
+ const auto prevAnonymousVotes = options.GetBool(app::BoolOptionNames__Enum::AnonymousVotes);
if (prevAnonymousVotes && State.RevealAnonymousVotes)
- (*Game::pGameOptionsData)->fields.AnonymousVotes = false;
+ options.SetBool(app::BoolOptionNames__Enum::AnonymousVotes, false);
if (playerVoteArea->fields.VotedFor != Game::SkippedVote) {
for (auto votedForArea : playerStates) {
if (votedForArea->fields.TargetPlayerId == playerVoteArea->fields.VotedFor) {
@@ -195,7 +197,7 @@ void dMeetingHud_Update(MeetingHud* __this, MethodInfo* method) {
auto transform = app::GameObject_get_transform(__this->fields.SkippedVoting, nullptr);
MeetingHud_BloopAVoteIcon(__this, playerData, 0, transform, nullptr);
}
- (*Game::pGameOptionsData)->fields.AnonymousVotes = prevAnonymousVotes;
+ options.SetBool(app::BoolOptionNames__Enum::AnonymousVotes, prevAnonymousVotes);
}
}
else if (!didVote && State.voteMonitor.find(playerData->fields.PlayerId) != State.voteMonitor.end())
diff --git a/hooks/NoShadowBehaviour.cpp b/hooks/NoShadowBehaviour.cpp
index 5a61eef4..0442593f 100644
--- a/hooks/NoShadowBehaviour.cpp
+++ b/hooks/NoShadowBehaviour.cpp
@@ -4,11 +4,11 @@
#include "logger.h"
void dNoShadowBehaviour_LateUpdate(NoShadowBehaviour* __this, MethodInfo* method) {
- if ((State.Wallhack || State.FreeCam || State.EnableZoom) && !State.OcclusionCulling) {
+ /*22.12.08e if ((State.Wallhack || State.FreeCam || State.EnableZoom) && !State.OcclusionCulling) {
NoShadowBehaviour_SetMaskFunction(__this, 8, NULL);
}
else {
NoShadowBehaviour_LateUpdate(__this, method);
- }
+ }*/
return;
}
\ No newline at end of file
diff --git a/hooks/PlayerControl.cpp b/hooks/PlayerControl.cpp
index f4551e14..18071fd5 100644
--- a/hooks/PlayerControl.cpp
+++ b/hooks/PlayerControl.cpp
@@ -239,16 +239,10 @@ void dPlayerControl_FixedUpdate(PlayerControl* __this, MethodInfo* method) {
app::PlayerControl_FixedUpdate(__this, method);
}
-void dPlayerControl_RpcSyncSettings(PlayerControl* __this, GameOptionsData* gameOptions, MethodInfo* method)
-{
- State.PrevPlayerSpeed = gameOptions->fields._.playerSpeedMod;
- State.PlayerSpeed = gameOptions->fields._.playerSpeedMod;
- State.PrevKillDistance = gameOptions->fields._.killDistance;
- State.KillDistance = gameOptions->fields._.killDistance;
- State.PrevTaskBarUpdates = (int)gameOptions->fields.TaskBarMode;
- State.TaskBarUpdates = (int)gameOptions->fields.TaskBarMode;
-
- PlayerControl_RpcSyncSettings(__this, gameOptions, method);
+void dPlayerControl_RpcSyncSettings(PlayerControl* __this, Byte__Array* optionsByteArray, MethodInfo* method) {
+ SaveGameOptions();
+
+ PlayerControl_RpcSyncSettings(__this, optionsByteArray, method);
}
void dPlayerControl_MurderPlayer(PlayerControl* __this, PlayerControl* target, MethodInfo* method)
diff --git a/hooks/RoleManager.cpp b/hooks/RoleManager.cpp
index b98f8559..f639af43 100644
--- a/hooks/RoleManager.cpp
+++ b/hooks/RoleManager.cpp
@@ -8,8 +8,9 @@
void dRoleManager_SelectRoles(RoleManager* __this, MethodInfo* method) {
std::vector assignedPlayers;
+ GameOptions options;
auto allPlayers = GetAllPlayerControl();
- auto roleRates = RoleRates((*Game::pGameOptionsData)->fields, (int)allPlayers.size());
+ auto roleRates = RoleRates(options, (int)allPlayers.size());
AssignPreChosenRoles(roleRates, assignedPlayers);
AssignRoles(roleRates, roleRates.ShapeshifterChance, RoleTypes__Enum::Shapeshifter, allPlayers, assignedPlayers);
@@ -19,13 +20,13 @@ void dRoleManager_SelectRoles(RoleManager* __this, MethodInfo* method) {
AssignRoles(roleRates, 100, RoleTypes__Enum::Crewmate, allPlayers, assignedPlayers);
}
-void dRoleManager_AssignRolesForTeam(List_1_GameData_PlayerInfo_* players, RoleOptionsData* opts, RoleTeamTypes__Enum team, int32_t teamMax, Nullable_1_RoleTypes_ defaultRole, MethodInfo* method) {
+/*void dRoleManager_AssignRolesForTeam(List_1_GameData_PlayerInfo_* players, RoleOptionsData* opts, RoleTeamTypes__Enum team, int32_t teamMax, Nullable_1_RoleTypes_ defaultRole, MethodInfo* method) {
return RoleManager_AssignRolesForTeam(players, opts, team, teamMax, defaultRole, method);
}
void dRoleManager_AssignRolesFromList(List_1_GameData_PlayerInfo_* players, int32_t teamMax, List_1_RoleTypes_* roleList, int32_t* rolesAssigned, MethodInfo* method) {
return RoleManager_AssignRolesFromList(players, teamMax, roleList, rolesAssigned, method);
-}
+}*/
void AssignPreChosenRoles(RoleRates& roleRates, std::vector& assignedPlayers)
{
diff --git a/hooks/_hooks.cpp b/hooks/_hooks.cpp
index 1a903121..c75258e3 100644
--- a/hooks/_hooks.cpp
+++ b/hooks/_hooks.cpp
@@ -110,22 +110,17 @@ void DetourInitilization() {
HOOKFUNC(ChatBubble_SetName);
HOOKFUNC(ChatController_AddChat);
HOOKFUNC(ChatController_SetVisible);
- HOOKFUNC(HudManager_ShowMap);
HOOKFUNC(HudManager_Update);
HOOKFUNC(Camera_ScreenToWorldPoint);
HOOKFUNC(KeyboardJoystick_Update);
HOOKFUNC(ScreenJoystick_FixedUpdate);
HOOKFUNC(PlainDoor_SetDoorway);
- HOOKFUNC(GameOptionsData_Deserialize);
- HOOKFUNC(GameOptionsData_Deserialize_1);
HOOKFUNC(PlayerControl_MurderPlayer);
HOOKFUNC(PlayerControl_CompleteTask);
- //HOOKFUNC(PlayerControl_CmdReportDeadBody);
- //HOOKFUNC(PlayerControl_ReportDeadBody);
HOOKFUNC(PlayerControl_StartMeeting);
HOOKFUNC(RoleManager_SelectRoles);
- HOOKFUNC(RoleManager_AssignRolesForTeam);
- HOOKFUNC(RoleManager_AssignRolesFromList);
+ //HOOKFUNC(RoleManager_AssignRolesForTeam);
+ //HOOKFUNC(RoleManager_AssignRolesFromList);
HOOKFUNC(PlayerControl_HandleRpc);
HOOKFUNC(Renderer_set_enabled);
HOOKFUNC(MeetingHud_Awake);
@@ -136,7 +131,7 @@ void DetourInitilization() {
HOOKFUNC(Constants_ShouldFlipSkeld);
HOOKFUNC(LobbyBehaviour_Start);
HOOKFUNC(GameObject_SetActive);
- HOOKFUNC(NoShadowBehaviour_LateUpdate);
+ //HOOKFUNC(NoShadowBehaviour_LateUpdate);
HOOKFUNC(FollowerCamera_Update);
HOOKFUNC(DoorBreakerGame_Start);
HOOKFUNC(DoorCardSwipeGame_Begin);
@@ -151,16 +146,14 @@ void DetourInitilization() {
HOOKFUNC(ChatController_Update);
HOOKFUNC(InnerNetClient_EnqueueDisconnect);
HOOKFUNC(PlayerPhysics_FixedUpdate);
- if (SaveManager_GetPurchase != nullptr)
- HOOKFUNC(SaveManager_GetPurchase);
- if (PlayerPurchasesData_GetPurchase != nullptr) // v2022.10.25s
- HOOKFUNC(PlayerPurchasesData_GetPurchase);
+ HOOKFUNC(PlayerPurchasesData_GetPurchase);
HOOKFUNC(PlayerControl_TurnOnProtection);
HOOKFUNC(AmongUsClient_OnGameEnd);
HOOKFUNC(InnerNetClient_DisconnectInternal);
HOOKFUNC(AccountManager_UpdateKidAccountDisplay);
HOOKFUNC(PlayerStorageManager_OnReadPlayerPrefsComplete);
HOOKFUNC(EOSManager_UpdatePermissionKeys);
+ HOOKFUNC(GameOptionsManager_set_CurrentGameOptions);
if (!HookFunction(&(PVOID&)oPresent, dPresent, "D3D_PRESENT_FUNCTION")) return;
@@ -174,10 +167,7 @@ void DetourUninitialization()
DetourUpdateThread(GetCurrentThread());
- if (SaveManager_GetPurchase != nullptr)
- UNHOOKFUNC(SaveManager_GetPurchase);
- if (PlayerPurchasesData_GetPurchase != nullptr) // v2022.10.25s
- UNHOOKFUNC(PlayerPurchasesData_GetPurchase);
+ UNHOOKFUNC(PlayerPurchasesData_GetPurchase);
UNHOOKFUNC(PlayerPhysics_FixedUpdate);
UNHOOKFUNC(GameObject_SetActive);
UNHOOKFUNC(SceneManager_Internal_ActiveSceneChanged);
@@ -202,22 +192,17 @@ void DetourUninitialization()
UNHOOKFUNC(ChatBubble_SetName);
UNHOOKFUNC(ChatController_AddChat);
UNHOOKFUNC(ChatController_SetVisible);
- UNHOOKFUNC(HudManager_ShowMap);
UNHOOKFUNC(HudManager_Update);
UNHOOKFUNC(ScreenJoystick_FixedUpdate);
UNHOOKFUNC(KeyboardJoystick_Update);
UNHOOKFUNC(Camera_ScreenToWorldPoint);
UNHOOKFUNC(PlainDoor_SetDoorway);
- UNHOOKFUNC(GameOptionsData_Deserialize);
- UNHOOKFUNC(GameOptionsData_Deserialize_1);
UNHOOKFUNC(PlayerControl_MurderPlayer);
UNHOOKFUNC(PlayerControl_CompleteTask);
- //UNHOOKFUNC(PlayerControl_CmdReportDeadBody);
- //UNHOOKFUNC(PlayerControl_ReportDeadBody);
UNHOOKFUNC(PlayerControl_StartMeeting);
UNHOOKFUNC(RoleManager_SelectRoles);
- UNHOOKFUNC(RoleManager_AssignRolesForTeam);
- UNHOOKFUNC(RoleManager_AssignRolesFromList);
+ //UNHOOKFUNC(RoleManager_AssignRolesForTeam);
+ //UNHOOKFUNC(RoleManager_AssignRolesFromList);
UNHOOKFUNC(PlayerControl_HandleRpc);
UNHOOKFUNC(Renderer_set_enabled);
UNHOOKFUNC(MeetingHud_Awake);
@@ -227,7 +212,7 @@ void DetourUninitialization()
UNHOOKFUNC(CustomNetworkTransform_SnapTo);
UNHOOKFUNC(Constants_ShouldFlipSkeld);
UNHOOKFUNC(LobbyBehaviour_Start);
- UNHOOKFUNC(NoShadowBehaviour_LateUpdate);
+ //UNHOOKFUNC(NoShadowBehaviour_LateUpdate);
UNHOOKFUNC(FollowerCamera_Update);
UNHOOKFUNC(DoorBreakerGame_Start);
UNHOOKFUNC(DoorCardSwipeGame_Begin);
@@ -247,6 +232,7 @@ void DetourUninitialization()
UNHOOKFUNC(AccountManager_UpdateKidAccountDisplay);
UNHOOKFUNC(PlayerStorageManager_OnReadPlayerPrefsComplete);
UNHOOKFUNC(EOSManager_UpdatePermissionKeys);
+ UNHOOKFUNC(GameOptionsManager_set_CurrentGameOptions);
if (DetourDetach(&(PVOID&)oPresent, dPresent) != 0) return;
diff --git a/hooks/_hooks.h b/hooks/_hooks.h
index ad23f06e..5645769d 100644
--- a/hooks/_hooks.h
+++ b/hooks/_hooks.h
@@ -12,13 +12,10 @@ bool dStatsManager_get_AmBanned(StatsManager* __this, MethodInfo* method);
float dShipStatus_CalculateLightRadius(ShipStatus* __this, GameData_PlayerInfo* player, MethodInfo* method);
float dStatsManager_get_BanPoints(StatsManager* __this, MethodInfo* method);
float dVent_CanUse(Vent* __this, GameData_PlayerInfo* pc, bool* canUse, bool* couldUse, MethodInfo* method);
-GameOptionsData* dGameOptionsData_Deserialize(BinaryReader* reader, MethodInfo* method);
-GameOptionsData* dGameOptionsData_Deserialize_1(MessageReader* reader, MethodInfo* method);
int32_t dStatsManager_get_BanMinutesLeft(StatsManager* __this, MethodInfo* method);
void dChatBubble_SetName(ChatBubble* __this, String* playerName, bool isDead, bool voted, Color color, MethodInfo* method);
void dChatController_AddChat(ChatController* __this, PlayerControl* sourcePlayer, String* chatText, MethodInfo* method);
void dChatController_SetVisible(ChatController* __this, bool visible, MethodInfo* method);
-void dHudManager_ShowMap(HudManager* __this, Action_1_MapBehaviour_* mapAction, MethodInfo* method);
void dHudManager_Update(HudManager* __this, MethodInfo* method);
Vector3 dCamera_ScreenToWorldPoint(Camera* __this, Vector3 position, MethodInfo* method);
void dKeyboardJoystick_Update(KeyboardJoystick* __this, MethodInfo* method);
@@ -32,9 +29,7 @@ void dPlayerControl_CompleteTask(PlayerControl* __this, uint32_t idx, MethodInfo
void dPlayerControl_FixedUpdate(PlayerControl* __this, MethodInfo* method);
void dPlayerControl_MurderPlayer(PlayerControl* __this, PlayerControl* target, MethodInfo* method);
void dPlayerControl_StartMeeting(PlayerControl* __this, GameData_PlayerInfo* target, MethodInfo* method);
-//void dPlayerControl_CmdReportDeadBody(PlayerControl* __this, GameData_PlayerInfo* target, MethodInfo* method);
-//void dPlayerControl_ReportDeadBody(PlayerControl*__this, GameData_PlayerInfo* target, MethodInfo *method);
-void dPlayerControl_RpcSyncSettings(PlayerControl* __this, GameOptionsData* gameOptions, MethodInfo* method);
+void dPlayerControl_RpcSyncSettings(PlayerControl* __this, Byte__Array* optionsByteArray, MethodInfo* method);
void dPlayerControl_HandleRpc(PlayerControl* __this, uint8_t callId, MessageReader* reader, MethodInfo* method);
void dPlayerControl_Shapeshift(PlayerControl* __this, PlayerControl* target, bool animate, MethodInfo* method);
void dPlayerControl_ProtectPlayer(PlayerControl* __this, PlayerControl* target, int32_t colorId, MethodInfo* method);
@@ -66,8 +61,8 @@ void dChatController_Update(ChatController* __this, MethodInfo* method);
void dInnerNetClient_EnqueueDisconnect(InnerNetClient* __this, DisconnectReasons__Enum reason, String* stringReason, MethodInfo* method);
void dInnerNetClient_DisconnectInternal(InnerNetClient* __this, DisconnectReasons__Enum reason, String* stringReason, MethodInfo* method);
void dRoleManager_SelectRoles(RoleManager* __this, MethodInfo * method);
-void dRoleManager_AssignRolesForTeam(List_1_GameData_PlayerInfo_* players, RoleOptionsData* opts, RoleTeamTypes__Enum team, int32_t teamMax, Nullable_1_RoleTypes_ defaultRole, MethodInfo* method);
-void dRoleManager_AssignRolesFromList(List_1_GameData_PlayerInfo_* players, int32_t teamMax, List_1_RoleTypes_* roleList, int32_t* rolesAssigned, MethodInfo* method);
+//void dRoleManager_AssignRolesForTeam(List_1_GameData_PlayerInfo_* players, RoleOptionsData* opts, RoleTeamTypes__Enum team, int32_t teamMax, Nullable_1_RoleTypes_ defaultRole, MethodInfo* method);
+//void dRoleManager_AssignRolesFromList(List_1_GameData_PlayerInfo_* players, int32_t teamMax, List_1_RoleTypes_* roleList, int32_t* rolesAssigned, MethodInfo* method);
void dPlayerPhysics_FixedUpdate (PlayerPhysics* __this, MethodInfo* method);
bool dSaveManager_GetPurchase(String* itemKey, String* bundleKey, MethodInfo* method);
void dPlayerControl_TurnOnProtection(PlayerControl* __this, bool visible, int32_t colorId, MethodInfo* method);
@@ -75,3 +70,4 @@ void dAmongUsClient_OnGameEnd(AmongUsClient* __this, Object* endGameResult, Meth
void dAccountManager_UpdateKidAccountDisplay(AccountManager* __this, MethodInfo* method);
void dPlayerStorageManager_OnReadPlayerPrefsComplete(PlayerStorageManager* __this, void* data, MethodInfo* method);
bool dPlayerPurchasesData_GetPurchase(PlayerPurchasesData* __this, String* itemKey, String* bundleKey, MethodInfo* method);
+void dGameOptionsManager_set_CurrentGameOptions(GameOptionsManager* __this, IGameOptions* value, MethodInfo* method);
diff --git a/user/game.cpp b/user/game.cpp
index b803c0d2..35764648 100644
--- a/user/game.cpp
+++ b/user/game.cpp
@@ -5,7 +5,6 @@
namespace Game {
AmongUsClient** pAmongUsClient = nullptr;
GameData** pGameData = nullptr;
- GameOptionsData** pGameOptionsData = nullptr;
List_1_PlayerControl_** pAllPlayerControls = nullptr;
PlayerControl** pLocalPlayer = nullptr;
ShipStatus** pShipStatus = nullptr;
diff --git a/user/game.h b/user/game.h
index 30d6da74..97823816 100644
--- a/user/game.h
+++ b/user/game.h
@@ -22,7 +22,6 @@ namespace Game {
extern AmongUsClient** pAmongUsClient;
extern GameData** pGameData;
- extern GameOptionsData** pGameOptionsData;
extern List_1_PlayerControl_** pAllPlayerControls;
extern PlayerControl** pLocalPlayer;
extern ShipStatus** pShipStatus;
diff --git a/user/main.cpp b/user/main.cpp
index e158df1e..98eb6994 100644
--- a/user/main.cpp
+++ b/user/main.cpp
@@ -112,7 +112,6 @@ void Run(LPVOID lpParam) {
#endif
GAME_STATIC_POINTER(Game::pAmongUsClient, app::AmongUsClient, Instance);
GAME_STATIC_POINTER(Game::pGameData, app::GameData, Instance);
- GAME_STATIC_POINTER(Game::pGameOptionsData, app::PlayerControl, GameOptions);
GAME_STATIC_POINTER(Game::pAllPlayerControls, app::PlayerControl, AllPlayerControls);
GAME_STATIC_POINTER(Game::pLocalPlayer, app::PlayerControl, LocalPlayer);
GAME_STATIC_POINTER(Game::pShipStatus, app::ShipStatus, Instance);
diff --git a/user/utility.cpp b/user/utility.cpp
index 7e4d8ffb..af67fcf9 100644
--- a/user/utility.cpp
+++ b/user/utility.cpp
@@ -16,18 +16,17 @@ int randi(int lo, int hi) {
return lo + i;
}
-RoleRates::RoleRates(const GameOptionsData__Fields& gameOptionsDataFields, int playerAmount) {
- this->ImposterCount = gameOptionsDataFields._.numImpostors;
+RoleRates::RoleRates(const class GameOptions& gameOptions, int playerAmount) {
+ this->ImposterCount = gameOptions.GetNumImpostors();
auto maxImpostors = GetMaxImposterAmount(playerAmount);
if(this->ImposterCount > maxImpostors)
this->ImposterCount = maxImpostors;
- il2cpp::Dictionary roleRates = gameOptionsDataFields.RoleOptions->fields.roleRates;
+ const auto& roleOptions = gameOptions.GetRoleOptions();
#define GET_ROLE_RATE(type) \
- if (auto value = roleRates[RoleTypes__Enum::##type]) { \
- this->type##Chance = value->Chance; \
- this->type##Count = value->MaxCount; \
- }
+ this->type##Chance = roleOptions.GetChancePerGame(RoleTypes__Enum::##type); \
+ this->type##Count = roleOptions.GetNumPerGame(RoleTypes__Enum::##type);
+
GET_ROLE_RATE(Engineer);
GET_ROLE_RATE(Scientist);
GET_ROLE_RATE(Shapeshifter);
@@ -232,13 +231,14 @@ ImVec4 AmongUsColorToImVec4(const Color32& color) {
return ImVec4(color.r / 255.0F, color.g / 255.0F, color.b / 255.0F, color.a / 255.0F);
}
-#define LocalInGame (((*Game::pAmongUsClient)->fields._.GameMode == GameModes__Enum::LocalGame) && ((*Game::pAmongUsClient)->fields._.GameState == InnerNetClient_GameStates__Enum::Started))
-#define OnlineInGame (((*Game::pAmongUsClient)->fields._.GameMode == GameModes__Enum::OnlineGame) && ((*Game::pAmongUsClient)->fields._.GameState == InnerNetClient_GameStates__Enum::Started))
-#define OnlineInLobby (((*Game::pAmongUsClient)->fields._.GameMode == GameModes__Enum::OnlineGame) && ((*Game::pAmongUsClient)->fields._.GameState == InnerNetClient_GameStates__Enum::Joined))
+#define LocalInGame (((*Game::pAmongUsClient)->fields._.NetworkMode == NetworkModes__Enum::LocalGame) && ((*Game::pAmongUsClient)->fields._.GameState == InnerNetClient_GameStates__Enum::Started))
+#define OnlineInGame (((*Game::pAmongUsClient)->fields._.NetworkMode == NetworkModes__Enum::OnlineGame) && ((*Game::pAmongUsClient)->fields._.GameState == InnerNetClient_GameStates__Enum::Started))
+#define OnlineInLobby (((*Game::pAmongUsClient)->fields._.NetworkMode == NetworkModes__Enum::OnlineGame) && ((*Game::pAmongUsClient)->fields._.GameState == InnerNetClient_GameStates__Enum::Joined))
#define TutorialScene (State.CurrentScene.compare("Tutorial") == 0)
bool IsInLobby() {
if (Object_1_IsNull((Object_1*)*Game::pAmongUsClient)) return false;
+ if (!app::GameManager_get_Instance(nullptr)) return false;
return OnlineInLobby && Object_1_IsNotNull((Object_1*)*Game::pLocalPlayer);
}
@@ -249,11 +249,13 @@ bool IsHost() {
bool IsInGame() {
if (Object_1_IsNull((Object_1*)*Game::pAmongUsClient)) return false;
+ if (!app::GameManager_get_Instance(nullptr)) return false;
return (LocalInGame || OnlineInGame || TutorialScene) && Object_1_IsNotNull((Object_1*)*Game::pShipStatus) && Object_1_IsNotNull((Object_1*)*Game::pLocalPlayer);
}
bool IsInMultiplayerGame() {
if (Object_1_IsNull((Object_1*)*Game::pAmongUsClient)) return false;
+ if (!app::GameManager_get_Instance(nullptr)) return false;
return (LocalInGame || OnlineInGame) && Object_1_IsNotNull((Object_1*)*Game::pShipStatus) && Object_1_IsNotNull((Object_1*)*Game::pLocalPlayer);
}
@@ -819,31 +821,184 @@ bool Object_1_IsNull(app::Object_1* obj)
}
std::string GetPlayerName() {
- if (app::PlayerCustomizationData_get_Name != nullptr) {
- // v2022.10.25s
- auto player = app::DataManager_get_Player(nullptr);
- static FieldInfo* field = il2cpp_class_get_field_from_name(player->Il2CppClass.klass, "customization");
- LOG_ASSERT(field != nullptr);
- auto customization = il2cpp_field_get_value_object(field, player);
- LOG_ASSERT(customization != nullptr);
- return convert_from_string(app::PlayerCustomizationData_get_Name(customization, nullptr));
- }
- else {
- return convert_from_string(app::SaveManager_get_PlayerName(nullptr));
- }
+ auto player = app::DataManager_get_Player(nullptr);
+ static FieldInfo* field = il2cpp_class_get_field_from_name(player->Il2CppClass.klass, "customization");
+ LOG_ASSERT(field != nullptr);
+ auto customization = il2cpp_field_get_value_object(field, player);
+ LOG_ASSERT(customization != nullptr);
+ return convert_from_string(app::PlayerCustomizationData_get_Name(customization, nullptr));
}
void SetPlayerName(std::string_view name) {
- if (app::PlayerCustomizationData_set_Name != nullptr) {
- // v2022.10.25s
- auto player = app::DataManager_get_Player(nullptr);
- static FieldInfo* field = il2cpp_class_get_field_from_name(player->Il2CppClass.klass, "customization");
- LOG_ASSERT(field != nullptr);
- auto customization = il2cpp_field_get_value_object(field, player);
- LOG_ASSERT(customization != nullptr);
- app::PlayerCustomizationData_set_Name(customization, convert_to_string(name), nullptr);
- }
- else {
- app::SaveManager_set_PlayerName(convert_to_string(name), nullptr);
- }
-}
\ No newline at end of file
+ auto player = app::DataManager_get_Player(nullptr);
+ static FieldInfo* field = il2cpp_class_get_field_from_name(player->Il2CppClass.klass, "customization");
+ LOG_ASSERT(field != nullptr);
+ auto customization = il2cpp_field_get_value_object(field, player);
+ LOG_ASSERT(customization != nullptr);
+ app::PlayerCustomizationData_set_Name(customization, convert_to_string(name), nullptr);
+}
+
+//TODO: Workaround
+#define GET_VIRTUAL_INVOKE(obj, method) \
+ ((VirtualInvokeData*)(&obj->klass->vtable))[ \
+ (obj->klass->interfaceOffsets ? obj->klass->interfaceOffsets[0].offset : 0) \
+ + offsetof(decltype(obj->klass->vtable), method) \
+ / sizeof(VirtualInvokeData)]
+
+GameOptions::GameOptions() : _options(nullptr) {
+ auto mgr = app::GameManager_get_Instance(nullptr);
+ LOG_ASSERT(mgr != nullptr);
+ auto logic = app::GameManager_get_LogicOptions(mgr, nullptr);
+ LOG_ASSERT(logic != nullptr);
+ auto& func = GET_VIRTUAL_INVOKE(logic, __unknown_4);
+ _options = ((app::IGameOptions*(*)(void*, const void*))(func.methodPtr))(logic, func.method);
+ LOG_ASSERT(_options != nullptr);
+}
+
+GameOptions& GameOptions::SetByte(app::ByteOptionNames__Enum option, uint8_t value) {
+ auto& func = GET_VIRTUAL_INVOKE(_options, SetByte);
+ ((void(*)(void*, app::ByteOptionNames__Enum, uint8_t, const void*))(func.methodPtr))
+ (_options, option, value, func.method);
+ return *this;
+}
+
+GameOptions& GameOptions::SetFloat(app::FloatOptionNames__Enum option, float value) {
+ auto& func = GET_VIRTUAL_INVOKE(_options, SetFloat);
+ ((void(*)(void*, app::FloatOptionNames__Enum, float, const void*))(func.methodPtr))
+ (_options, option, value, func.method);
+ return *this;
+}
+
+GameOptions& GameOptions::SetBool(app::BoolOptionNames__Enum option, bool value) {
+ auto& func = GET_VIRTUAL_INVOKE(_options, SetBool);
+ ((void(*)(void*, app::BoolOptionNames__Enum, bool, const void*))(func.methodPtr))
+ (_options, option, value, func.method);
+ return *this;
+}
+
+GameOptions& GameOptions::SetInt(app::Int32OptionNames__Enum option, int32_t value) {
+ auto& func = GET_VIRTUAL_INVOKE(_options, SetInt);
+ ((void(*)(void*, app::Int32OptionNames__Enum, int32_t, const void*))(func.methodPtr))
+ (_options, option, value, func.method);
+ return *this;
+}
+
+GameOptions& GameOptions::SetUInt(app::UInt32OptionNames__Enum option, uint32_t value) {
+ auto& func = GET_VIRTUAL_INVOKE(_options, SetUInt);
+ ((void(*)(void*, app::UInt32OptionNames__Enum, uint32_t, const void*))(func.methodPtr))
+ (_options, option, value, func.method);
+ return *this;
+}
+
+uint8_t GameOptions::GetByte(app::ByteOptionNames__Enum option, uint8_t defaultValue) const {
+ auto& func = GET_VIRTUAL_INVOKE(_options, TryGetByte);
+ uint8_t value;
+ bool succ = ((bool(*)(void*, app::ByteOptionNames__Enum, uint8_t*, const void*))(func.methodPtr))
+ (_options, option, &value, func.method);
+ if (!succ)
+ value = defaultValue;
+ return value;
+}
+
+float GameOptions::GetFloat(app::FloatOptionNames__Enum option, float defaultValue) const {
+ auto& func = GET_VIRTUAL_INVOKE(_options, TryGetFloat);
+ float value;
+ bool succ = ((bool(*)(void*, app::FloatOptionNames__Enum, float*, const void*))(func.methodPtr))
+ (_options, option, &value, func.method);
+ if (!succ)
+ value = defaultValue;
+ return value;
+}
+
+bool GameOptions::GetBool(app::BoolOptionNames__Enum option, bool defaultValue) const {
+ auto& func = GET_VIRTUAL_INVOKE(_options, TryGetBool);
+ bool value;
+ bool succ = ((bool(*)(void*, app::BoolOptionNames__Enum, bool*, const void*))(func.methodPtr))
+ (_options, option, &value, func.method);
+ if (!succ)
+ value = defaultValue;
+ return value;
+}
+
+int32_t GameOptions::GetInt(app::Int32OptionNames__Enum option, int32_t defaultValue) const {
+ auto& func = GET_VIRTUAL_INVOKE(_options, TryGetInt);
+ int32_t value;
+ bool succ = ((bool(*)(void*, app::Int32OptionNames__Enum, int32_t*, const void*))(func.methodPtr))
+ (_options, option, &value, func.method);
+ if (!succ)
+ value = defaultValue;
+ return value;
+}
+
+app::GameModes__Enum GameOptions::GetGameMode() const {
+ auto& func = GET_VIRTUAL_INVOKE(_options, get_GameMode);
+ return ((app::GameModes__Enum(*)(void*, const void*))(func.methodPtr))(_options, func.method);
+}
+
+int32_t GameOptions::GetMaxPlayers() const {
+ auto& func = GET_VIRTUAL_INVOKE(_options, get_MaxPlayers);
+ return ((int32_t(*)(void*, const void*))(func.methodPtr))(_options, func.method);
+}
+
+uint8_t GameOptions::GetMapId() const {
+ auto& func = GET_VIRTUAL_INVOKE(_options, get_MapId);
+ return ((uint8_t(*)(void*, const void*))(func.methodPtr))(_options, func.method);
+}
+
+int32_t GameOptions::GetNumImpostors() const {
+ auto& func = GET_VIRTUAL_INVOKE(_options, get_NumImpostors);
+ return ((int32_t(*)(void*, const void*))(func.methodPtr))(_options, func.method);
+}
+
+int32_t GameOptions::GetTotalTaskCount() const {
+ auto& func = GET_VIRTUAL_INVOKE(_options, get_TotalTaskCount);
+ return ((int32_t(*)(void*, const void*))(func.methodPtr))(_options, func.method);
+}
+
+RoleOptions GameOptions::GetRoleOptions() const {
+ auto& func = GET_VIRTUAL_INVOKE(_options, get_RoleOptions);
+ return RoleOptions(((app::IRoleOptionsCollection*(*)(void*, const void*))(func.methodPtr))(_options, func.method));
+}
+
+float GameOptions::GetPlayerSpeedMod() const {
+ return GetFloat(app::FloatOptionNames__Enum::PlayerSpeedMod, 1.0F);
+}
+
+float GameOptions::GetKillCooldown() const {
+ return GetFloat(app::FloatOptionNames__Enum::KillCooldown, 1.0F);
+}
+
+RoleOptions& RoleOptions::SetRoleRate(app::RoleTypes__Enum role, int32_t maxCount, int32_t chance) {
+ auto& func = GET_VIRTUAL_INVOKE(_options, SetRoleRate);
+ ((void(*)(void*, app::RoleTypes__Enum, int32_t, int32_t, const void*))(func.methodPtr))
+ (_options, role, maxCount, chance, func.method);
+ return *this;
+}
+
+RoleOptions& RoleOptions::SetRoleRecommended(app::RoleTypes__Enum role) {
+ auto& func = GET_VIRTUAL_INVOKE(_options, SetRoleRecommended);
+ ((void(*)(void*, app::RoleTypes__Enum, const void*))(func.methodPtr))(_options, role, func.method);
+ return *this;
+}
+
+int32_t RoleOptions::GetNumPerGame(app::RoleTypes__Enum role) const {
+ auto& func = GET_VIRTUAL_INVOKE(_options, GetNumPerGame);
+ return ((int32_t(*)(void*, app::RoleTypes__Enum, const void*))(func.methodPtr))(_options, role, func.method);
+}
+
+int32_t RoleOptions::GetChancePerGame(app::RoleTypes__Enum role) const {
+ auto& func = GET_VIRTUAL_INVOKE(_options, GetChancePerGame);
+ return ((int32_t(*)(void*, app::RoleTypes__Enum, const void*))(func.methodPtr))(_options, role, func.method);
+}
+
+void SaveGameOptions() {
+ SaveGameOptions(GameOptions());
+}
+
+void SaveGameOptions(const class GameOptions& gameOptions) {
+ State.PlayerSpeed = State.PrevPlayerSpeed = gameOptions.GetPlayerSpeedMod();
+ State.KillDistance = State.PrevKillDistance = gameOptions.GetInt(app::Int32OptionNames__Enum::KillDistance);
+ State.TaskBarUpdates = State.PrevTaskBarUpdates = gameOptions.GetInt(app::Int32OptionNames__Enum::TaskBarMode);
+ State.mapHostChoice = gameOptions.GetMapId();
+ State.impostors_amount = gameOptions.GetNumImpostors();
+}
diff --git a/user/utility.h b/user/utility.h
index 937aea16..287d4a7e 100644
--- a/user/utility.h
+++ b/user/utility.h
@@ -50,7 +50,7 @@ class RoleRates {
int GuardianAngelCount = 0;
int GuardianAngelChance = 0;
int MaxCrewmates = Game::MAX_PLAYERS;
- RoleRates(const GameOptionsData__Fields& gameOptionsDataFields, int playerAmount);
+ RoleRates(const class GameOptions& gameOptions, int playerAmount);
int GetRoleCount(RoleTypes__Enum role);
void SubtractRole(RoleTypes__Enum role);
};
@@ -208,4 +208,55 @@ bool Object_1_IsNotNull(app::Object_1* unity_object);
bool Object_1_IsNull(app::Object_1* unity_object);
std::string GetPlayerName();
-void SetPlayerName(std::string_view name);
\ No newline at end of file
+void SetPlayerName(std::string_view name);
+
+void SaveGameOptions();
+void SaveGameOptions(const class GameOptions& gameOptions);
+
+class RoleOptions {
+public:
+ RoleOptions(app::IRoleOptionsCollection* options)
+ : _options(options) {
+ }
+
+ RoleOptions& SetRoleRate(app::RoleTypes__Enum role, int32_t maxCount, int32_t chance);
+ RoleOptions& SetRoleRecommended(app::RoleTypes__Enum role);
+
+ int32_t GetNumPerGame(app::RoleTypes__Enum role) const;
+ int32_t GetChancePerGame(app::RoleTypes__Enum role) const;
+private:
+ app::IRoleOptionsCollection* _options;
+};
+
+class GameOptions {
+public:
+ GameOptions();
+ GameOptions(app::IGameOptions* options) : _options(options){};
+
+ constexpr bool HasOptions() const {
+ return _options != nullptr;
+ }
+
+ GameOptions& SetByte(app::ByteOptionNames__Enum option, uint8_t value);
+ GameOptions& SetFloat(app::FloatOptionNames__Enum option, float value);
+ GameOptions& SetBool(app::BoolOptionNames__Enum option, bool value);
+ GameOptions& SetInt(app::Int32OptionNames__Enum option, int32_t value);
+ GameOptions& SetUInt(app::UInt32OptionNames__Enum option, uint32_t value);
+
+ uint8_t GetByte(app::ByteOptionNames__Enum option, uint8_t defaultValue = 0) const;
+ float GetFloat(app::FloatOptionNames__Enum option, float defaultValue = 0.0) const;
+ bool GetBool(app::BoolOptionNames__Enum option, bool defaultValue = false) const;
+ int32_t GetInt(app::Int32OptionNames__Enum option, int32_t defaultValue = 0) const;
+
+ app::GameModes__Enum GetGameMode() const;
+ int32_t GetMaxPlayers() const;
+ uint8_t GetMapId() const;
+ int32_t GetNumImpostors() const;
+ int32_t GetTotalTaskCount() const;
+ RoleOptions GetRoleOptions() const;
+
+ float GetPlayerSpeedMod() const;
+ float GetKillCooldown() const;
+private:
+ app::IGameOptions* _options;
+};