Skip to content

Commit

Permalink
Add uber state to allow teleporting at the mapstone in ruins while th…
Browse files Browse the repository at this point in the history
…e escape is running
  • Loading branch information
timoschwarzer committed Aug 29, 2024
1 parent 0599688 commit 57670ca
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 0 deletions.
1 change: 1 addition & 0 deletions projects/Core/property/reactivity.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

#include <Core/macros.h>

#include <Core/api/uber_states/uber_state.h>
#include <Core/enums/static_text_entries.h>

#include <Common/event_bus.h>
Expand Down
1 change: 1 addition & 0 deletions projects/Randomizer/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ set(
"features/scenes/modifications/marsh_burrow_fight_arena_allow_teleportation.cpp"
"features/scenes/modifications/meeting_kwolok_cutscene_trigger_underwater_fix.cpp"
"features/scenes/modifications/reactive_bone_bridge_state.cpp"
"features/scenes/modifications/ruins_escape_allow_teleportation.cpp"
"features/scenes/modifications/sandless_feeding_grounds_to_elevator.cpp"
"features/scenes/modifications/sandless_shriek_escape.cpp"
"features/secrets.cpp"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
#include <Core/api/game/game.h>
#include <Core/api/graphics/sprite.h>
#include <Core/api/graphics/textures.h>
#include <Modloader/il2cpp_helpers.h>

#include <Core/api/scenes/scene_load.h>
#include <Core/api/uber_states/uber_state.h>
#include <Core/property/reactivity.h>
#include <Modloader/app/methods/CageStructureTool.h>
#include <Modloader/app/methods/TeleportRestrictZone.h>
#include <Modloader/app/types/TeleportRestrictZone.h>
#include <Modloader/windows_api/console.h>

namespace {
using namespace app::classes;

std::optional<il2cpp::WeakGCRef<app::TeleportRestrictZone>> teleport_restrict_zone;
std::shared_ptr<core::reactivity::ReactiveEffect> effect;

core::api::uber_states::UberState fix_enabled_state(UberStateGroup::RandoConfig, 21);

[[maybe_unused]]
auto on_scene_loaded_handler = core::api::scenes::single_event_bus().register_handler(
"desertRuinsBGChase",
[](const core::api::scenes::SceneLoadEventMetadata* metadata, const std::string&) {
if (metadata->state != app::SceneState__Enum::Loaded) {
return;
}

const auto scene_root_go = il2cpp::unity::get_game_object(metadata->scene->fields.SceneRoot);

const auto teleport_restrict_zone_go = il2cpp::unity::find_child(
scene_root_go,
std::vector<std::string>{
"wormSetup",
"teleportRestrictZone",
}
);

teleport_restrict_zone = il2cpp::WeakGCRef(
il2cpp::unity::get_component<app::TeleportRestrictZone>(teleport_restrict_zone_go, types::TeleportRestrictZone::get_class())
);

effect = core::reactivity::watch_effect([] {
if (teleport_restrict_zone.has_value() && teleport_restrict_zone->is_valid()) {
auto cage_structure_tool = (**teleport_restrict_zone)->fields.CageStructureTool;

if (fix_enabled_state.get<bool>()) {
cage_structure_tool->fields.Vertices->fields._items->vector[0]->fields.Position = app::Vector3{-94.740479f, -140.710449f, 0.f};
cage_structure_tool->fields.Vertices->fields._items->vector[1]->fields.Position = app::Vector3{-94.369141f, -56.7434082f, 0.f};
} else {
// Vanilla values
cage_structure_tool->fields.Vertices->fields._items->vector[0]->fields.Position = app::Vector3{-134.740479f, -140.710449f, 0.f};
cage_structure_tool->fields.Vertices->fields._items->vector[1]->fields.Position = app::Vector3{-134.369141f, -56.7434082f, 0.f};
}

CageStructureTool::MarkDirty(cage_structure_tool);
} else {
effect = nullptr;
}
});
}
);
} // namespace
Original file line number Diff line number Diff line change
Expand Up @@ -380,6 +380,7 @@ namespace randomizer {
add_state<app::SerializedBooleanUberState>(UberStateGroup::RandoConfig, "allowTeleportingUnderwater", 18, false),
add_state<app::SerializedBooleanUberState>(UberStateGroup::RandoConfig, "allowTeleportingDuringCombatShrineFights", 19, false),
add_state<app::SerializedBooleanUberState>(UberStateGroup::RandoConfig, "disableWillowHeartCutscenes", 20, false),
add_state<app::SerializedBooleanUberState>(UberStateGroup::RandoConfig, "allowTeleportingAtRuinsMapstone", 21, false),
add_state<app::SerializedBooleanUberState>(UberStateGroup::RandoConfig, "removeShriekEscapeSand", 100, false),
add_state<app::SerializedBooleanUberState>(UberStateGroup::RandoConfig, "removeFeedingGroundsToElevatorSand", 101, false),
add_state<app::SerializedBooleanUberState>(UberStateGroup::RandoConfig, "knockKnockWellspring", 102, false),
Expand Down

0 comments on commit 57670ca

Please sign in to comment.