Map marker placement fixes:
- Allow placing map markers on discovered locations (from po3's Tweaks) - Place map markers on undiscovered locations without asking
This commit is contained in:
parent
14d17f233e
commit
9d84b0bb74
SKSE/Plugins
source/Enderal DLL
BIN
SKSE/Plugins/EnderalSE.dll
(Stored with Git LFS)
BIN
SKSE/Plugins/EnderalSE.dll
(Stored with Git LFS)
Binary file not shown.
@ -1,2 +1,3 @@
|
|||||||
FlatMapMarkers = true
|
FlatMapMarkers = true
|
||||||
StayAtSystemPage = true
|
StayAtSystemPage = true
|
||||||
|
MapMarkerPlacementFixes = true
|
||||||
|
@ -14,6 +14,7 @@ namespace FlatMapMarkers
|
|||||||
inline void Install()
|
inline void Install()
|
||||||
{
|
{
|
||||||
REL::Relocation<std::uintptr_t> offset{ RELOCATION_ID(52224, 53111), IsSE() ? 0x22F : 0x21F };
|
REL::Relocation<std::uintptr_t> offset{ RELOCATION_ID(52224, 53111), IsSE() ? 0x22F : 0x21F };
|
||||||
|
SKSE::AllocTrampoline(14);
|
||||||
auto& trampoline = SKSE::GetTrampoline();
|
auto& trampoline = SKSE::GetTrampoline();
|
||||||
trampoline.write_call<5>(offset.address(), &Hook_WorldPtToScreenPt3);
|
trampoline.write_call<5>(offset.address(), &Hook_WorldPtToScreenPt3);
|
||||||
}
|
}
|
||||||
|
@ -3,12 +3,14 @@
|
|||||||
#include "Papyrus.h"
|
#include "Papyrus.h"
|
||||||
#include "FlatMapMarkers.h"
|
#include "FlatMapMarkers.h"
|
||||||
#include "StayAtSystemPage.h"
|
#include "StayAtSystemPage.h"
|
||||||
|
#include "MapMarkerPlacement.h"
|
||||||
|
|
||||||
using namespace SKSE;
|
using namespace SKSE;
|
||||||
|
|
||||||
static std::map<std::string, bool> g_settings{
|
static std::map<std::string, bool> g_settings{
|
||||||
{ "FlatMapMarkers", true },
|
{ "FlatMapMarkers", true },
|
||||||
{ "StayAtSystemPage", true }
|
{ "StayAtSystemPage", true },
|
||||||
|
{ "MapMarkerPlacementFixes", true }
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
@ -48,7 +50,10 @@ namespace {
|
|||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (g_settings.at("MapMarkerPlacementFixes")) {
|
||||||
|
logger::info("Initializing map market placement fixes...");
|
||||||
|
MapMarkerPlacement::Install();
|
||||||
|
}
|
||||||
} else if (message->type == MessagingInterface::kDataLoaded) {
|
} else if (message->type == MessagingInterface::kDataLoaded) {
|
||||||
const auto dataHandler = RE::TESDataHandler::GetSingleton();
|
const auto dataHandler = RE::TESDataHandler::GetSingleton();
|
||||||
if (dataHandler) {
|
if (dataHandler) {
|
||||||
@ -148,7 +153,6 @@ SKSEPluginLoad(const LoadInterface* skse) {
|
|||||||
if (!IsVR()) {
|
if (!IsVR()) {
|
||||||
if (g_settings.at("FlatMapMarkers")) {
|
if (g_settings.at("FlatMapMarkers")) {
|
||||||
logger::info("Initializing Flat Map Markers...");
|
logger::info("Initializing Flat Map Markers...");
|
||||||
SKSE::AllocTrampoline(1 << 4);
|
|
||||||
FlatMapMarkers::Install();
|
FlatMapMarkers::Install();
|
||||||
}
|
}
|
||||||
if (g_settings.at("StayAtSystemPage")) {
|
if (g_settings.at("StayAtSystemPage")) {
|
||||||
|
67
source/Enderal DLL/src/MapMarkerPlacement.h
Normal file
67
source/Enderal DLL/src/MapMarkerPlacement.h
Normal file
@ -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": [
|
"default-registry": {
|
||||||
{
|
"kind": "git",
|
||||||
"kind": "git",
|
"repository": "https://github.com/microsoft/vcpkg.git",
|
||||||
"repository": "https://gitlab.com/colorglass/vcpkg-colorglass",
|
"baseline": "08c4e71048eb54733d9b180a28b9b1d7ce637454"
|
||||||
"baseline": "6309841a1ce770409708a67a9ba5c26c537d2937",
|
},
|
||||||
"packages": [
|
"registries": [
|
||||||
"commonlibsse-ng",
|
{
|
||||||
"gluino",
|
"kind": "git",
|
||||||
"script-extender-common",
|
"repository": "https://gitlab.com/colorglass/vcpkg-colorglass",
|
||||||
"skse"
|
"baseline": "6309841a1ce770409708a67a9ba5c26c537d2937",
|
||||||
]
|
"packages": [
|
||||||
}
|
"commonlibsse-ng",
|
||||||
]
|
"gluino",
|
||||||
|
"script-extender-common",
|
||||||
|
"skse"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user