cjreek / eos-toolset Goto Github PK
View Code? Open in Web Editor NEWA toolset to create custom data for NWN:EE
License: MIT License
A toolset to create custom data for NWN:EE
License: MIT License
Having a way to autogenerate entries in iprp_feats.2da would be great; I might script this but easier if EOS did it.
The gist would be the standard CEP/PRC way where each feat.2da line + 100 goes into iprp_feats.2da
However a selective option would be nice per-feat (or a default on/off, and if default on it has a dropdown to default / enable / disable explicitly per entry) - the custom EOS field could even suggest which line ID it'd be.
The iprp_feat.2da lines would need to stay consistent since once they're item properties changing them later becomes a mess. 100 + feat.2da line is pretty standard so sensible to do it that way.
Wouldn't need custom iprp_feats.2da entries then at all either.
This might be caused by having multiple spells open and having some on the Visuals tab and some on Overview and "Sphere" sometimes got added where there should be no targeting data (ie there wasn't any before, single target spells).
If I find a consistent reproduction I'll add it here.
Some 2das get large, quickly, like feats and spells 2das
Having Extension Fields are great but having a way for it to dump them to a separate 2da on export would be amazing. A toggle per-2da under the Extension Fields tab would help me utilise it a fair bit more and not bloat certain 2da files with unnecessary data.
As an example if you edit Deekin Scalesinger's soundset (346) you get a missing 3 dots "..." (as one character) after "umm" on thee line Rest request:
Appears to strip it in TLK export since it is referencing a new line (for whatever reason) different line in this case.
I don't know exactly the TLK encoding format but probably needs a bit of tweaking to read/write these special characters throughout the program. Maybe check nim tools to see how that converts to/from CSV.
Duplicating a feat seems to duplicate it exactly - ie the IDs and UUIDs are the same, so it doesn't appear in the GUI. If you save the files, and try and reopen, it crashes on startup.
I duplicated in the Custom view a feat I'd already Overriden so should be easy to reproduce.
I've noticed that the visualeffects.2da column "SoundCessastion" is mispelled. The engine reads "SoundCessation" as per vfx_persistent.2da has. I can of course fix this manually before release and it only affected 3 VFX lines but I think worth fixing :)
These fields also don't work since instead the "cessation" animation of the current duration animation plays (except in the case of the ProgFX_Cessation apparently) so these can be culled from being generated saving some space in the 2da via. some kind of option perhaps.
Ces_Impact_Node
Ces_Root_S_Node
Ces_Root_M_Node
Ces_Root_L_Node
Ces_Root_H_Node
iprp_spells.2da is a huge 2da with 539 default entries, with 10 columns to boot, and you need to hand edit to add any new spells to be available on items.
It'd be amazing if the entries were made editable in an easier way like how spells are. Some additional features that could be added:
Button to generate a new line from a given selected spell:
It could even be done as a editor inside of each spell, but tbh that could get messy fast (several need multiple entries for different caster levels so it's 1:Many).
Allows simpler finding of raw ID fields, eg: 115 would be able to find Melf's Acid Arrow.
Helps when the names don't match constant names, or logs only have numbers.
Additionally it's very rare for number-only name fields so it's rarely going to get in the way.
TLK entries, when you add even one, reorders the lot.
This is usually ok, I mean who doesn't mind autogeneration? But it causes some issues:
In my opinion the "best" way would be to store the custom TLK line - if needed - that the entry used in that specific field and only generate new TLK lines for those that are new edits without a TLK line assigned. If this is just done sequentially, if entries are deleted it'd not reorder everything. You could just store in the project settings the "last TLK line assigned". Having a manual option to reset this back to base so it fills in "now blank lines" might be nice, if it had a way of knowing if a TLK line is already in use, but wouldn't be needed a lot of the time.
Clippy put some thoughts here: https://discord.com/channels/255017439371329537/1084979078064521297/1188776644723351582
Source Json:
classes.json
Eos:
It should be untouched (fighter class hasn't got many changes) as per the default 2da:
Item Properties "Table" data since they're not individual items don't show the 2da row IDs.
EG: what row ID is Bestow Curse for On Hit: Cast Spell:
There isn't any options to pad things for individual item property tables, so I'd need to have an idea about how many blank entries I am adding in relation to 2da row numbers to not clash with CEP or whatever else.
It's also a lot easier for creating custom constant IDs (see #25 )
Classes like Shou Disciple or feats like Blinding Spittle don't generate constants even if they are manually entered in name.
Not the biggest issue as it were but might be good to have.
When importing a custom classes.2da, the class is not being added to EOS.
Base items have their little icons show in the top tab bar which is pretty useful! (It'd be nice if the dark mode had them more visible when there is transparency, maybe an always-white background or something to make them pop like spells/feats do).
It'd be nice to have an option to have similar icons appear for all types of data so it's at-at-glance clear. Perhaps it would be two characters (FT for feat, SP for spell, SO for soundset or whatever) so it's clear which thing is which.
Like a browser, along with the X and the ctrl + w shortcut, a middle mouse to close tabs would be great.
example Custom Object;
{
"ID": "0cac1f69-ec35-4370-860c-e5df3ada9318",
"Name": "Overhaul Manual",
"Hint": "",
"Overrides": null,
"Items": [
{
"ID": "b9be061c-1f52-4a0e-b600-d0586318f5c2",
"Label": "Entry",
"Column": "Entry",
"DataType": "aaae9a67-5b8b-4085-81f6-125fc8cf89a7"
}
],
"ResourceName": "op_manual"
}
This is to just have a simple "Entry" field for a TLK string.
However the TLK string is single line and you cannot add return carriages to it.
Either a "TLK: Multiline" datatype, or a way for the UI to recognise enter and expand to a "full" box would be useful.
Minor issue but some floats in appearance.2da are being truncated/rounded.
eg: WING_TAIL_SCALE column, rows with values like 0.777 are being rounded to 0.78, or 0.632 to 0.63.
Values which are 1.0 (float) are also truncated to 1.
Mainly affects first exports to some kind of source control - not that it should matter a great deal - but comparison with base game files does become more difficult.
Not a major issue probably won't realistically affect a lot but might be an easy one to fix to keep accuracy with data imports.
Low priority this, but Several feats and classes generate clashing constant names (if they are not renamed manually in Eos).
I've included the constants that get generated for my project and the ones the nwscript.nss file has for reference.
I think this is all of them.
const int CLASS_TYPE_EYE_OF_GRUUMSH = 39;
const int CLASS_TYPE_SHOU_DISCIPLE = 40;
const int FEAT_BLINDING_SPITTLE_2_USESDAY_EYE_OF_GRUUMSH = 480;
-> FEAT_EYE_OF_GRUUMSH_BLINDING_SPITTLE
const int FEAT_BLINDING_SPITTLE_4_USESDAY_EYE_OF_GRUUMSH = 481;
-> FEAT_EYE_OF_GRUUMSH_BLINDING_SPITTLE_2
const int FEAT_BLINDSIGHT_10_FOOT_RADIUS_EYE_OF_GRUUMSH = 486;
-> FEAT_BLINDSIGHT_10_FEET
const int FEAT_BLINDSIGHT_5_FOOT_RADIUS = 485;
-> FEAT_BLINDSIGHT_5_FEET
const int FEAT_SWING_BLINDLY_EYE_OF_GRUUMSH = 483;
-> FEAT_EYE_OF_GRUUMSH_SWING_BLINDLY
const int FEAT_RITUAL_SCARRING_EYE_OF_GRUUMSH = 484;
-> FEAT_EYE_OF_GRUUMSH_RITUAL_SCARRING
const int FEAT_SIGHT_OF_GRUUMSH = 487;
-> FEAT_EYE_OF_GRUUMSH_SIGHT_OF_GRUUMSH
const int FEAT_COMMAND_THE_HORDE_EYE_OF_GRUUMSH = 482;
-> FEAT_EYE_OF_GRUUMSH_COMMAND_THE_HORDE
const int FEAT_DODGE_2_SHOU_DISCIPLE = 489;
-> FEAT_SHOU_DISCIPLE_DODGE_2
const int FEAT_DODGE_3_SHOU_DISCIPLE = 1031;
-> FEAT_SHOU_DISCIPLE_DODGE_3
const int FEAT_MARTIAL_FLURRY_ANY_SHOU_DISCIPLE = 899;
-> FEAT_SHOU_DISCIPLE_MARTIAL_FLURRY_ANY
const int FEAT_MARTIAL_FLURRY_LIGHT_SHOU_DISCIPLE = 866;
-> FEAT_SHOU_DISCIPLE_MARTIAL_FLURRY_LIGHT
const int FEAT_EPIC_HARPER_SCOUT_2 = 981;
-> FEAT_EPIC_HARPER_SCOUT
Interestingly some don't have constants (eg Master Crafter, Mercantile Background, Scrounger, Smooth Talk)
This is a low priority request just something that might be useful, to allow TLK entries to be edited outside of 2da rows.
Some parts of this could be:
Reasons for this:
Easier to edit these then in other 3rd party TLK editing tools.
I also have grand plans at some stage to have some method to convert conversation files from GFF to Json -> extract the text / dedupe it -> sort into a TLK file Json that Eos can read in. May make it easier for translations.
Using the "sorted" option for appearances seems to crash the toolset. Consistently reproduced with this json file.
Of course just one single entry doesn't crash, but more than one seems to crash (tried with just 2 entries).
The default autogenerated metadata for AOE effects is AOE_PER, meaning all your AOE effects are PER (persistent) defined in the constants file.
Not a big deal but probably best to just have the constant autogenerated entirely from the label, similar to how Bioware did it.
Item properties could be useful to have constants added for, mainly around spells but could be good for other systems too.
Example prefixes:
iprp_onhitspell.2da -> IP_CONST_ONHIT_CASTSPELL_
iprp_spells.2da -> IP_CONST_CASTSPELL_
iprp_quality.2da -> IP_CONST_QUALITY_
iprp_additional.2da -> IP_CONST_ADDITIONAL_
(noting iprp_material.2da doesn't have them generated for...no apparent reason)
Generating ones for custom iprp_ files would be nice too.
Repo file: soundsets.json
There are 2 soundsets in the list with the same "override" UUID; this is kind of intentional, one is an override (I just renamed it a little), one is based off it but with a different name and some different sound files to save me some time.
Not sure why the second (right click soundset: "Duplicate XXX" option) creates the UUID.
Setting the field to null
in the json for the duplicate fixes it.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.