Jump to content

Mod Compatibility.


Eckss

Recommended Posts

@Mujuro, do you not have the cooperation of the other mod author? I suppose that must be it, otherwise you could just split the conversation between the two Mods. I presume the other author is also unwilling to allow you to just include their dialogue assets in your mod. Without the cooperation of the other mod author, I think you’re probably doing all you can already. I’ll let you know if I think of anything else, good luck.

It's not an issue of cooperation, we're already willing to do that and have discussed it (otherwise, there really wouldn't be a point to making interactive followers :)). The challenge we face is invoking custom voice types and associated custom dialogue from one another's mods. Basically, there's no practical way I can think of to do it EXCEPT by "splitting" the conversation, using assets from each respective mod. What I was hoping for was that SPIKE would somehow be able to assist with proxying voice types and dialogue, as simply "including" the other mods' dialogue assets won't work readily (e.g., unless we all agree on an ESM approach, and toss our voice types there, etc.). IOW, even if I pulled all of another follower mods voice files, I still can't get around the voice type issue, as the voice files are meant to be used with another voice type. And I can't "recreate" the voice type from the other mod in my own because they're different forms after loading, even if, arguendo, I can force a certain hex ID. So right now I'm basically stuck pulling the dialogue assets directly from the other mod via a psuedo-proxy framework after doing a check to determine whether the mod is loaded.

 

In any case, I'd very much appreciate it if you think of a way that SPIKE could facilitate interactivity among different follower mods in this regard (would save me a ton of work :P).

Link to comment
Share on other sites

Two more posts while I was writing mine; OK, here goes

 

@Ironman5000, if you want to use SPIKE, you’ll need to let me know what keywords you want and I’ll add them. Then you assign them to your custom objects in however many Mods you want and change the levelled list edits to include all instances of the keywords rather than just the specific objects from each Mod. That way, whichever Mod loads last will use every object from all of them. :) If you’re interested, I can prepare a step-by-step guide if you want.

 

@IsharaMeradin, yes it would, or to create an alternate version including the other Mod authors changes. This will always be easier for some Mod combinations and I characterised it as the ‘Compatibility Mod’ method and as you said

… it would be much easier for the author of the crafting mod to say screw it and rebuild their mod without the weapon material type keyword and just leave the arrows to clutter in the misc category.
Which is fine and reflects my own opinion about the Compatibility Mod method.

 

Eck.

Link to comment
Share on other sites

OK sounds good, I will come up a keyword list as soon as I can :thumbsup: maybe you could upload that guide in this thread somehow, it might help get your point across for anyone else unclear on it's operation? If not PM me.

 

I am sure I have this right but it's good to make double-sure so I don't mess it up :tongue:

Link to comment
Share on other sites

@Mujuro, why don’t you try doing what filmmakers do when they need to film a scene involving 2 characters who can’t directly interact with each other such as when 1 is a CGI and the other isn’t?

Prepare the conversation in two completely separate halves, that make sense when played together, but each half doesn’t use any assets from the other half, they just play at the same time. When 1 character speaks for 11.3 seconds, the other waits 11.3 seconds. Then the second character speaks for 12.8 seconds while the first one waits and so on. You could also have each half wait until it receives an update from the other one letting it know that it’s time to speak.

 

No passing of custom voice types required, each mod handles its own character’s half of the conversation and the silent waiting periods line up with the speaking periods in the other mod.

 

Eck.

Link to comment
Share on other sites

I give up. I just don't see it. I have access to this forum but clearly am not "technically proficient" to understand what you are talking about. <-- this is my problem

 

I'm all for something that will make compatibility between mods easier but when I can't understand how to implement it or even what you are getting at, I have no recourse but to say screw it and go on doing mods the way I know how. Which is the same thing you want to try to prevent with using mods...

 

*********************

I understand a compatibility patch and I have made a few and honestly if people use them or not, I don't care. I made them cause I was using those mods at the time and I got the permission to release it. To me that's easier than trying to make the mod bigger than its scope.

 

In one sense I miss the Baldur's Gate modding cause at first they had the last file installed gets to be used method, but then they developed an installation tool which could go in and change one or more values of the existing file and allow another mod to change other values so that both could work. But TES games weren't built that way.

Link to comment
Share on other sites

@Mujuro, why don’t you try doing what filmmakers do when they need to film a scene involving 2 characters who can’t directly interact with each other such as when 1 is a CGI and the other isn’t?

Prepare the conversation in two completely separate halves, that make sense when played together, but each half doesn’t use any assets from the other half, they just play at the same time. When 1 character speaks for 11.3 seconds, the other waits 11.3 seconds. Then the second character speaks for 12.8 seconds while the first one waits and so on. You could also have each half wait until it receives an update from the other one letting it know that it’s time to speak.

 

No passing of custom voice types required, each mod handles its own character’s half of the conversation and the silent waiting periods line up with the speaking periods in the other mod.

 

Eck.

 

I think we're still talking past one another. What my current psuedo-proxy framework does is similar to the above, but even less complicated than what you've described (indeed, I rarely even need to measure seconds, as I just check for scene completion under various other conditions). I've already got scenes set up already where the mod will recognize companions from other mods in the same way they would recognize a vanilla follower, like Lydia. The scenes all work, the lines and animations play, etc. All I was trying to determine was whether SPIKE represents an EASIER way to grab voice assets from the other mod(s) compared with the way I've already got working. For example, mod A follower initiates a dialogue with custom lines, voice type, etc., with follower from mod B, who'll (ideally) respond using mod B's custom voice type and custom dialogue. Then mod A follower and mod B follower hug and go back to doing their own thing. :P The specific part I was hoping to get through SPIKE (more readily) is the accessing of mod B's custom dialogue. Can I get to it already now? As a general rule, yes, but it in part depends on how the author of mod B set up the dialogue to begin with (particularly on condition use). The rest of the stuff, such as moving into place, timing, animations, those don't need intermod interactivity per se; rather, most of it is just a matter of setting up aliases.

 

Please keep in mind that this isn't just "me" involved here, but also other modders, each with different degrees of CK/scripting knowledge, proficiency, comfort, etc. I had hoped that SPIKE represented an "easier" way to do something for modders and, as such, I was inclined to investigate. :) Again, to be clear, what I'm looking for (regardless of whether it's via SPIKE or something else) is a framework that allows for easier access to dialogue from another mod. I'm not sure it exists, and if it doesn't, I'll simply have to continue use of my current method of pulling dialogue (unless we all decide to use a joint ESM).

Link to comment
Share on other sites

@Mujuro, in your case, I think I’ve detailed every way SPIKE can help. :sad: I wish I could do more. I always like to try and help if I can however; so I’ll make this suggestion:

If you’re not doing this already, have you considered preparing a generic script to be included in each follower mod that contains a function that collects all the information you need and returns it when the function is called by your conversation quest. Also, as shared infos are easier to access than other voice assets, perhaps the other authors could be persuaded to make their dialogue shared infos.

That’s all I have to offer at the moment and I am aware that you may be doing this already, so I’ll wish you the best of luck with this interesting and challenging project you’ve set yourself.

Eck. :thumbsup:

Link to comment
Share on other sites

Notification

 

I’ve been trying to prepare a step-by-step guide and come across a problem; the scripting level required to make some types of Mod compatible may be beyond the skill level of some Mod authors. To address this, I’ve decided to try to somehow provide some easy-to-use scripted functions for people, as my goal is to make this as simple to use as possible. As anyone who’s grappled with Papyrus scripting will be aware, this may take some time; especially as I’d like to be able to do it without SkSE if possible. So I’m going to be a bit busy for a while but I will post my progress here for anyone who’s interested or would like to add their input.

 

I would have done this before, but I hadn’t realised that this was going to be a problem, so thanks for making me aware of it.

 

Thanks for your interest,

Eck. :)

 

P.S.

I’m going to add level keywords for use with levelled lists. Should I add a keyword for every level from 1 to 50 or are some of the levels unnecessary?

Would I be better off just adding one at each of, say, levels 1, 3, 7, 15, 21, 30, 35 etc. and leaving the rest empty?

Link to comment
Share on other sites

  • 2 weeks later...

My scripting skills aren’t great, but I’ve tested this Script and it works for adding items to a levelled list when the game starts up. To my embarrassment, I’ve realised that this Script doesn’t require SPIKE at all in order to work. :blush:

In a spirit of co-operation, I’m publishing it for anyone who wants to use it.

 

Scriptname EcksPopulateListScript extends Quest Hidden 
{Populate Levelled List on Startup}

Import debug

Function PopulateList(FormList FL, LeveledItem LI, FormList KW, Int[] LV) Global
Int i = 0
While (i < FL.GetSize())
	Form f = (FL.GetAt(i) as Form)
	Int j = 0
	While (j < KW.GetSize())
		If f.HasKeyword (KW.GetAt(j) as Keyword)
			LI.AddForm (f,LV[j] as Int,1)
		EndIf
		j += 1
	EndWhile
	i += 1
EndWhile
Return
EndFunction

State busy
;	{Preventing multiple simultaneous calls to the script}
EndState

GlobalVariable Property AlreadyDone Auto

FormList Property ItemList Auto
LeveledItem Property LevelledList Auto
FormList Property KeywordList Auto
Int[] ItemLevels

Event OnInit()
AlreadyDone.SetValue(0)
RegisterForSingleUpdate(1.0)
EndEvent

Event OnUpdate()
If AlreadyDone.GetValue()== 0
Notification("Populating Levelled List")
Notification("Please Wait...")
PopulateList(ItemList, LevelledList, KeywordList, ItemLevels)
AlreadyDone.SetValue (1)
Notification("Levelled List Populated")
Else
GoToState ("busy")
EndIf
EndEvent

 

Simply Create an empty Quest that is Start Game Enabled and attach this script to it. Then set the Script Properties ItemList, LevelledList, KeywordList and ItemLevels to the values you need.

ItemList should be set to a FormList that contains the items you want to add.

LevelledList should be set to the LeveledItem you wish to add your items to.

KeywordList should be set to a FormList that contains the Level Keywords that you have placed on your items to indicate the level at which they should be added to the list.

ItemLevels should be set to an array that contains the Levels corresponding to the Level Keywords in the same order as the KeywordList. The easiest way to do this is to add these lines to the script under the Event OnInit() line:

 

ItemLevels = New Int ;{where size is the number of different levels you wish to use, as an integer. E.g. 5}

ItemLevels [0] = a ;{where a is the first level you wish to use}

ItemLevels [1] = b ;{where b is the second level you wish to use}

ItemLevels [2] = c ;{where c is the third level you wish to use}

 

; {and so on up to}

 

ItemLevels [size-1] = x ;{where size-1 is an integer that is one less than the size (because arrays count from 0) AND where x is the last level you wish to use}

 

With this setup, the levelled list that you’ve set as LevelledList in the properties will have the items on the FormList that you’ve set as ItemList added to it at the levels you’ve specified in the array ItemLevels, in the order that the keywords on the FormList that you’ve set as KeywordList are in.

 

As I said at the start of this, my scripting skills aren’t great, but I have tested this, and it does work. If anyone knows a better way of doing this, or if anyone knows of any problems associated with using this method, I’d appreciate the information.

Eck. :)

Link to comment
Share on other sites

  • Recently Browsing   0 members

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