diff --git a/cheat-library/cheat-library.vcxproj b/cheat-library/cheat-library.vcxproj
index aee5e68..e4d2263 100644
--- a/cheat-library/cheat-library.vcxproj
+++ b/cheat-library/cheat-library.vcxproj
@@ -101,6 +101,7 @@
+
@@ -195,6 +196,7 @@
+
diff --git a/cheat-library/cheat-library.vcxproj.filters b/cheat-library/cheat-library.vcxproj.filters
index ae465d6..9eb96a0 100644
--- a/cheat-library/cheat-library.vcxproj.filters
+++ b/cheat-library/cheat-library.vcxproj.filters
@@ -267,6 +267,9 @@
Header Files
+
+ Header Files
+
@@ -492,6 +495,9 @@
Source Files
+
+ Source Files
+
diff --git a/cheat-library/src/user/cheat/cheat.cpp b/cheat-library/src/user/cheat/cheat.cpp
index f931bbd..0a5bcfe 100644
--- a/cheat-library/src/user/cheat/cheat.cpp
+++ b/cheat-library/src/user/cheat/cheat.cpp
@@ -32,6 +32,7 @@
#include
#include
#include
+#include
#include
#include
@@ -107,6 +108,7 @@ namespace cheat
FEAT_INST(AutoChallenge),
FEAT_INST(MobVacuum),
FEAT_INST(FakeTime),
+ FEAT_INST(GameSpeed),
FEAT_INST(ChestTeleport),
FEAT_INST(OculiTeleport),
diff --git a/cheat-library/src/user/cheat/game/filters.cpp b/cheat-library/src/user/cheat/game/filters.cpp
index 8a4a5b6..c703c22 100644
--- a/cheat-library/src/user/cheat/game/filters.cpp
+++ b/cheat-library/src/user/cheat/game/filters.cpp
@@ -311,7 +311,7 @@ namespace cheat::game::filters
WhitelistFilter PressurePlate = { {EntityType__Enum_1::Field, EntityType__Enum_1::Gadget }, {"Gear_Gravity", "_LitPathPlate" } };
SimpleFilter SealLocations = { EntityType__Enum_1::Gadget, "_RunesKey" };
SimpleFilter SeelieLamp = { EntityType__Enum_1::Field, {"Gear_SeeliaLamp", "LifeSeelieBase"} };
- SimpleFilter Seelie = { EntityType__Enum_1::Platform, {"Gear_Seelie", "_LifeSeelie"}};
+ SimpleFilter Seelie = { EntityType__Enum_1::Platform, {"Gear_Seelie", "_LifeSeelie"} };
SimpleFilter SmallRockPile = { EntityType__Enum_1::Gadget, "_StonePile_01" };
SimpleFilter StormBarrier = { EntityType__Enum_1::Field, "_WindField_PushField" };
SimpleFilter SwordHilt = { EntityType__Enum_1::Field, "_WastedSword_" };
@@ -367,7 +367,11 @@ namespace cheat::game::filters
plant::MistFlowerCorolla,
plant::FlamingFlowerStamen
};
-
+ SimpleFilter BreakableObjects = {
+ puzzle::AncientRime,
+ puzzle::LargeRockPile,
+ puzzle::SmallRockPile
+ };
WhitelistFilter Doodads = {
EntityType__Enum_1::Gadget,
{
diff --git a/cheat-library/src/user/cheat/game/filters.h b/cheat-library/src/user/cheat/game/filters.h
index 174fe8e..54ef3f0 100644
--- a/cheat-library/src/user/cheat/game/filters.h
+++ b/cheat-library/src/user/cheat/game/filters.h
@@ -342,6 +342,7 @@ namespace cheat::game::filters
extern SimpleFilter Chests;
extern SimpleFilter Ores;
extern SimpleFilter PlantDestroy;
+ extern SimpleFilter BreakableObjects;
extern WhitelistFilter Doodads;
extern SimpleFilter Animals;
extern SimpleFilter AnimalDrop;
diff --git a/cheat-library/src/user/cheat/world/AutoDestroy.cpp b/cheat-library/src/user/cheat/world/AutoDestroy.cpp
index 34ae4b5..ce311d5 100644
--- a/cheat-library/src/user/cheat/world/AutoDestroy.cpp
+++ b/cheat-library/src/user/cheat/world/AutoDestroy.cpp
@@ -20,6 +20,8 @@ namespace cheat::feature
NF(f_DestroyShields, "Destroy Shields", "AutoDestroy", false),
NF(f_DestroyDoodads, "Destroy Doodads", "AutoDestroy", false),
NF(f_DestroyPlants, "Destroy Plants", "AutoDestroy", false),
+ NF(f_DestroySpecialObjects, "Destroy Special Objects", "AutoDestroy", false),
+ NF(f_DestroySpecialChests, "Destroy Special Chests", "AutoDestroy", false),
NF(f_Range, "Range", "AutoDestroy", 10.0f)
{
HookManager::install(app::MoleMole_LCAbilityElement_ReduceModifierDurability, LCAbilityElement_ReduceModifierDurability_Hook);
@@ -40,12 +42,14 @@ namespace cheat::feature
ImGui::Indent();
ConfigWidget("Ores", f_DestroyOres, "Ores and variants, e.g. electro crystals, marrows, etc.");
ConfigWidget("Shields", f_DestroyShields, "Abyss mage/churl/slime shields.");
- ImGui::SameLine();
- ImGui::TextColored(ImColor(255, 165, 0, 255), "Extremely risky!");
ConfigWidget("Doodads", f_DestroyDoodads, "Barrels, boxes, vases, etc.");
- ImGui::SameLine();
- ImGui::TextColored(ImColor(255, 165, 0, 255), "Extremely risky!");
ConfigWidget("Plants", f_DestroyPlants, "Dandelion Seeds, Sakura Bloom, etc.");
+ ConfigWidget("Special Objects", f_DestroySpecialObjects, "Destroy Ancient Rime, Large and Small Rock Piles");
+ ImGui::SameLine();
+ ImGui::TextColored(ImColor(255, 165, 0, 255), "Risk Unknown!");
+ ConfigWidget("Special Chests", f_DestroySpecialChests, "Destroy Chests with Brambles, Frozen, or In Rocks");
+ ImGui::SameLine();
+ ImGui::TextColored(ImColor(255, 165, 0, 255), "Risk Unknown!");
ImGui::Unindent();
ConfigWidget("Range (m)", f_Range, 0.1f, 1.0f, 15.0f);
}
@@ -57,13 +61,15 @@ namespace cheat::feature
void AutoDestroy::DrawStatus()
{
- ImGui::Text("Destroy [%.01fm%s%s%s%s%s]",
+ ImGui::Text("Destroy [%.01fm%s%s%s%s%s%s%s]",
f_Range.value(),
- f_DestroyOres || f_DestroyShields || f_DestroyDoodads || f_DestroyPlants ? "|" : "",
+ f_DestroyOres || f_DestroyShields || f_DestroyDoodads || f_DestroyPlants || f_DestroySpecialObjects || f_DestroySpecialChests ? "|" : "",
f_DestroyOres ? "O" : "",
f_DestroyShields ? "S" : "",
f_DestroyDoodads ? "D" : "",
- f_DestroyPlants ? "P" : "");
+ f_DestroyPlants ? "P" : "",
+ f_DestroySpecialObjects ? "SO" : "",
+ f_DestroySpecialChests ? "SC" : "");
}
AutoDestroy& AutoDestroy::GetInstance()
@@ -99,9 +105,11 @@ namespace cheat::feature
(autoDestroy.f_DestroyOres && game::filters::combined::Ores.IsValid(manager.entity(entity))) ||
(autoDestroy.f_DestroyDoodads && (game::filters::combined::Doodads.IsValid(manager.entity(entity)) || game::filters::chest::SBramble.IsValid(manager.entity(entity)))) ||
(autoDestroy.f_DestroyShields && !game::filters::combined::MonsterBosses.IsValid(manager.entity(entity)) && (
- game::filters::combined::MonsterShielded.IsValid(manager.entity(entity)) || // For shields attached to monsters, e.g. abyss mage shields.
- game::filters::combined::MonsterEquips.IsValid(manager.entity(entity)))) || // For shields/weapons equipped by monsters, e.g. rock shield.
- (autoDestroy.f_DestroyPlants && game::filters::combined::PlantDestroy.IsValid(manager.entity(entity))) // For plants e.g dandelion seeds.
+ game::filters::combined::MonsterShielded.IsValid(manager.entity(entity)) || // For shields attached to monsters, e.g. abyss mage shields.
+ game::filters::combined::MonsterEquips.IsValid(manager.entity(entity)))) || // For shields/weapons equipped by monsters, e.g. rock shield.
+ (autoDestroy.f_DestroyPlants && game::filters::combined::PlantDestroy.IsValid(manager.entity(entity))) || // For plants e.g dandelion seeds.
+ (autoDestroy.f_DestroySpecialObjects && game::filters::combined::BreakableObjects.IsValid(manager.entity(entity))) || // For Breakable Objects e.g Ancient Rime, Large and Small Rock Piles.
+ (autoDestroy.f_DestroySpecialChests && game::filters::combined::Chests.IsValid(manager.entity(entity))) // For Special Chests e.g Brambles, Frozen, Encased in Rock.
)
)
{
diff --git a/cheat-library/src/user/cheat/world/AutoDestroy.h b/cheat-library/src/user/cheat/world/AutoDestroy.h
index d4c47a0..6dc8a63 100644
--- a/cheat-library/src/user/cheat/world/AutoDestroy.h
+++ b/cheat-library/src/user/cheat/world/AutoDestroy.h
@@ -13,6 +13,8 @@ namespace cheat::feature
config::Field> f_DestroyShields;
config::Field> f_DestroyDoodads;
config::Field> f_DestroyPlants;
+ config::Field> f_DestroySpecialObjects;
+ config::Field> f_DestroySpecialChests;
config::Field f_Range;
static AutoDestroy& GetInstance();
diff --git a/cheat-library/src/user/cheat/world/GameSpeed.cpp b/cheat-library/src/user/cheat/world/GameSpeed.cpp
new file mode 100644
index 0000000..c63c4c8
--- /dev/null
+++ b/cheat-library/src/user/cheat/world/GameSpeed.cpp
@@ -0,0 +1,89 @@
+#include "pch-il2cpp.h"
+#include "GameSpeed.h"
+
+#include
+#include
+#include
+
+namespace cheat::feature
+{
+ GameSpeed::GameSpeed() : Feature(),
+ NF(f_Enabled, "GameSpeed Enabled", "GameSpeed", false),
+ NF(f_Hotkey, "GameSpeed HotKey", "GameSpeed", Hotkey(VK_CAPITAL)),
+ NF(f_Speed, "GameSpeed Multiplier", "GameSpeed", 5.0f)
+ {
+ events::GameUpdateEvent += MY_METHOD_HANDLER(GameSpeed::OnGameUpdate);
+ }
+
+ const FeatureGUIInfo& GameSpeed::GetGUIInfo() const
+ {
+ static const FeatureGUIInfo info{ "GameSpeed", "World", true };
+ return info;
+ }
+
+ void GameSpeed::DrawMain()
+ {
+ ConfigWidget("GameSpeed Enabled", f_Enabled, "Speeds up game with hotkey");
+ if (f_Enabled)
+ {
+ ConfigWidget("GameSpeed Hotkey", f_Hotkey);
+ ConfigWidget(f_Speed, 1.0f, 0.0f, 20.0f, "Set GameSpeed Multiplier\n" \
+ "Do NOT use this in the Open World, only use in menus/etc, VERY DANGEROUS!");
+ }
+ }
+
+ bool GameSpeed::NeedStatusDraw() const
+ {
+ return f_Enabled;
+ }
+
+ void GameSpeed::DrawStatus()
+ {
+ ImGui::Text("GameSpeed");
+ }
+
+ GameSpeed& GameSpeed::GetInstance()
+ {
+ static GameSpeed instance;
+ return instance;
+ }
+
+ void GameSpeed::OnGameUpdate()
+ {
+ static bool isSpeed = false;
+ float currentSpeed = app::Time_get_timeScale(nullptr);
+
+ if (f_Enabled)
+ {
+ if (f_Hotkey.value().IsPressed() && !isSpeed)
+ {
+ if (currentSpeed == 1.0f)
+ {
+ app::Time_set_timeScale(f_Speed, nullptr);
+ isSpeed = true;
+ }
+ }
+
+ if (!f_Hotkey.value().IsPressed() && isSpeed)
+ {
+ if (currentSpeed != 1.0f)
+ {
+ app::Time_set_timeScale(1.0f, nullptr);
+ isSpeed = false;
+ }
+ }
+ }
+ else
+ {
+ // Aditional check if user is still pressing key and they decide to disable the feature
+ if (isSpeed)
+ {
+ if (currentSpeed != 1.0f)
+ {
+ app::Time_set_timeScale(1.0f, nullptr);
+ isSpeed = false;
+ }
+ }
+ }
+ }
+}
diff --git a/cheat-library/src/user/cheat/world/GameSpeed.h b/cheat-library/src/user/cheat/world/GameSpeed.h
new file mode 100644
index 0000000..53e5a5b
--- /dev/null
+++ b/cheat-library/src/user/cheat/world/GameSpeed.h
@@ -0,0 +1,27 @@
+#pragma once
+#include
+#include
+
+namespace cheat::feature
+{
+
+ class GameSpeed : public Feature
+ {
+ public:
+ config::Field> f_Enabled;
+ config::Field f_Hotkey;
+ config::Field f_Speed;
+
+ static GameSpeed& GetInstance();
+
+ const FeatureGUIInfo& GetGUIInfo() const override;
+ void DrawMain() override;
+
+ virtual bool NeedStatusDraw() const override;
+ void DrawStatus() override;
+
+ void OnGameUpdate();
+ private:
+ GameSpeed();
+ };
+}
\ No newline at end of file