Difference between revisions of "User:DavidJCobb"
Jump to navigation
Jump to search
imported>DavidJCobb m (→Scratchpad) |
imported>DavidJCobb m (→Scratchpad: AI) |
||
Line 16: | Line 16: | ||
== Scratchpad == | == Scratchpad == | ||
* '''Applying AI packages to an NPC''' | |||
** You generally don't apply a single package to NPC, but rather a list. For example, each meal that the NPC eats would be powered by separate packages. | |||
** [[User:DavidJCobb/Default AI packages|List of default AI packages (WIP)]] | |||
* '''Creation Kit bugs''' | * '''Creation Kit bugs''' | ||
** Embedded render windows (that is, those found inside dialog boxes) will steal focus onmouseover. | ** Embedded render windows (that is, those found inside dialog boxes) will steal focus onmouseover. |
Revision as of 21:44, 31 May 2015
Subpages
- Methodologies
- Miscellaneous tips
- Stack dumping, an overview that everyone should read
- Rotation library
- A library for working with rotations in Skyrim. If you need to position and rotate one object relative to another, this'd be the code to do that.
Current projects
- Atronach Crossing
- A home decoration mod with a dual focus on customization and usability. Currently in early development. Already features many "firsts" in Skyrim, such as bookshelves that can be moved around at run-time.
- At version 0 iteration 66 as of February 20th. A demo video of v0i66 can be seen here.
Scratchpad
- Applying AI packages to an NPC
- You generally don't apply a single package to NPC, but rather a list. For example, each meal that the NPC eats would be powered by separate packages.
- List of default AI packages (WIP)
- Creation Kit bugs
- Embedded render windows (that is, those found inside dialog boxes) will steal focus onmouseover.
- The Creation Kit is somewhat crash-prone when trying to select navmesh edges while cover is being drawn, or recently after Find Cover Edges has been used.
- Edge selection is generally broken when working with navmesh cover anyway.
- When editing a terrain heightmap, the Flatten Vertices tool may decide, for no readily apparent reason, to behave as though your brush size were five times larger than it was actually set to.
- Combining multiple vanilla statics into a single NIF
- Programs needed:
- NifSkope
- NifUtilsSuite
- Make sure this is configured properly. It needs to know where NifSkope's nif.xml is, and it needs to be able to access that file.
- Create NifUtilsSuite template file.
- Pick the vanilla static whose collision is most representative of the combined static you're building. If you're adding stuff onto a building, pick the building.
- Extract its NIF and open it in NifSkope. Delete every block that isn't the root block, a BSXFlags, or a bhkCollisionObject.
- Save this stripped-down NIF.
- Create the merged static, minus collision.
- You can copy and paste NiTriShapes from NIF to NIF. Paste all of your statics' NiTriShapes into a single file (under the root node).
- You can reposition a NiTriShape by selecting it in the sidebar, and then editing its Translation and Rotation in the bottom pane.
- You can rename a NiTriShape (to keep track of them easier) by selecting it in the sidebar, and then double-clicking the "Txt" icon shown next to the name in the bottom pane.
- Be sure to delete all collision-related information (which should pretty much just be any bhkCollisionObject blocks).
- Create the merged collision mesh.
- Use NifUtilsSuite's ChunkExtract to rip each individual static's collision mesh as a NIF. Make sure that ChunkExtract sets NiTriShape names from the collision material.
- NiTriShape Name: From material
- Use NifSkope to combine the individual collision meshes into a single mesh, similarly to how you combined statics earlier. Do not rename any NiTriShapes.
- Use NifUtilsSuite's ChunkExtract to rip each individual static's collision mesh as a NIF. Make sure that ChunkExtract sets NiTriShape names from the collision material.
- Apply the merged collision mesh to the merged static using NifUtilsSuite's ChunkMerge.
- Use the template file you created earlier.
- Be aware that this will overwrite the input file. You should probably create a backup of your merged static.
- Use "mesh data" as the Collision Source, and "name of NiTriShape" as the Collision Material.
- Programs needed:
- Common pitfalls when creating combined statics
- It seems that NifSkope doesn't always use the right Euler conventions for Skyrim. As such, rotation values won't work quite the same way as they do in the Creation Kit.
- NifUtilsSuite needs to be able to access NifSkope's nif.xml. If that file is in an administrator-only location (e.g. Program Files), you will need to run NifUtilsSuite as an administrator.
- NifUtilsSuite will crash if you accidentally tell it to read from a non-existent file, so maybe don't do that. Check your pathnames.
Code snippets
Quality? Functionality? Efficiency? Here, I guarantee nothing!!
Is an ObjectReference an item?
Works as well as is possible given the methods available to us.
Bool Function IsItem(ObjectReference akObject) Form akForm = akObject.GetBaseObject() If !akForm return false EndIf If akForm as Book ; ; SKSE grants read access to the Playable flag for books. ; return (akForm as Book).IsTakeable() EndIf If (akForm as Ammo) || (akForm as Armor) || (akForm as Ingredient) || (akForm as Key) || (akForm as MiscObject) || (akForm as Potion) || (akForm as Scroll) || (akForm as SoulGem) || (akForm as Weapon) ; ; Other object types don't have a script-accessible player flag. Sux. ; return true EndIf return false EndFunction