PJMail Posted April 13, 2022 Share Posted April 13, 2022 Really odd thing: - Created an actor from an _NPC record in my mod via "Placeatme(_NPC)".- Use Looksmenu (invoked via ShowRaceMenu) to change this Actors hair/face.- Create another actor the same way (from the base _NPC record) - they have the new hair/face! What gives? The base _NPC record specifies all the headparts/face morph stuff explicitly, yet it seems like Looksmenu has changed the Actor I was working on AND the base template it was created from. Clearly I have not set things up correctly.How do I specify a base NPC template, that I can create any number of Actors from, that doesn't change? I don't want them to be randomized (like creating Settlers) - just independently modifyable. Thanks Link to comment Share on other sites More sharing options...
Zorkaz Posted April 13, 2022 Share Posted April 13, 2022 Sounds like it's supposed to work.Remember that Nate/Nora also work with templates and thus Player Nora, AI Nora and Dead Nora all share the same face. Link to comment Share on other sites More sharing options...
LarannKiar Posted April 13, 2022 Share Posted April 13, 2022 I've never modified generic NPCs in the Looksmenu so I'm not sure but isn't ShowRaceMenu/Looksmenu supposed to actually work like this? Didn't the developers intentionally make the Looksmenu to save the new facial and body morphs in the Actor Base form and not the Actor reference so that they can create multiple Actor references of the same Actor Base (e.g. the Player NPC in Kellogg's memory who's templated from the Player Actor Base, 00000007)? (Because any changes on the Player are also saved in the Actor Base form). - Created an actor from an _NPC record in my mod via "Placeatme(_NPC)". Is this NPC templated from a Leveled Character or they have any Actor Templates (Actor form >> Templates tab)? - Create another actor the same way (from the base _NPC record) - they have the new hair/face! Did you get their Actor Base with GetActorBase() or GetLeveledActorBase()? Link to comment Share on other sites More sharing options...
PJMail Posted April 13, 2022 Author Share Posted April 13, 2022 (edited) Thanks Zorkaz & LarannKiar. You are confirming my suspicions that looksmenu modified the actorbase - a lot of other operations already do (setprotected, setoutfit) so I should not have been surprised... So, I just have a basic _NPC record "baseactor" (not templated off anything else as I need to specify everything specially in it), and create an in-game actor from it via Actor NewActor = Self.PlaceActorAtMe(BaseActor as Actorbase, 0, None) How would you suggest I do this differently then? I don't want anything 'randomized' so thought I couldn't use a LeveledActor... Thanks Edited April 13, 2022 by PJMail Link to comment Share on other sites More sharing options...
Zorkaz Posted April 13, 2022 Share Posted April 13, 2022 This is foreign land to me, but I think when it comes to general workshop NPCs you're hitting a dead end here. Link to comment Share on other sites More sharing options...
LarannKiar Posted April 13, 2022 Share Posted April 13, 2022 (edited) Thanks Zorkaz & LarannKiar. You are confirming my suspicions that looksmenu modified the actorbase - a lot of other operations already do (setprotected, setoutfit) so I should not have been surprised... So, I just have a basic _NPC record "baseactor" (not templated off anything else as I need to specify everything specially in it), and create an in-game actor from it via Actor NewActor = Self.PlaceActorAtMe(BaseActor as Actorbase, 0, None) How would you suggest I do this differently then? I don't want anything 'randomized' so thought I couldn't use a LeveledActor... Thanks Maybe you could try Leveled Characters. Create a Leveled Character and use GetLeveledActorBase() to PlaceAtMe() them. (You can put different actors with the same appearance in the Leveled Character). I've never used GetLeveledActorBase() for PlaceAtMe() so I have no idea if this would work at all.. but Leveled Characters (or Leveled Actors) can be edited with a script, so, (assuming that GetLeveledActorBase() and PlaceAtMe() work together), you might be able to create Actors which have generated Actor Bases who don't share facial and body morph data. Edited April 13, 2022 by LarannKiar Link to comment Share on other sites More sharing options...
PJMail Posted April 14, 2022 Author Share Posted April 14, 2022 (edited) No, Just No. I don't understand this. I Created a leveledNPC list (lChar_mynpc) containing just my original NPC_ template, then a created a new NPC record (Mynpc_template) totally templated on this LevelelNPC list.Now when I create a new NPC via PlaceActorAtMe(mynpc_template) it all works fine and both the new NPC, and it's 'GetLeveledActorBase()', are FFxxxxxx formids.BUT when I attempt to use looksmenu on it the Face/Hair WON'T change, and when I exit Looksmenu the entire NPC becomes invisible.... Bethesda hates me. Edited April 14, 2022 by PJMail Link to comment Share on other sites More sharing options...
LarannKiar Posted April 14, 2022 Share Posted April 14, 2022 Did you try Actor.SetCharGenSkeleton(True) and Game.PrecacheCharGen()? Link to comment Share on other sites More sharing options...
PJMail Posted April 14, 2022 Author Share Posted April 14, 2022 I certainly do SetCharGenSkeleton(True) when using using the script version (see my script here) - and while am in the looksmenu the NPC re-appears, but dissappears again when I exit.The same thing happens if I just use SLM at the console. It seems to be a reported issue if you change the hair (etc) of an NPC based on a LeveledList. People often report this invisibility issue when they try and change Curie.Apparently the only way it works is to create a clone off the base record and modify that (what I was originally doing).This suggests it doesn't work to use looksmenu on a leveled NPC... What does precachechargen() do? Link to comment Share on other sites More sharing options...
LarannKiar Posted April 14, 2022 Share Posted April 14, 2022 (edited) People often report this invisibility issue when they try and change Curie. I forgot that Curie is a Leveled Character.. sorry. Apparently the only way it works is to create a clone off the base record and modify that (what I was originally doing).This suggests it doesn't work to use looksmenu on a leveled NPC... Unfortunately I don't have any ideas.. ShowRaceMenu() was designed for unique actors and it seems that it can't handle generated actor bases, only the ones created in the editor. If this is the case, then I'm faraid I won't be able to help much.. What does precachechargen() do? It just precaches the face gen data. This function is called only once in the game, before the intro. I thought it would help with the Leveled Character issue... As for the script, why did you change the NPC's facial animations to Player anims with "NPC.ChangeAnimFaceArchetype(AnimFaceArchetypePlayer)" in OnMenuOpenCloseEvent "LooksMenu" "abOpening == 0"? The Player's facial animations (including the animations cameras) were made specifically for the Player. The PlayerKeyword is only necessary if you use the NPCSinkFacegenMarker (Interaction Point 0, Marker Keyword). Did you try other furnitures? CharGen furnitures (e.g., FaceGenSurgeryChair, FaceGenBarberChair) are not special furnitures. When you press "Confirm Character" in the LooksMenu, the Player exits any furniture automacally. Sorry I couldn't be more help but CharGen seems to have a lot of hardcoded behavior.. But please update this topic if you manage to find a solution. (I'm actually interested in the differences of the editor made and generated actor bases). Edited April 14, 2022 by LarannKiar Link to comment Share on other sites More sharing options...
Recommended Posts