- Allow placing map markers on discovered locations (from po3's Tweaks) - Place map markers on undiscovered locations without askingdevelopment
parent
14d17f233e
commit
9d84b0bb74
6 changed files with 96 additions and 18 deletions
Binary file not shown.
@ -1,2 +1,3 @@ |
||||
FlatMapMarkers = true |
||||
StayAtSystemPage = true |
||||
MapMarkerPlacementFixes = true |
||||
|
@ -0,0 +1,67 @@ |
||||
#pragma once |
||||
|
||||
// Based on powerofthree's Tweaks 1.8.1 by powerofthree (MIT)
|
||||
namespace MapMarkerPlacement |
||||
{ |
||||
constexpr std::uint8_t NOP{ 0x90 }; |
||||
|
||||
struct IsFastTravelEnabled |
||||
{ |
||||
static bool thunk(RE::PlayerCharacter* a_this, bool a_hideNotification) |
||||
{ |
||||
const auto enabled = func(a_this, a_hideNotification); |
||||
if (!enabled) { |
||||
if (const auto mapMenu = RE::UI::GetSingleton()->GetMenu<RE::MapMenu>(); mapMenu) { |
||||
mapMenu->PlaceMarker(); |
||||
} |
||||
} |
||||
return enabled; |
||||
} |
||||
static inline REL::Relocation<decltype(thunk)> func; |
||||
}; |
||||
|
||||
void InstallPlacementDiscoveredFix() |
||||
{ |
||||
// Place a marker, if a location has been discovered and fast travel is disabled
|
||||
|
||||
REL::Relocation<std::uintptr_t> target{ REL::RelocationID(52208, 53095), REL::Relocate(0x2C5, 0x328, 0x358) }; |
||||
auto& trampoline = SKSE::GetTrampoline(); |
||||
|
||||
SKSE::AllocTrampoline(14); |
||||
IsFastTravelEnabled::func = trampoline.write_call<5>(target.address(), IsFastTravelEnabled::thunk); |
||||
|
||||
logger::info("Applied discovered map marker placement fix"sv); |
||||
} |
||||
|
||||
void InstallPlacementUndiscoveredFix() |
||||
{ |
||||
// Place a marker without asking, if a location isn't discovered yet
|
||||
|
||||
REL::Relocation<std::uintptr_t> target2{ REL::RelocationID(52208, 53095), REL::Relocate(0x17A, 0x183) }; |
||||
std::uint8_t code[] = { 0xB0, 0x01, NOP, NOP, NOP }; |
||||
REL::safe_write(target2.address(), code, 5); |
||||
|
||||
logger::info("Applied undiscovered map marker placement fix"sv); |
||||
} |
||||
|
||||
void Install() |
||||
{ |
||||
if (GetLoadInterface()->GetPluginInfo("DisableFastTravel")) { |
||||
logger::info("Detected Disable Fast Travel SKSE, skipping discovered map marker placement fix"); |
||||
} else if (!GetLoadInterface()->GetPluginInfo("po3_Tweaks")) { |
||||
InstallPlacementDiscoveredFix(); |
||||
} else if (std::filesystem::exists("Data/SKSE/Plugins/po3_Tweaks.ini")) { |
||||
CSimpleIniA ini; |
||||
ini.SetMultiKey(false); |
||||
ini.LoadFile("Data/SKSE/Plugins/po3_Tweaks.ini"); |
||||
if (!ini.GetBoolValue("Fixes", "Map Marker Placement Fix", false)) { |
||||
logger::info("Detected po3's Tweaks with disabled discovered Map Marker Placement Fix"); |
||||
InstallPlacementDiscoveredFix(); |
||||
} else { |
||||
logger::info("Detected po3's Tweaks with enabled discovered Map Marker Placement Fix"); |
||||
} |
||||
} |
||||
|
||||
InstallPlacementUndiscoveredFix(); |
||||
} |
||||
} |
@ -1,15 +1,20 @@ |
||||
{ |
||||
"registries": [ |
||||
{ |
||||
"kind": "git", |
||||
"repository": "https://gitlab.com/colorglass/vcpkg-colorglass", |
||||
"baseline": "6309841a1ce770409708a67a9ba5c26c537d2937", |
||||
"packages": [ |
||||
"commonlibsse-ng", |
||||
"gluino", |
||||
"script-extender-common", |
||||
"skse" |
||||
] |
||||
} |
||||
] |
||||
"default-registry": { |
||||
"kind": "git", |
||||
"repository": "https://github.com/microsoft/vcpkg.git", |
||||
"baseline": "08c4e71048eb54733d9b180a28b9b1d7ce637454" |
||||
}, |
||||
"registries": [ |
||||
{ |
||||
"kind": "git", |
||||
"repository": "https://gitlab.com/colorglass/vcpkg-colorglass", |
||||
"baseline": "6309841a1ce770409708a67a9ba5c26c537d2937", |
||||
"packages": [ |
||||
"commonlibsse-ng", |
||||
"gluino", |
||||
"script-extender-common", |
||||
"skse" |
||||
] |
||||
} |
||||
] |
||||
} |
||||
|
Loading…
Reference in new issue