I forgot to put the link to the actual mod in xBox xDGet your xBox version here!You can find me on this Discrod!
Before anything else, I would like to point that this is
NOT an SKSE port, nor it tries to be. There are things that can ONLY be done by DLLs which are not allowed on console, so SKSE functionality is
NOT going to be added, unless of course, a workaround exists, then
THE WORKAROUND can be added to the framework and given a function for easy use by other authors/porters.
I am accepting request to add things to this for mods to use for compatibility between other mods, be it in the scripts, or in the form of keywords that can be shared between mods adding this as a master instead of requiring the second mod. This will be explained further in the description.
The main selling point of this is for make porting easier, by taking advantage of already Convenience functions, and already created forms in this plugin for in-house compatibility without requiring the second mod as a master. This is still in early development, but I will do my best to make every addition as save compatible as possible.
Mods already using the framework (That I know of):The Global Cloak SpellOne cloak to rule them all xDThis is
INSPIRED by SPID, but of course it doesn't come even close to what SPID can do, because I can't use DLLs on xBox to do the distribution, BUT it is a Centric, Low Resource Cloak, that can distribute any spell from any mod and it even is save compatible.
The download from this page comes with a Cloak Template, which contains a Quest.
Spoiler:
Show
How to implement it in your mod/port:
- In xEdit, you right click on the quest from the template, COPY AS NEW RECORD TO YOUR MOD AND CHANGE THE FORM NAME to something relevant to your mod. This quest has my script attached. This script has ONE property that you have to fill with the Spell that contains your Mechanics (which if you are porting, it would be the same spell that the mod distributes using SPID). That's it, the spell will be added to my Global Cloak, and it will be distributes automatically without you having to do anything else, no more separated cloaks, no more anything. Just a quest.
Disclamer:Take into account that even if this cloak is generic and will add your Mechanic to whatever needs it, it has a range set to target relatively close NPCs, so if you want to apply your mechanics to say, a Dragon, that is flying far away, you will still need to do it the old way and set your Cloak with the needed distance to reach this creature... other than distance, the cloak has no other restrictions and will be able to add your spell even on saved games.
- The distance set on this cloak is just fine for mechanics targeting NPCs, you don't need to be right beside them, it is big, just not big enough to target flying Dragons xD
YOU DON'T NEED TO ADD ANY PART OF THIS RESOURCES TO YOUR MOD, THEY ARE ALL BUNDLED IN THE xBox VERSION THAT PLAYERS WILL HAVE TO DOWNLOAD TO USE THIS FUNCTIONALITY. YOU CAN USE THE SCRIPTS AND FUNCTIONS ON YOUR MODS, BUT DO NOT ADD ANY OF THIS FILES TO YOUR BSA, OR THEY WILL BREAK THINGS FOR EVERYONE!.
Hide/Show Config Spell/Item from mods:
No more lost Config Books, no more cluttered Spell menu full of config spells and powers xD... for the mods that apply this changes of course xDSpoiler:
Show
I've added a new framework inside this framework. Now this file comes with another template so you can add your config Spell/Item/Book/Ring/Whatever to the Framework, instead of giving it to the player directly...
How to implement it in your mod/port:
The steps are very similar to the Cloak Framework,
- In xEdit load the Config Template, find the Quest, Right Click, COPY AS NEW RECORD TO YOUR MOD AND CHANGE THE FORM NAME to something relevant to your mod. In this case your mod will have Simple Workaround Framework as a master (it can't work any other way, I tried).
- In this quest you have a few properties already set, and one with the name "ConfigSpellOrItem", set your Spell/Item/Whatever in there, and the next time the player cast the SWF - Config Power, your thing will be added. Cast it again, everything is removed.
Keyword Framework (not yet implemented, taking requests to add Keywords)Spoiler:
Show
So, in the old days we used to inject keywords in updates.esm, so other mods can add compatibility with ours without actually having it as a master, and the user would not require to have both mods, but if he did, he would have added functionality, or they would be already compatible out of the box.
The problem with this approach, is that, as the keywords didn't REALLY exist in Update.esm unless you have a mod that uses them, and it is too easy to confuse the FormID you need to use in your mod or patch (because it has to be the same that was used in the original mod)...
So my idea is to take requests for modders wanting their Keywords added to this one, so they can use it for their mods, and be added to other mods that need compatibility. Both mods would have This one as a master, but they won't need to have each other, which means that users can use only one of the mods without needing different versions of it...
Example
Modder 1 makes a needs mod that uses it's own keywords to recognize the size of what you are eating, which is a thing that doesn't exists on vanilla keywords.
Modder 2 makes a mod that adds Morrowind foods all over for you to buy.
To make mod 2 compatible with mod 1, I would have to make a patch, or basically two versions, one that has the keywords, and Mod 1 as a master, and one for people that doesn't use mod 1, without the keywords...
If mod 1 asks me to add its keywords to the framework, instead of directly into he/her 's mod, then nothing would change for Mod 1, it would still behave the same way, but Mod 2 can add the keywords having THIS framework as a master, have only ONE version, and then the users can choose if they use Mod 1 or not, but Mod 2 would work anyway with or without Mod 1.
And it has already Started
Immersive Display Overhaul Keywords added
Spoiler:
Show
IDO_DisplayKeyword - ALL items using this system need this keyword for optimization purposes!
IDO_DisplayAsBattleaxeKeyword - Item will be displayed in same position & rotation as a Battleaxe
IDO_DisplayAsBowKeyword - Item will be displayed in same position & rotation as a Bow
IDO_DisplayAsDaggerKeyword - Item will be displayed in same position & rotation as a Dagger
IDO_DisplayAsGreatswordKeyword - Item will be displayed in same position & rotation as a Greatsword
IDO_DisplayAsMaceKeyword - Item will be displayed in same position & rotation as a Mace
IDO_DisplayAsShieldKeyword - Item will be displayed in same position & rotation as a Shield
IDO_DisplayAsStaffKeyword - Item will be displayed in same position & rotation as a Staff
IDO_DisplayAsSwordKeyword - Item will be displayed in same position & rotation as a Sword
IDO_DisplayAsWaraxeKeyword - Item will be displayed in same position & rotation as a Waraxe
IDO_DisplayAsWarhammerKeyword - Item will be displayed in same position & rotation as a Warhammer
New FunctionsConvenience Functions and their behavior:
Aside from the Cloak, I've added some Convenience functions directly to the main scripts, which means that anything that Extends from this ones already have the functionality added, and can use them without needing to do anything else... Some of this functions were taken from SKSE, so you will find that you don't need to Workaround some functions to port anymore... Again, this are Convenience functions, not new functionality,but they do exist in SKSE with the same names, so some mods needed a Workaround to make the scripts work correctly, now they don't.
To know if you have to Workaround something to make it compatible without SKSE, the fastest way is to open the script and compile it without modifying anything, that will give you errors in the lines that contain functions that don't exist on vanilla. If you have this resource
installed, you will find that functions that gave an error before, they compile fine now... this are the functions, where they come from, and
what they do.
Also, you can use any of this functions in your own scripts when creating a new mod, or to make a port more efficient. More functions will be added with time, and can be requested here to be added.
Actor
(NEW) bool Function IsPlayer()
Spoiler:
Show
This function uses the more low resource way of checking if the actor is the player... which is, having the PlayerRef as a property, and checking against the actor directly, no more Game.GetPlayer(). Usage example
Old, resource intensive function
If akActor == Game.GetPlayer()
Do Something
EndIf
New way
If akActor.IsPlayer()
Do Something
EndIf
Armor(From SKSE) Int Function GetWeightClass()
Spoiler:
Show
Returns an int depending on light/heavy/other or none. 0 = Light Armor, 1 = Heavy Armor, 0 = Other or none
Example
int WeightClass = akArmor.GetWeightClass()
if (WeightClass == 0)
Debug.Trace("The Armor is Light Armor.")
elseif (WeightClass == 1)
Debug.Trace("The Armor is Heavy Armor.")
elseif (WeightClass == 2)
Debug.Trace("The Armor is neither Heavy nor Light".)
EndIf
(From SKSE) Bool Function IsLightArmor() -> Returns True or False
Spoiler:
Show
Example
If akArmor.IsLightArmor()
Debug.Trace("The armor is Light Armor!")
Else
Debug.Trace("The armor is NOT Light Armor!")
EndIf
(From SKSE) Bool Function IsHeavyArmor() -> Returns True or False
(From SKSE) Bool Function IsClothing() -> Returns True or False
(From SKSE) Bool Function IsBoots() -> Returns True or False
(From SKSE) Bool Function IsCuirass() -> Returns True or False
(From SKSE) Bool Function IsGauntlets() -> Returns True or False
(From SKSE) Bool Function IsHelmet() -> Returns True or False
(From SKSE) Bool Function IsShield() -> Returns True or False
(From SKSE) Bool Function IsJewelry() -> Returns True or False
(From SKSE) Bool Function IsCloathingHead() -> Returns True or False
(From SKSE) Bool Function IsCloathingBody() -> Returns True or False
(From SKSE) Bool Function IsCloathingFeet() -> Returns True or False
(From SKSE) Bool Function IsCloathingHands() -> Returns True or False
(From SKSE) Bool Function IsCloathingRing() -> Returns True or False
(From SKSE) Bool Function IsCloathingRich() -> Returns True or False
(From SKSE) Bool Function IsCloathingPoor() -> Returns True or False
FormList(From SKSE) Function AddForms(Form[] akForms)
Spoiler:
Show
Example
Forms[] myFormArray -> this is your own array of forms, you need this to use this function and is where you have all the forms you want to add to the formlist.
FormList theDestinationFormList -> This is where you want to put the forms
theDestinationFormList.AddForms(myFormArray) -> This is how you use it, now all the forms from the array will be inside the FormList
Spell(NEW) AddToCloak()
Spoiler:
Show
Example
Spell Property MySpell Auto
MySpell.AddToCloak() -> This adds this spell to the Global Cloak to be distributed. It is the same function used in the template.
(NEW) RemoveFromCloak() -> This can remove your spell from the Global Cloak if you need to, at any time. Used the same way as AddToCloak().
Weapon(From SKSE) IsBattleAxe() -> Returns True or False
Spoiler:
Show
Example
If akWeapon.IsBattleAxe()
Do Something
EndIf
(From SKSE) IsBow() -> Returns True or False
(From SKSE) IsDagger() -> Returns True or False
(From SKSE) IsGreatsword() -> Returns True or False
(From SKSE) IsMace() -> Returns True or False
(From SKSE) IsStaff() -> Returns True or False
(From SKSE) IsSword() -> Returns True or False
(From SKSE) IsWarhammer() -> Returns True or False
(From SKSE) IsWarAxe() -> Returns True or False
Future Plans:
Config Framework and more Workaround functions already implemented for everyone to use. Already implemented.
For now I will be helping modders/porters make the change on their mods to be included in the framework, and adding requested Keywords mostly.