Now the long version:
For years I've been modding Morrowind but it has been over a decade since I've released ANYTHING. Frankly this is unacceptable given the contributions I'm taking to playing with.
Here is an extremely simple example of a script that could help a lot of people and that many of my mods are based on.
Code: Select all
BEGIN kBSFScrGlbCalendarDayUpdate
;Similar to DaysPassed but based on calendar math instead of days which could be missed.
float fResult
set fResult to Year * 365.0
if ( Month == 1 )
set fResult to fResult + 31.0
elseif ( Month == 2 )
set fResult to fResult + 59.0
elseif ( Month == 3 )
set fResult to fResult + 90.0
elseif ( Month == 4 )
set fResult to fResult + 120.0
elseif ( Month == 5 )
set fResult to fResult + 151.0
elseif ( Month == 6 )
set fResult to fResult + 181.0
elseif ( Month == 7 )
set fResult to fResult + 212.0
elseif ( Month == 8 )
set fResult to fResult + 243.0
elseif ( Month == 9 )
set fResult to fResult + 273.0
elseif ( Month == 10 )
set fResult to fResult + 304.0
elseif ( Month == 11 )
set fResult to fResult + 334.0
endif
;Post days passed since last frame. This can become a real issue with high timescale values
set kBSFGlbFDaysFrame to ( fResult + Day ) - kBSFGlbFDays
;Post current Day
set kBSFGlbFDays to fResult + Day
;GameHour and this script are not updated concurrently. Post the value as this script sees it.
set kBSFGlbFGameHour to GameHour
set kBSFGlbIGameHour to GameHour
END
post SQRT stats if they're over 100,
post the pc's crosshair trajectory 1000u in front of the PC's camera,
take care of modding stats through spell effects based on global input,
provide distinct teleport spots for multiple companions,
etc.
Hopefully this sells you on my sincerity given that I'm holding a lot back.
Why haven't I just released all of it?
Standardization
Portability
Maintenance
Naming conventions
Load order
Still working out a productive system for asset-credit-management on my local FS.
Life is also chaotic.
Plugin naming conventions have always been meritless in our community. Here's an example of some possible improvements:
a) Given that changing a plugin's master files is difficult I found the simplest solution is to edit their characters via a hex-editor.
However this fails utterly when the length of the master's name expands, so any standardized library of master files should include additional underscores for filename expansion. I recommend 8 underscores prefixed to the file's name.
b) While it is impossible to specifically subcatagorize every plugin there are some standard categories that all plugins fit and these can be assigned a numerical value to assist in load-order management.
0 - Vanilla - Obvious
2 - Asset - Files that contain asset records but put no active content in-game. Could also include function-scripts. Mods used by other mods but not the player. Could also include assets that are maintained by scripts but have no game-impact of themselves.
4 - Master - Master mods that DO add content for player.
6 - Plugins - Content.
8 - Compatibility - Patches for comparability like making telvanni's mods work together
a - Overrides - Files that override all concerns except user's. omwllf is a good example.
c - User-Only - User's personal changes.
Used even numbers in case an override is necessary and odd numbers here flag the mod as an outlier.
c) There are near-infinite possible ways of ordering mods but within the above categories mods can be related usefully to one another with relatively little time investment. If we use base 36[0-z] and three characters then there are 46K+ codes that mod makers/users/curators can use to order their loading relative to one another.
An easier way to visualize base 36 counting:
----123456
1 - 012345
2 - 6789ab
3 - cdefgh
4 - ijklmn
5 - opqrst
6 - uvwxyz
As an example, a mod that has no inter dependencies would use the code "iii" since it's near the center of the options and leaves room for other mods to adjust themselves to it. ooo or taq would load after while azz or hbk would load before.
Or two mods that are interdependent might have codes cii and iii to make sure cii loads first while still leaving room between.
Obviously far more than two mods can relate to each other.
d) Author names help us keep records separate but they can become a burden. I recommend a self-restriction of 5 characters with underscores used for any white space. I use the handle kae so my abbreviation would be kae__ or __kae.
e) Since we now have MANY separate engines for very similar content it makes sense to distinguish between them in the filename. My proposal is that this be a 3-character label and precede the plugin extension as so:
________2.iii.kae__.iiiTrackTimeEasier.omw.esm
Obviously the omwaddon extension does not require this.
Next: MetaData management is a concept I'm beginning to engage with thanks to Linux and there are good uses for our plugins too.
The prime example is the readme.txt which SHOULD be included with every mod but faces quite a few drawbacks.
a) similar names can create conflicts without sub folders
b) subsections of readme files can be difficult to find/batch-process.
c) warnings in readmes can be easily overlooked/ignored. (watch out for counterproductive attention-grabbing-escalation here)
d) versions should NEVER be in plugin filenames because of frequent changes but must be readily-comparable
e) this method would be simpler to use with modern text-filter popups
My proposal is that instead we include separate files with a useful extension like mta:
________2.iii.kae__.iiiTrackTimeEasier.omw.esm.blurb.mta
________2.iii.kae__.iiiTrackTimeEasier.omw.esm.version.mta
________2.iii.kae__.iiiTrackTimeEasier.omw.esm.dump.mta
________2.iii.kae__.iiiTrackTimeEasier.omw.esm.credit.mta
________2.iii.kae__.iiiTrackTimeEasier.omw.esm.knownAlternates.mta
These are easily ordered and simple to batch process into/out-of folders.
It would also be useful to have a flag character for the tags to indicate automation-compatibility like 0 as such:
________2.iii.kae__.iiiTrackTimeEasier.omw.esm.0dump.mta
which I can use via the bash shell to update
________2.iii.kae__.iiiTrackTimeEasier.omw.esm.dump.mta
Probably be useful to make the first line of the file signify the kind of processing the file is geared for like #!/bin/bash or #JSON or <HTML> or whatever.
______________________________
So why am I telling you all of this? Networking, critique, debugging, please tear these up/improve the ideas. Obviously it's not going to be correct the first time but imagine how much time we could all save (both on and off the grid) by wielding some better curation methods.
I'm also aware that the devs here are very good and could point me to some productive literature on the subject or at least post the correct search terms.
Hopefully I can start ironing out my content for practical release within the next few months (and spend as little time maintaining it as possible. something all of us want).
Addendum 1:
Code: Select all
Using the plugin's file name to create an alpha-numeric load order might save everyone a lot of time. (Then I found out about LOOT, thanks bmw)
I always prefer using the file manager to curate things over external utilities that require maintenance and are less portable, so filenames are a natural choice to keep things ordered.