Jump to content

DOWNLOAD MODS

Are you looking for something shiny for your load order? We have many exclusive mods and resources you won't find anywhere else. Start your search now...

LEARN MODDING

Ready to try your hand at making your own mod creations? Visit the Enclave, the original ES/FO modding school, and learn the tricks of the trade from veteran modders...

JOIN THE ALLIANCE

Membership is free and registering unlocks image galleries, project hosting, live chat, unlimited downloads, & more...

[SKY] Mod Advice (Player Model and NPC Tracking)


nekollx
 Share

Recommended Posts

Figured I'd pop in here and see if anyone had any advice on better method then my current brute force thoughts on a mod project i'm working on. Right now I'm working on a idea where as you collect more and more dragon souls you become more and more dragon like. It's a slow process starting with a change to the eyes and some scales around the eyes and progressing further and further until by the end your like a mix of a argonian and a werewolf with wings in terms of visuals. Currently how i'm approaching it is by making extra races and just changing them as you progress but that seems a but overkill for the more subtle changes that lead up to essentially turning into a argonian (just a more feral looking one) then  on to full dragon man. Is there a better way, a way to swap out the eyes and maybe change the skin texture? Considering i want you to reverse the process by spending dragon souls (since the changes are a reflection of so much dragon energy bottled up in your body with no where to go).

 

Thoughts?

Edited by nekollx
Link to comment
Share on other sites

In order to do this you'll need SKSE.

 

Off the top of my head, SKSE has several functions that can change the actorbase such as GetFaceTextureSet, SetFaceTextureSet, GetSkin and SetSkin. As well as the textures you may or may not require to use HeadParts to add and remove parts of the actor mesh as well. Your mod will end up very script heavy keeping track of what "stage" the actor is currently at and what to change, and when to change. Good news is, you could probably do this with just one new unique race? :lol:

 

Check the CK Wiki or SKSE site for more information on these functions.

Link to comment
Share on other sites

yeah been looking around even installed Skyrim and the CK on my other PC so i can keep modding and gaming seperate, installed skyui and the sky ui SDK. Anyone have experience with the MCM Designer http://www.nexusmods.com/skyrim/mods/29821/? figured it would be a good utility for designing the scripting but even though ive created the dummy quest in the CK and generated the script from MCMD and put it in the folder with the other scripts i can't seem to find it to attach it for testing

Link to comment
Share on other sites

so used FO3 archive utilty to unpack the skyrim texture packs and i think i understand the structure but i just want to make double sure, with something like breton, imperials, etc the human races the actual face texture is the female.dds file right? the MSN, SK, and S files are for the detail/speculary/etc maps not the actual texture right?

Link to comment
Share on other sites

well finnaly getting some progress on the mcm side of the mod with storying the base actor details, Question: Anyone have any idea ifthe best way of recording the ref id of NPCs you have talked to? I want to build intothe system that as you progressivly mutate further that newer people will think your not a normal race but a argonian and older people will think your a different person until you talk to them again and pass a seach check. But to do that i need to build a system that when you talk to a NPC for the first time it simply records (probably int oa array) their ref ID and the Race and stage of the transformation you are at the time. so if you go back later after you have mutated they might not reconize you and treat you as a new meet, complete with any inherite predjuices that may come with seeing you as a beast race

Link to comment
Share on other sites

So got my 3 main pages set up though having some trouble actually displaying the relevant info though it compiles so there isn't a problem in the code i'm just not putting in the syntax right. Maybe someone has some thoughts on what I'm doing wrong?
For the first page i'm trying to display the path/name/id/etc, the relevant data for the players skin, eye, hair face, (hands/feet, since as i understand it thats also a separate texture file) so that as the program changes them dynamically over the core of the mods life the original is preserved for returning to it later however i can't seem to get that data to display (or in some cause trying to fetch it cause the script to fail to compile) I will provide full code at the end for scrutinizing.
Additionally note the Set Base Race basically tells the script "turn the mod on and start tracking" before that you can race menu yourself to your hearts content, but after that if you change your race via race menu or whatever it will result in the same effect as hitting the stage 5 "false argonian" transformation. As i want to make sure it's fetching and recording the actor data i haven't built the start recording data yet so if you don't see a function for that that's intentional at this point.
B63tZtVCAAAxjRz.jpg
 
this is actually working as intended but i feel the names could be better, function wise it works something like this
"Player can Safely house [1] Dragon soul per [5] levels. Once you pass this tolerance level every [5] over that will advance the change 1 stage."
B63tZtwCMAAo9xf.jpg
 
Lastly we have the relations page, this makes heavy use of AKSpeaker to track the id of the NPCs you talk to. Right now I'm only concerned with tracking your contacts but even that isn't working (or im not using the right syntax to display it) but later on it ties into Page one as it will additionally track what race you were when you talked to them, what stage of the transformation you are at, and your relationship. In the end once the player hit level 5 transformation and turns into a "false argonian" (or uses race change all NPCs will treat you as a new character so in theory the same NPC could have 2 records for you, knowing you in two different forms but not knowing their one and the same. You cna correct this by talking to them and passing a persuasion check (which ideally would have them referring to you with their inital relations and racial remarks even if you have a new form)
B64r4itCIAIFwGq.jpg
 
ScriptName DBEScript Extends SKI_ConfigBase
; should auto fill correctly.
Actor Property PlayerRef Auto
Actor Property akSpeaker Auto
KeyWord Property Vampire Auto

; Declarations
int EvoStage = 0
int SoulVal = 1
int LvlRangeVal = 5
int OverflowVal = 5

 string[] cNPCID
 string[] cNPCReconizedPCRace
 string[] cNPCReconizedPCRelation

string childSuffix = " Adult"
string vampireSuffix
string PlayerSex
Race playerRace
string pcRaceName
string EvoStageName = "Uncontaminated"
Armor pcSkin
TextureSet pcFace

Function NPCConvo()
	   int i = 0 
	   if (akSpeaker != None)
			   if (i < 128)
				cNPCID[i] = akSpeaker as string 
			   endIf
	   endif
endFunction
      
event OnPageReset(string page)
        {Called when a new page is selected, including the initial empty page}		
		playerRace = PlayerRef.GetRace()
		pcRaceName = playerRace.GetName()
		
		; pcFace = GetFaceTextureSet()
		pcSkin = playerRace.GetSkin()
		; eye texture declaration
		; hair texture declaration

		;Check to see if the player is a child
		if PlayerRef.IsChild()
			childSuffix = " Child"
		EndIf

		;Check the sex of the player - since actors never have a -1 you can just check once.
		;(Single Gendered races such as Dragons are considered default aka 0) afaik anyway.
		if (PlayerRef.GetActorBase().GetSex())
			PlayerSex = "Female"
		else
			PlayerSex = "Male"
		endIf

     if (page == "Actor Details")		
		;Check to see if race has Keyword of vampire
		if playerRace.HasKeyword(Vampire)
			vampireSuffix = " [Vampire]"
		EndIf
				
		if (EvoStage == 1)
			EvoStageName = "Level 1"
		elseif (EvoStage == 2)
			EvoStageName = "Level 2"
		elseif (EvoStage == 3)
			EvoStageName = "Level 3"
		elseif (EvoStage == 4)
			EvoStageName = "Level 4"
		elseif (EvoStage == 5)
			EvoStageName = "False Argonian I"
		elseif (EvoStage == 6)
			EvoStageName = "False Argonian II"
		elseif (EvoStage == 7)
			EvoStageName = "False Argonian III"
		elseif (EvoStage == 8)
			EvoStageName = "False Argonian IV"
		elseif (EvoStage == 9)
			EvoStageName = "False Argonian V"
		elseif (EvoStage == 10)
			EvoStageName = "Wyrm"
		endif

		AddTextOptionST("PLAYERRACE_T", "Race", PlayerSex + " " + pcRaceName + childSuffix + vampireSuffix)
		AddTextOptionST("PLAYERFACE_T", "Face Texture", "pcFace Placeholder")
		AddTextOptionST("PLAYERSKIN_T", "Skin Texture", pcSkin as string)
		AddTextOptionST("PLAYEREYE_T", "Eye Texture", "Place Holder")
		AddTextOptionST("PLAYERHAIR_T", "Hair Set", "Place Holder")
		AddTextOptionST("PLAYERDRAGONSTAGE_T", "Evolution Stage", EvoStageName)
		AddToggleOptionST("PLAYERBASERACE", "Set Base Race", 0)
     endIf
     if (page == "Relations")
	 	 int g = 0
		 While (g <= 128)
				if (cNPCID[g] != "")
				AddTextOptionST("NPCCONVOS"+g, "Contacts", cNPCID[g])
				endif
				g = g + 1
		endWhile
     endIf	
	  
     if (page == "Soul Threshhold")
	 	 ; Can safely hold [1] soul per [5] levels. Stages advance for every [5] soul over the limit
	 
		 AddSliderOptionST("SOUL_LIMIT", "Safe Souls per lvl rng", SoulVal)
		 
		 AddSliderOptionST("LEVEL_RANGE", "Soul tolerance range", LvlRangeVal)
		 
		 AddSliderOptionST("SOUL_OVERFLOW", "Num souls over limit for change", OverflowVal)

    endIf	 
endEvent

     
state SOUL_LIMIT ; SLIDER
	event OnSliderOpenST()
		SetSliderDialogStartValue(SoulVal)
		SetSliderDialogDefaultValue(1)
		SetSliderDialogRange(1, 99)
		SetSliderDialogInterval(1)
	endEvent

	event OnSliderAcceptST(float value)
		SoulVal = value as int
		SetSliderOptionValueST(SoulVal )
	endEvent

	event OnDefaultST()
		SoulVal = 50
		SetSliderOptionValueST(SoulVal )
	endEvent

	event OnHighlightST()
		SetInfoText("How many souls per level rang can you safly hold")
	endEvent
endState

state LEVEL_RANGE ; SLIDER
	event OnSliderOpenST()
		SetSliderDialogStartValue(LvlRangeVal)
		SetSliderDialogDefaultValue(1)
		SetSliderDialogRange(1, 99)
		SetSliderDialogInterval(1)
	endEvent

	event OnSliderAcceptST(float value)
		LvlRangeVal = value as int
		SetSliderOptionValueST(LvlRangeVal )
	endEvent

	event OnDefaultST()
		LvlRangeVal = 50
		SetSliderOptionValueST(LvlRangeVal )
	endEvent

	event OnHighlightST()
		SetInfoText("what is the range before before you can hold more souls")
	endEvent
endState

state SOUL_OVERFLOW ; SLIDER
	event OnSliderOpenST()
		SetSliderDialogStartValue(OverflowVal)
		SetSliderDialogDefaultValue(1)
		SetSliderDialogRange(1, 99)
		SetSliderDialogInterval(1)
	endEvent

	event OnSliderAcceptST(float value)
		LvlRangeVal = value as int
		SetSliderOptionValueST(OverflowVal )
	endEvent

	event OnDefaultST()
		LvlRangeVal = 50
		SetSliderOptionValueST(OverflowVal )
	endEvent

	event OnHighlightST()
		SetInfoText("how many souls over the threshhold cause a change")
	endEvent
endState

event OnConfigInit()
     Pages = new string[3]
     Pages[0] = "Actor Details"
     Pages[1] = "Relations"
     Pages[2] = "Soul Threshhold"

endEvent

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...