- 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(); |
||||
} |
||||
} |
Loading…
Reference in new issue