Jump to content

AAF Nuka Ride: A Porn Studio Mod


Recommended Posts

Posted

just checking to see what I did wrong here tbh or if I'm just missing something, in the scene with the investors where the overboss is away fighting, I agreed to all of the scenes got the outfit etc. but according to the overboss they complained anyway and said I didn't? is this just how it works or did something mess up here

Posted
12 hours ago, snagglepup said:

just checking to see what I did wrong here tbh or if I'm just missing something, in the scene with the investors where the overboss is away fighting, I agreed to all of the scenes got the outfit etc. but according to the overboss they complained anyway and said I didn't? is this just how it works or did something mess up here

I've checked it and everything seems fine. But I haven't been able to test it in-game. I'll keep that in mind.

Posted
35 minutes ago, xyzxyz said:

Has the self-esteem and rebel/sub level any real impact?

No, it's just role-playing.

Posted
On 5/8/2026 at 12:16 AM, dav42 said:

BGSSaveLoadGame::GetChange_TESForm__BGSChangeFlags_(qword_145A73360, npc, kNPCFace) )

I see. So perchik implementation is missing this check "BGSSaveLoadGame::GetChange(pSaveLoadGame, File, 2048) )" and the game will revert to using facegen data on load. I'll take a closer look and report it to perchik if that's the case.

Posted

The scene where Norita as bitch convinces the Overboss to change his club plans was very touching compared to the non-bitch variant. Does it actually matter what title I choose?

Posted (edited)
1 hour ago, lee3310 said:

I see. So perchik implementation is missing this check "BGSSaveLoadGame::GetChange(pSaveLoadGame, File, 2048) )" and the game will revert to using facegen data on load. I'll take a closer look and report it to perchik if that's the case.

 

Yeah my assumption here is that when you set AddChange 2048 that this would disable usage of facegen data.  But even in vanilla that doesn't seem to be the case, but going through some of this it's pretty clear that there was a plan but that was thrown out the window by kludging and hackery rather than refactoring.

 

At least what I could tell for TESActorBase::AddChange calls BGSSaveLoadGame::ShouldAddChanges, which that has a condition check on (globalFlags & kGlobalAllowChanges) == 0 [it appears to be set to 1 by the constructor] and some TLS value.  I'm assuming this condition is never true, so BGSSaveLoadChangesMap::AddChangeFlags is never set, and BGSSaveLoadGame::GetChange would never do anything.  Unless I missed something, totally possible.  I guess this is what I mean by it seems there was a plan, and perhaps this functionality didn't work right so they killed it and probably added in the kludge for player character being excepted from facegen because they figured nothing needs to modify NPC faces.

 

TLS value (offset 2236) appears to be a thread-side mirror of globalFlags.  Set/Unset via BGSSaveLoadGame::SetThreadAllowChanges.

Edited by dav42
Posted
2 hours ago, dav42 said:

 

Yeah my assumption here is that when you set AddChange 2048 that this would disable usage of facegen data.  But even in vanilla that doesn't seem to be the case, but going through some of this it's pretty clear that there was a plan but that was thrown out the window by kludging and hackery rather than refactoring.

 

At least what I could tell for TESActorBase::AddChange calls BGSSaveLoadGame::ShouldAddChanges, which that has a condition check on (globalFlags & kGlobalAllowChanges) == 0 [it appears to be set to 1 by the constructor] and some TLS value.  I'm assuming this condition is never true, so BGSSaveLoadChangesMap::AddChangeFlags is never set, and BGSSaveLoadGame::GetChange would never do anything.  Unless I missed something, totally possible.  I guess this is what I mean by it seems there was a plan, and perhaps this functionality didn't work right so they killed it and probably added in the kludge for player character being excepted from facegen because they figured nothing needs to modify NPC faces.

 

TLS value (offset 2236) appears to be a thread-side mirror of globalFlags.  Set/Unset via BGSSaveLoadGame::SetThreadAllowChanges.

🤔 AddChange() do make changes persistent for NPCs when i tested it with hair color last year. So i think perchik's logic for CheckNPCUsesPreCalcFace() should include that check too. 
I should be able to test all this stuff today/tomorrow. Just to be clear, the problem here is that NPCs doesn't keep the face color after game exit right ?

Posted (edited)
3 hours ago, lee3310 said:

I should be able to test all this stuff today/tomorrow. Just to be clear, the problem here is that NPCs doesn't keep the face color after game exit right ?

 

On vanilla (just F4SE, Address Library, BASS, and my kludgy skin tone function):

* At runtime - head color = no change, body = change

* Exit to menu, Load exitsave - head color = change, body = change

 

With addictol:

* At runtime - head color = no change, body = change

* Exit to menu, Load exitsave - head color = no change, body = change

* NPCs already changed from vanilla - head color = no change, body = change

 

 

What this suggests to me is that there is *some* functionality even with NPCs that have facegen to disable facegen, but it doesn't work at runtime.  I am guessing that the change flags are not propagating to change map on the BGSLoadSaveGame instance even though it appears there is functionality to do it from TESActorBase::AddChange.

 

But yeah, I think Addictol needs this condition check added to the detoured call.

 

 

I just tested throwing this into vanilla, and it does indeed produce the same result as Addictol.  This skips over that check for BGSSaveLoadGame::GetChange_TESForm__BGSChangeFlags_(g_BGSSaveLoadGame, npc, 2048), causes it to fall into a true condition (use facegen).

	static REL::Relocation<std::uintptr_t> target{ REL::Offset(0x0679B76) };
	target.write_fill(0x90, 25);

 

 

Added a few hooks & logging (vanilla):

[15:53:14.200] [20760] [I] BGSSaveLoadChangesMap::CheckChangeFlags(000002918B7810A0, 00002CD4, 00000800) -> false
[15:53:14.200] [20760] [I] BSFaceGenManager::CheckNPCUsesPreCalcFace(00002CD4) -> true
[15:53:24.948] [23764] [I] a_actor = 00002CD5
[15:53:24.948] [23764] [I] baseNPC = 00002CD4
[15:53:24.975] [23764] [I] BGSSaveLoadChangesMap::CheckChangeFlags(000002918B7810A0, 00002CD4, 00000800) -> true
[15:53:24.975] [23764] [I] BSFaceGenManager::CheckNPCUsesPreCalcFace(00002CD4) -> false

 

Change flags are propogating, and they are influencing the result.

Edited by dav42
Posted

I don't know if this was an issue with Nuka Ride or just a Bethesda Game doing Bethesda things, but on the Nora route when I took Sis-droid to Not Starfield Galactic Park the bots were still actively hostile. This is the first and only time I've had this happen lol. When I did it on the Norita route it was normal.

 

Posted
3 hours ago, dav42 said:

With addictol:

* At runtime - head color = no change, body = change

* Exit to menu, Load exitsave - head color = no change, body = change

* NPCs already changed from vanilla - head color = no change, body = change

 

If you add NPC to addictol white list like i suggested JB to do, still same result or both head/face color change as expected at runtime ? 
 

Posted (edited)
2 hours ago, lee3310 said:

If you add NPC to addictol white list like i suggested JB to do, still same result or both head/face color change as expected at runtime ? 

 

Yes, that works using Hydra, however Hydra doesn't set the body tint on an NPC.  If I remove the facegen exception (using Hydra) then the head color will not change.

 

OK, I have body head & body tint working on NPCs.  That condition missing is a problem (the workaround is Addictol facegen exceptions), vanilla works fine though.  However, I have to call UpdateBodyTintHelper to force the body tint update.

 

I am also using QueueUpdate(0x0C) in Papyrus.

 

	static std::uintptr_t UpdateBodyTintHelper(RE::TESNPC* a1, RE::NiAVObject* a2)
	{
		using func_t = decltype(&UpdateBodyTintHelper);
		static REL::Relocation<func_t> func{ REL::ID { 825803, 0 } };
		REX::INFO("UpdateBodyTintHelper = {:08X}", func.offset());
		return func(a1, a2);
	}

 

Outline is basically:

Get base NPC

Call TESNPC::SetTintingData

baseNpc->AddChange(2048)

UpdateBodyTintHelper(baseNPC, a_actor->Get3D())

 

In Papyrus:

akActor.QueueUpdate(0x0C)

 

In general this has worked across saves/restarts, as long as that change flag condition is in the check npc uses precalc face function.

Edited by dav42
Posted
15 minutes ago, jstnf said:

Duke followed me home and wont leave no matter what after i accepted the offer 

 

 

I heard he is a pervy bot.

Posted (edited)
2 hours ago, dav42 said:

 

Yes, that works using Hydra, however Hydra doesn't set the body tint on an NPC.  If I remove the facegen exception (using Hydra) then the head color will not change.

 

OK, I have body head & body tint working on NPCs.  That condition missing is a problem (the workaround is Addictol facegen exceptions), vanilla works fine though.  However, I have to call UpdateBodyTintHelper to force the body tint update.

 

I am also using QueueUpdate(0x0C) in Papyrus.

 

	static std::uintptr_t UpdateBodyTintHelper(RE::TESNPC* a1, RE::NiAVObject* a2)
	{
		using func_t = decltype(&UpdateBodyTintHelper);
		static REL::Relocation<func_t> func{ REL::ID { 825803, 0 } };
		REX::INFO("UpdateBodyTintHelper = {:08X}", func.offset());
		return func(a1, a2);
	}

 

Outline is basically:

Get base NPC

Call TESNPC::SetTintingData

baseNpc->AddChange(2048)

UpdateBodyTintHelper(baseNPC, a_actor->Get3D())

 

In Papyrus:

akActor.QueueUpdate(0x0C)

 

In general this has worked across saves/restarts, as long as that change flag condition is in the check npc uses precalc face function.

ok I already cloned addictol repo and REed BGSSaveLoadGame class and all the underlying classes that it depends on (like a dozen or more 😮‍💨), I'll push the changes tomorrow and ping perchik about them so it can be added sooner to the main mod. 
PS
I thought we already established that UpdateBodyTintHelper() will be called after reset3d ? you think it's still needed ? cause in my implementation, i was able to change color without it (not using Hydra yet). 

Edited by lee3310
Posted
1 hour ago, lee3310 said:

I thought we already established that UpdateBodyTintHelper() will be called after reset3d ? you think it's still needed ? cause in my implementation, i was able to change color without it (not using Hydra yet). 

 

You are right, went back and tested without it and the problem the whole time was the flags.  So it seems like just this condition check is the problem why the face color didn't change, and the body tint issue seems to be flags.  I'll have to circle back with Hydra to see what's going on there.

Posted
9 hours ago, jstnf said:

Duke followed me home and wont leave no matter what after i accepted the offer 

 

 

just shoot em down. follwing end permanent

Posted
10 hours ago, dav42 said:

 

You are right, went back and tested without it and the problem the whole time was the flags.  So it seems like just this condition check is the problem why the face color didn't change, and the body tint issue seems to be flags.  I'll have to circle back with Hydra to see what's going on there.

You are playing AE right ? if so, can you test this version of addictol and tell me if it works:Addictol_Local.rar
 

Posted (edited)
31 minutes ago, lee3310 said:

You are playing AE right ? if so, can you test this version of addictol and tell me if it works

 

Old-gen usually, I can test AE.  But this works on OG:

- loading up Addictol (1.2) no skin tint on the head

- loading up with your patched Addictol - skin tint shows up on the head

 

This is from a earlier save, also works fine on new NPCs.  Works fine with Hydra as well.  This also works fine on AE.

 

Also tested this on NR NPCs: Sophie, Dara, Charlotte, Adolf, Corsican, Morgan, all worked fine on OG.  I think Addictol was also somehow related to the intermittent application of the body tint.

 

Edited by dav42
Posted (edited)
7 hours ago, dav42 said:

 

Old-gen usually, I can test AE.  But this works on OG:

- loading up Addictol (1.2) no skin tint on the head

- loading up with your patched Addictol - skin tint shows up on the head

 

This is from a earlier save, also works fine on new NPCs.  Works fine with Hydra as well.  This also works fine on AE.

 

Also tested this on NR NPCs: Sophie, Dara, Charlotte, Adolf, Corsican, Morgan, all worked fine on OG.  I think Addictol was also somehow related to the intermittent application of the body tint.

 

Good. I'll send the files to perchik this evening (when i get home). 
PS
One Caveat: With this check, If you want an NPC to resume using facegen, you will have to call removeChange() (remove the kface flag). I wonder if resetReference() would do that for you.

Edited by lee3310
Posted (edited)
5 hours ago, woodrealmelf said:

image.png.3aa10d8f8e04c9e7ed819877705f018a.png

Norita on right size i think

May i ask how you got so small girl? My Norita or Nora or every woman with hhs is always longer than all males. (Except Keyshan and some specials). I did not know this was possible? How did you do and how do aaf scenes work? 

Edited by Gubbe73

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...