Skip to content

Commit 4eb18ec

Browse files
committed
Update to v3.7.2
1 parent fdfdf82 commit 4eb18ec

38 files changed

+307
-421
lines changed

FEATURES.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ View the game options!
111111
- **Move While in Vent & Shapeshifting** Allows you to move in vent and while shapeshifting (Default: OFF)
112112
- **Always Move** Allows you to move in meetings and game menus such as tasks (Default: OFF)
113113
- **Shapeshift without Animation** Allows you to shapeshift without the animation (Default: OFF)
114+
- **Copy Lobby Code on Disconnect** Automatically copies the lobby code to your clipboard when you get disconnected unintentionally (Default: OFF)
114115
- **NoClip** Allows you to walk through walls (Default: OFF)
115116
- **Kill Other Impostors** *(Only with Safe Mode disabled)* Allows you to kill fellow impostors (Default: OFF)
116117
- **Unlock Kill Button** *(Only with Safe Mode disabled)* Allows you to use kill button at any time (Default: OFF)

FEATURES.md.backup

Lines changed: 0 additions & 258 deletions
This file was deleted.

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
# 👺 SickoMenu v3.7
2-
A powerful utility for Among Us that aims to enhance the game experience!
1+
# 👺 SickoMenu v3.7.2
2+
A powerful utility for Among Us that aims to improve the game experience!
33

44
Join our very own Discord server for support, bug reports, and sneak peeks!
55
### Vanity invite: https://discord.gg/sickos

gui/tabs/debug_tab.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ namespace DebugTab {
4242

4343
ImGui::Dummy(ImVec2(4, 4) * State.dpiScale);
4444

45-
ToggleButton("Log Unity Debug Messages", &State.ShowUnityLogs);
45+
if (ToggleButton("Log Unity Debug Messages", &State.ShowUnityLogs)) State.Save();
46+
if (ToggleButton("Log Hook Debug Messages", &State.ShowHookLogs)) State.Save();
4647

4748
ImGui::Dummy(ImVec2(4, 4) * State.dpiScale);
4849

gui/tabs/players_tab.cpp

Lines changed: 79 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -125,73 +125,84 @@ namespace PlayersTab {
125125

126126
if (selectedPlayer.has_value() && selectedPlayers.size() == 1) //Upon first startup no player is selected. Also rare case where the playerdata is deleted before the next gui cycle
127127
{
128-
bool isUsingMod = selectedPlayer.is_LocalPlayer() || State.modUsers.find(selectedPlayer.get_PlayerData()->fields.PlayerId) != State.modUsers.end();
129-
ImGui::Text("Is using Modified Client: %s", isUsingMod ? "Yes" : "No");
130-
if (isUsingMod)
131-
ImGui::Text("Client Name: %s", selectedPlayer.is_LocalPlayer() ? "SickoMenu" : RemoveHtmlTags(State.modUsers.at(selectedPlayer.get_PlayerData()->fields.PlayerId)).c_str());
132-
std::uint8_t playerId = selectedPlayer.get_PlayerData()->fields.PlayerId;
133-
std::string playerIdText = std::format("Player ID: {}", playerId);
134-
ImGui::Text(const_cast<char*>(playerIdText.c_str()));
135-
std::string friendCode = convert_from_string(selectedPlayer.get_PlayerData()->fields.FriendCode);
136-
std::string friendCodeText = std::format("Friend Code: {}", (!IsStreamerMode()) ? friendCode : ((friendCode != "") ? friendCode.substr(0, 1) + "..." : ""));
137-
if (friendCode != "") {
138-
ImGui::Text(const_cast<char*>(friendCodeText.c_str()));
139-
}
140-
std::string puid = convert_from_string(selectedPlayer.get_PlayerData()->fields.Puid);
141-
std::string puidText = std::format("PUID:\n{}", (!IsStreamerMode()) ? puid : ((puid != "") ? puid.substr(0, 1) + "..." : ""));
142-
if (puid != "") {
143-
ImGui::Text(const_cast<char*>(puidText.c_str()));
144-
}
145-
uint32_t playerLevel = selectedPlayer.get_PlayerData()->fields.PlayerLevel + 1;
146-
std::string levelText = std::format("Level: {}", playerLevel);
147-
ImGui::Text(const_cast<char*>(levelText.c_str()));
148-
std::string platform = "Unknown";
149-
auto client = app::InnerNetClient_GetClientFromCharacter((InnerNetClient*)(*Game::pAmongUsClient), selectedPlayer.get_PlayerControl(), NULL);
150-
if (GetPlayerControlById(selectedPlayer.get_PlayerData()->fields.PlayerId)->fields._.OwnerId == client->fields.Id) {
151-
switch (client->fields.PlatformData->fields.Platform) {
152-
case Platforms__Enum::StandaloneEpicPC:
153-
platform = "Epic Games (PC)";
154-
break;
155-
case Platforms__Enum::StandaloneSteamPC:
156-
platform = "Steam (PC)";
157-
break;
158-
case Platforms__Enum::StandaloneMac:
159-
platform = "Mac";
160-
break;
161-
case Platforms__Enum::StandaloneWin10:
162-
platform = "Microsoft Store (PC)";
163-
break;
164-
case Platforms__Enum::StandaloneItch:
165-
platform = "itch.io (PC)";
166-
break;
167-
case Platforms__Enum::IPhone:
168-
platform = "iOS/iPadOS (Mobile)";
169-
break;
170-
case Platforms__Enum::Android:
171-
platform = "Android (Mobile)";
172-
break;
173-
case Platforms__Enum::Switch:
174-
platform = "Nintendo Switch (Console)";
175-
break;
176-
case Platforms__Enum::Xbox:
177-
platform = "Xbox (Console)";
178-
break;
179-
case Platforms__Enum::Playstation:
180-
platform = "Playstation (Console)";
181-
break;
182-
default:
183-
platform = "Unknown";
184-
break;
128+
if ((IsInMultiplayerGame() || IsInLobby()) || (selectedPlayer.has_value() && selectedPlayer.is_LocalPlayer())) {
129+
bool isUsingMod = selectedPlayer.is_LocalPlayer() || State.modUsers.find(selectedPlayer.get_PlayerData()->fields.PlayerId) != State.modUsers.end();
130+
ImGui::Text("Is using Modified Client: %s", isUsingMod ? "Yes" : "No");
131+
if (isUsingMod)
132+
ImGui::Text("Client Name: %s", selectedPlayer.is_LocalPlayer() ? "SickoMenu" : RemoveHtmlTags(State.modUsers.at(selectedPlayer.get_PlayerData()->fields.PlayerId)).c_str());
133+
std::uint8_t playerId = selectedPlayer.get_PlayerData()->fields.PlayerId;
134+
std::string playerIdText = std::format("Player ID: {}", playerId);
135+
ImGui::Text(const_cast<char*>(playerIdText.c_str()));
136+
std::string friendCode = convert_from_string(selectedPlayer.get_PlayerData()->fields.FriendCode);
137+
std::string friendCodeText = std::format("Friend Code: {}", (!IsStreamerMode()) ? friendCode : ((friendCode != "") ? friendCode.substr(0, 1) + "..." : ""));
138+
if (friendCode != "") {
139+
ImGui::Text(const_cast<char*>(friendCodeText.c_str()));
140+
}
141+
std::string puid = convert_from_string(selectedPlayer.get_PlayerData()->fields.Puid);
142+
std::string puidText = std::format("PUID:\n{}", (!IsStreamerMode()) ? puid : ((puid != "") ? puid.substr(0, 1) + "..." : ""));
143+
if (puid != "") {
144+
ImGui::Text(const_cast<char*>(puidText.c_str()));
145+
}
146+
uint32_t playerLevel = selectedPlayer.get_PlayerData()->fields.PlayerLevel + 1;
147+
std::string levelText = std::format("Level: {}", playerLevel);
148+
ImGui::Text(const_cast<char*>(levelText.c_str()));
149+
std::string platform = "Unknown";
150+
auto client = app::InnerNetClient_GetClientFromCharacter((InnerNetClient*)(*Game::pAmongUsClient), selectedPlayer.get_PlayerControl(), NULL);
151+
if (GetPlayerControlById(selectedPlayer.get_PlayerData()->fields.PlayerId)->fields._.OwnerId == client->fields.Id) {
152+
switch (client->fields.PlatformData->fields.Platform) {
153+
case Platforms__Enum::StandaloneEpicPC:
154+
platform = "Epic Games (PC)";
155+
break;
156+
case Platforms__Enum::StandaloneSteamPC:
157+
platform = "Steam (PC)";
158+
break;
159+
case Platforms__Enum::StandaloneMac:
160+
platform = "Mac";
161+
break;
162+
case Platforms__Enum::StandaloneWin10:
163+
platform = "Microsoft Store (PC)";
164+
break;
165+
case Platforms__Enum::StandaloneItch:
166+
platform = "itch.io (PC)";
167+
break;
168+
case Platforms__Enum::IPhone:
169+
platform = "iOS/iPadOS (Mobile)";
170+
break;
171+
case Platforms__Enum::Android:
172+
platform = "Android (Mobile)";
173+
break;
174+
case Platforms__Enum::Switch:
175+
platform = "Nintendo Switch (Console)";
176+
break;
177+
case Platforms__Enum::Xbox:
178+
platform = "Xbox (Console)";
179+
break;
180+
case Platforms__Enum::Playstation:
181+
platform = "Playstation (Console)";
182+
break;
183+
default:
184+
platform = "Unknown";
185+
break;
186+
}
185187
}
188+
std::string platformText = std::format("Platform: {}", platform);
189+
ImGui::Text(platformText.c_str());
190+
uint64_t psnId = client->fields.PlatformData->fields.PsnPlatformId;
191+
std::string psnText = std::format("PSN Platform ID: {}", psnId);
192+
if (psnId != 0) ImGui::Text(const_cast<char*>(psnText.c_str()));
193+
uint64_t xboxId = client->fields.PlatformData->fields.XboxPlatformId;
194+
std::string xboxText = std::format("Xbox Platform ID: {}", xboxId);
195+
if (xboxId != 0) ImGui::Text(const_cast<char*>(xboxText.c_str()));
196+
}
197+
else {
198+
ImGui::Text("Is using Modified Client: No");
199+
std::uint8_t playerId = selectedPlayer.get_PlayerData()->fields.PlayerId;
200+
std::string playerIdText = std::format("Player ID: {}", playerId);
201+
ImGui::Text(const_cast<char*>(playerIdText.c_str()));
202+
uint32_t playerLevel = selectedPlayer.get_PlayerData()->fields.PlayerLevel + 1;
203+
std::string levelText = std::format("Level: {}", playerLevel);
204+
ImGui::Text(const_cast<char*>(levelText.c_str()));
186205
}
187-
std::string platformText = std::format("Platform: {}", platform);
188-
ImGui::Text(platformText.c_str());
189-
uint64_t psnId = client->fields.PlatformData->fields.PsnPlatformId;
190-
std::string psnText = std::format("PSN Platform ID: {}", psnId);
191-
if (psnId != 0) ImGui::Text(const_cast<char*>(psnText.c_str()));
192-
uint64_t xboxId = client->fields.PlatformData->fields.XboxPlatformId;
193-
std::string xboxText = std::format("Xbox Platform ID: {}", xboxId);
194-
if (xboxId != 0) ImGui::Text(const_cast<char*>(xboxText.c_str()));
195206
}
196207

197208
ImGui::EndChild();
@@ -679,7 +690,7 @@ namespace PlayersTab {
679690
{
680691
if (ImGui::Button("Reset Impersonation"))
681692
{
682-
ResetOriginalAppearance();
693+
ControlAppearance(false);
683694
}
684695
}
685696

@@ -869,14 +880,14 @@ namespace PlayersTab {
869880

870881
if ((IsInGame() || IsInLobby()) && selectedPlayer.has_value() && selectedPlayers.size() == 1)
871882
{
872-
if ((State.playerToAttach.equals(State.selectedPlayer) && State.ActiveAttach) || (selectedPlayer.is_LocalPlayer() && selectedPlayer.has_value())) {
883+
if (State.ActiveAttach && selectedPlayer.has_value() && (State.playerToAttach.equals(State.selectedPlayer) || selectedPlayer.is_LocalPlayer())) {
873884
if (ImGui::Button("Stop Attaching")) {
874885
State.playerToAttach = {};
875886
State.ActiveAttach = false;
876887
}
877888
}
878889
else {
879-
if (ImGui::Button("Attach To") && !selectedPlayer.is_LocalPlayer()) {
890+
if (!selectedPlayer.is_LocalPlayer() && ImGui::Button("Attach To")) {
880891
State.playerToAttach = State.selectedPlayer;
881892
State.ActiveAttach = true;
882893
}

gui/tabs/self_tab.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,10 @@ namespace SelfTab {
252252
if (ToggleButton("No Shapeshift Animation", &State.AnimationlessShapeshift)) {
253253
State.Save();
254254
}
255+
ImGui::SameLine();
256+
if (ToggleButton("Copy Lobby Code on Disconnect", &State.AutoCopyLobbyCode)) {
257+
State.Save();
258+
}
255259

256260
if (ToggleButton("NoClip", &State.NoClip)) {
257261
State.Save();

hooks/AccountManager.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include "state.hpp"
55

66
void dAccountManager_UpdateKidAccountDisplay(AccountManager* __this, MethodInfo* method) {
7+
if (State.ShowHookLogs) LOG_DEBUG("Hook dAccountManager_UpdateKidAccountDisplay executed");
78
// grant permissions
89
if (!State.PanicMode) {
910
__this->fields.freeChatAllowed = KWSPermissionStatus__Enum::Granted;

hooks/AirshipStatus.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
void dAirshipStatus_OnEnable(AirshipStatus* __this, MethodInfo* method)
88
{
9+
if (State.ShowHookLogs) LOG_DEBUG("Hook dAirshipStatus_OnEnable executed");
910
AirshipStatus_OnEnable(__this, method);
1011
State.mapType = Settings::MapType::Airship;
1112
try {
@@ -40,6 +41,7 @@ void dAirshipStatus_OnEnable(AirshipStatus* __this, MethodInfo* method)
4041
}
4142

4243
float dAirshipStatus_CalculateLightRadius(AirshipStatus* __this, NetworkedPlayerInfo* player, MethodInfo* method) {
44+
if (State.ShowHookLogs) LOG_DEBUG("Hook dAirshipStatus_CalculateLightRadius executed");
4345
if (!State.PanicMode && State.MaxVision)
4446
return 420.F;
4547
return AirshipStatus_CalculateLightRadius(__this, player, method);

hooks/Camera.cpp

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,27 +9,16 @@ static bool refreshChat = true;
99

1010
Vector3 dCamera_ScreenToWorldPoint(Camera* __this, Vector3 position, MethodInfo* method)
1111
{
12+
if (State.ShowHookLogs) LOG_DEBUG("Hook dCamera_ScreenToWorldPoint executed");
1213
try {
1314
if (!State.PanicMode && (State.GameLoaded || IsInLobby()))
1415
{
15-
auto chatState = Game::HudManager.GetInstance()->fields.Chat->fields.state;
16-
bool chatOpen = chatState == ChatControllerState__Enum::Open || chatState == ChatControllerState__Enum::Opening || chatState == ChatControllerState__Enum::Closing;
17-
/*//Figured it is better to restore the current camera height than using state
16+
//Figured it is better to restore the current camera height than using state
1817
float orthographicSize = Camera_get_orthographicSize(__this, NULL);
1918
Camera_set_orthographicSize(__this, 3.0f, NULL);
2019
Vector3 ret = Camera_ScreenToWorldPoint(__this, position, method);
2120
Camera_set_orthographicSize(__this, orthographicSize, NULL);
22-
return ret;*/
23-
float newCamHeight = 3.f * ((State.EnableZoom && !State.InMeeting && !chatOpen) ? State.CameraHeight : 1.f);
24-
if (camHeight != newCamHeight) {
25-
camHeight = newCamHeight;
26-
float orthographicSize = Camera_get_orthographicSize(__this, NULL);
27-
Camera_set_orthographicSize(__this, 3.0f, NULL);
28-
Vector3 ret = Camera_ScreenToWorldPoint(__this, position, method);
29-
Camera_set_orthographicSize(__this, camHeight, NULL);
30-
Screen_SetResolution_1(Screen_get_width(NULL), Screen_get_height(NULL), Screen_get_fullScreen(NULL), 165, NULL);
31-
return ret;
32-
}
21+
return ret;
3322
}
3423
}
3524
catch (...) {
@@ -40,6 +29,7 @@ Vector3 dCamera_ScreenToWorldPoint(Camera* __this, Vector3 position, MethodInfo*
4029
}
4130

4231
void dFollowerCamera_Update(FollowerCamera* __this, MethodInfo* method) {
32+
if (State.ShowHookLogs) LOG_DEBUG("Hook dFollowerCamera_Update executed");
4333
try {
4434
if (!State.PanicMode) {
4535
if (auto playerToFollow = State.playerToFollow.validate(); playerToFollow.has_value())

hooks/Chat.cpp

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ static std::string strToLower(std::string str) {
1313
}
1414

1515
void dChatController_AddChat(ChatController* __this, PlayerControl* sourcePlayer, String* chatText, bool censor, MethodInfo* method) {
16+
if (State.ShowHookLogs) LOG_DEBUG("Hook dChatController_AddChat executed");
1617
if (!State.PanicMode) {
1718
auto player = GetPlayerData(sourcePlayer);
1819
auto local = GetPlayerData(*Game::pLocalPlayer);
@@ -82,6 +83,7 @@ void dChatController_AddChat(ChatController* __this, PlayerControl* sourcePlayer
8283
}
8384

8485
void dChatController_SetVisible(ChatController* __this, bool visible, MethodInfo* method) {
86+
if (State.ShowHookLogs) LOG_DEBUG("Hook dChatController_SetVisible executed");
8587
if (State.ChatAlwaysActive && !State.PanicMode)
8688
ChatController_SetVisible(__this, true, method);
8789
else
@@ -92,6 +94,7 @@ void dChatController_SetVisible(ChatController* __this, bool visible, MethodInfo
9294
}
9395

9496
void dChatBubble_SetName(ChatBubble* __this, String* playerName, bool isDead, bool voted, Color color, MethodInfo* method) {
97+
if (State.ShowHookLogs) LOG_DEBUG("Hook dChatBubble_SetName executed");
9598
if (!State.PanicMode && (IsInGame() || IsInLobby())) {
9699
for (auto playerData : GetAllPlayerData()) {
97100
auto outfit = GetPlayerOutfit(playerData);
@@ -141,6 +144,7 @@ void dChatBubble_SetName(ChatBubble* __this, String* playerName, bool isDead, bo
141144

142145
void dChatController_Update(ChatController* __this, MethodInfo* method)
143146
{
147+
if (State.ShowHookLogs) LOG_DEBUG("Hook dChatController_Update executed");
144148
__this->fields.freeChatField->fields.textArea->fields.characterLimit = State.SafeMode ? 120 : 2147483647;
145149
__this->fields.freeChatField->fields.textArea->fields.allowAllCharacters = true;
146150
__this->fields.freeChatField->fields.textArea->fields.AllowEmail = true;
@@ -204,17 +208,6 @@ void dChatController_Update(ChatController* __this, MethodInfo* method)
204208
State.ChatCooldown = __this->fields.timeSinceLastMessage;
205209
State.ChatFocused = __this->fields.freeChatField->fields.textArea->fields.hasFocus;
206210

207-
/*if (State.FollowerCam != nullptr && !State.PanicMode && State.EnableZoom &&
208-
(__this->fields.state == ChatControllerState__Enum::Closed || (__this->fields.state == ChatControllerState__Enum::Closing && State.EnableZoom))) {
209-
Camera_set_orthographicSize(State.FollowerCam, 3.f, NULL);
210-
int32_t width = Screen_get_width(NULL);
211-
int32_t height = Screen_get_height(NULL);
212-
bool fullscreen = Screen_get_fullScreen(NULL);
213-
ChatController_OnResolutionChanged(__this, (float)(width / height), width, height, fullscreen, NULL);
214-
if (__this->fields.state == ChatControllerState__Enum::Closing && State.EnableZoom) ChatController_ForceClosed(__this, NULL); //force close the chat as it stays open otherwise
215-
Camera_set_orthographicSize(State.FollowerCam, 3.f * (State.EnableZoom ? State.CameraHeight : 1.f), NULL);
216-
}*/
217-
218211
if (!State.PanicMode && State.SafeMode && State.ChatSpam && (IsInGame() || IsInLobby()) && __this->fields.timeSinceLastMessage >= 3.5f) {
219212
PlayerControl_RpcSendChat(*Game::pLocalPlayer, convert_to_string(State.chatMessage), NULL);
220213
//remove rpc queue stuff cuz of delay and anticheat kick
@@ -227,6 +220,7 @@ void dChatController_Update(ChatController* __this, MethodInfo* method)
227220

228221
bool dTextBoxTMP_IsCharAllowed(TextBoxTMP* __this, uint16_t unicode_char, MethodInfo* method)
229222
{
223+
if (State.ShowHookLogs) LOG_DEBUG("Hook dTextBoxTMP_IsCharAllowed executed");
230224
//0x08 is backspace, 0x0D is carriage return, 0x7F is delete character, 0x3C is <, 0x3E is >
231225
//lobby codes force uppercase, and we don't change that to fix joining a lobby with code not working
232226
if (!__this->fields.ForceUppercase) return (unicode_char != 0x08 && unicode_char != 0x0D && unicode_char != 0x7F && ((State.SafeMode && unicode_char != 0x3C && unicode_char != 0x3E) || !State.SafeMode));
@@ -235,6 +229,7 @@ bool dTextBoxTMP_IsCharAllowed(TextBoxTMP* __this, uint16_t unicode_char, Method
235229

236230
void dTextBoxTMP_SetText(TextBoxTMP* __this, String* input, String* inputCompo, MethodInfo* method)
237231
{
232+
if (State.ShowHookLogs) LOG_DEBUG("Hook dTextBoxTMP_SetText executed");
238233
if (!State.PanicMode) {
239234
if (!State.SafeMode)
240235
__this->fields.characterLimit = 2147483647;
@@ -249,6 +244,7 @@ void dTextBoxTMP_SetText(TextBoxTMP* __this, String* input, String* inputCompo,
249244

250245
void dPlayerControl_RpcSendChat(PlayerControl* __this, String* chatText, MethodInfo* method)
251246
{
247+
if (State.ShowHookLogs) LOG_DEBUG("Hook dPlayerControl_RpcSendChat executed");
252248
if (!State.PanicMode) {
253249
auto playerToChatAs = (!State.SafeMode && State.activeChatSpoof && State.playerToChatAs.has_value()) ? State.playerToChatAs.validate().get_PlayerControl() : *Game::pLocalPlayer;
254250
if (State.ReadAndSendAumChat && convert_from_string(chatText).substr(0, 5) == "/aum ") {
@@ -294,6 +290,7 @@ void dPlayerControl_RpcSendChat(PlayerControl* __this, String* chatText, MethodI
294290
}
295291

296292
void dChatBubble_SetText(ChatBubble* __this, String* chatText, MethodInfo* method) {
293+
if (State.ShowHookLogs) LOG_DEBUG("Hook dChatBubble_SetText executed");
297294
if (State.DarkMode) {
298295
auto black = Palette__TypeInfo->static_fields->Black;
299296
if (__this->fields.playerInfo->fields.IsDead) black.a *= 0.75f;

0 commit comments

Comments
 (0)