Jump to content

Kyberus

Members
  • Posts

    12
  • Joined

  • Last visited

Reputation

12 Good

About Kyberus

  • Rank
    (1) Prestidigitator
    (1) Prestidigitator

Badges

  • Pillars of Eternity Backer Badge
  • Pillars of Eternity Kickstarter Badge

Recent Profile Visitors

526 profile views
  1. Add likely works, and will go to the normal "additive bonus" stage, meaning that it will happen after default multipliers, but before "PostAdd" multipliers. It doesn't seem like status effects can cause "PostAdd" multipliers, however, except lashes, etc. NB: adding a negative modifier as "addition" could possibly reduce the recovery time to 0 or less, which would simply remove recovery time (there is a case which causes recovery time <0 to become 0f, I believe).
  2. PPS: I am not sure what operator type "add" will end up doing. In some places it looks like the calculation for recovery time ignores the attached "operator type" field, but I am not sure it is universal.
  3. Very interesting. As verification, it is handled as a case in "AdjustRecoveryTime" for CharacterStats (in the dlls via IlSpy). Awkwardly, I can't find a check anywhere for if there character is wearing a shield. As such, this may apply even if using a shield but with one weapon. The weird appearance is probably due to the entry for "SingleWeaponRecoveryModifier" in the status effect manager having a display string and tactical string of -1. Which is fixable in statuseffects.gamedatabundle, thankfully. { "StatusEffectType": "SingleWeaponRecoveryMultiplier", "DataType": "4097", "OperatorType": "Add", ----> "DisplayString": -1, <---- "WildcardString": -1, "TacticalString": -1, "AttackFilterDisplayStyleID": "2187499c-ae27-41cd-a373-74cfe55fa59f", "AttackTargetFilterDisplayStyleID": "e3c2a249-5355-4d0f-a9e6-ff9441c76e0c" }, { "StatusEffectType": "DualWieldWeaponRecoveryMultiplier", "DataType": "4097", "OperatorType": "Multiply", "DisplayString": 4040, "WildcardString": -1, "TacticalString": 5233, "AttackFilterDisplayStyleID": "2187499c-ae27-41cd-a373-74cfe55fa59f", "AttackTargetFilterDisplayStyleID": "e3c2a249-5355-4d0f-a9e6-ff9441c76e0c" },
  4. Hi all, I had noticed that the stacking of "recovery time" modifiers seemed unusual. I think it is reasonably known that most positive "multiplicative" effects stack additively, as multipliers of some base value (usually). E.g. +21% damage from might and +60% from legendary -> 1.81X damage. Negative percentage modifiers usually do not work this way, ie: -30% recovery time from dual wielding and -15% from two weapon style does not equal 0.55X recovery time, it actually equals ~0.63X recovery time. I was having a difficult time figuring out how this is actually calculated, so I had a peak at the DLLs. As it turns out, looking through the "adjustedvalue" class in Ilspy, "multiplication" is done in 3 steps of a somewhat unusual operation (and 3 of addition). Multipliers from a given source are classified into one of these 3 steps, but from what I can tell, all "recovery time" multipliers go into the same step when calculating recovery time. Even "action speed" multipliers seem to be converted into the usual type ("multiplySteps", 2nd multiply step) of multiplier, rather than e.g. "m_multiplyBaseValueSteps" or "m_multiplyPostAddSteps". For each stage: All multipliers in a given stage are added together, as follows Multipliers >1 (ie: increases) are reduced by 1(IE: +30% (1.30) and +50% (1.50) -> 0.3 and 0.5) Multipliers < 1 (ie: reductions) are converted into 1 - 1/(multiplier), then added. e.g. 0.85 -> -0.176. These values are totaled for a given stage. When a given step is applied, this total is taken. If the total is >=0, then the final modifier is increased by 1. (ie: total of 1.3, 1.6, 1.2 -> 1+(0.3+0.6+0.2) -> 2.1) if the total is <=0, then the final modifier is 1/(1-x). (ie: total of 1.3,1.6, 0.5 and 0.5) -> 0.3+0.6+(1-1/0.5)+(1-1/0.5) -> -1.1; then 1/(1-(-1.1)) -> 0.476) This is then multiplied by the prior stage to reach the next stage. In terms of recovery time, This ends up being largely equivalent to additive "action speed" bonuses if recovery time is reduced. As increasing a divisor gives significantly diminishing returns, e.g. dual wielding is at its most beneficial when reducing recovery time penalties to ~ 0. Stages: value += m_addBaseValueBonus * HiddenMultiplier; value *= Math.StepsToMultiplier(m_multiplyBaseValueSteps); value += m_addPreMultiplyBonus * HiddenMultiplier; value *= Math.StepsToMultiplier(m_multiplySteps); value += m_additiveBonus * HiddenMultiplier; value *= Math.StepsToMultiplier(m_multiplyPostAddSteps); value += m_addPostMultiplyBonus * HiddenMultiplier; return value;
      • 1
      • Like
  5. These are two fairly minor mods. The first provides a small boost to single class barbarians, chanters, ciphers, fighters, paladins, rangers and rogues. They really don't seem to offer enough in return for going single class, particularly because they have only a small increase in resources for their class, as compared to getting an entire set of resources for a second class. I personally prefer the extra variety of multi-class characters, but the gap seems pretty excessive. So far as I could tell, the only reasonable way to add a bonus to single class characters was to add an ability with a conditional preventing it from being added to a character if they have any of the other classes. There does not seem to be a flag to check if a character is single class. This mod may run into compatibility issues with other mods that add to the ability stringtable and happen to use numbers from 10300-10400. https://www.nexusmods.com/pillarsofeternity2/mods/390/
      • 1
      • Like
  6. Hi, I was recently trying to edit the stringtables to add some basic class abilities, and realized that these seem to be indexed to the game by number (in the associated specific stringtable). As such, how is one intended to add new entries to the proper stringtable, in particular without accidentally generating possible collisions with other mods?
  7. So far as I am aware, this would require dll editing to do gracefully (which I don't think is possible currently). The stat -> effect correlations seem to be hard coded. I think the scaling with/without resolve relates to whether the applying attack is flagged as hostile (attacks apply status effects, even beneficial ones). Duration and duration type are finally set in the actual status effect, but the only option that affects attribute scaling turns them both off (durationtype -> UseDurationTimeUnadjusted ). So far as I am aware, this turns off both int and res scaling. One potential (quite complicated) alternative would be to assign a specific affliction type to all of the desired status effects, and turn off ability score scaling. One could then use an ability to apply a hidden status effect based on current resolve to desired characters, with the OutgoingAfflictionTypeDurationMult flag for that afflictiontype and the desired multiplier (e.g. 0.97 for characters with 11 resolve, etc). It would have the issue that if it is actually an affliction or inspiration, it would no longer counter / interact with other affliction / inspirations. Also you would need to force stacking for each ability, otherwise only 1 penalty would apply. This would require something along the lines of: A) creating an AfflictionTypeGameData item with a unique GUID to contain the "self hostile" status effects . B) assigned that AfflictionType GUID to all desired "self hostile" status effects C) add afflictioncomponent entries to all "self hostile" status effects, each with a unique GUID. Add those GUIDs to the list attached to the AfflictionTypeGameData item. D) set override StackingRuleOverride for all origin attacks to "Always" (otherwise all of these abilities could be used at once at no downside) E) create a series of status effects applying permanent OutgoingAfflictionTypeDurationMults for that afflication type, one for each resolve value, except 10 (ie: 11-> 0.97, etc). F) create a series of abilities applying those status effects, F.1 with a Boolean IsAttributeScoreValue(Guid, AttributeType, Operator, Int32, Boolean) conditional verifying that resolve = (value) in the ApplicationPrerequisites field (to turn it on) F.2 and a Boolean IsAttributeScoreValue(Guid, AttributeType, Operator, Int32, Boolean) conditional verifying that resolve is not equal to (value) in the DeactivationPrerequisites field (to turn it off) F.3 Set HideFromUI for all these abilities so they don't clutter the UI G) Add an entry for all these ability at level 0/1 to? everyone's progressiontable. I do not guarantee this would work, and it would require a fair bit of effort.
  8. Hello again, I hope my repeated self posting is of interest. I am describing what I have found in case it may prove of some small help to others in the future. If I had a better way of documenting it, I would. Also if anyone has any advice. Part 1: World Map Encounters After a bit of poking, I have made the embarassing discovery that some encounters have their creatures listed as part of the entry in worldmap.gamedatabundle. So far as I can tell, this is mostly for ships, and also for small encounters with a default encounter map. The data there is fairly self-explanatory. It also appears that most game areas have an entry on this table. Those entries do not have entries for creature spawns, but they do have an "expected character level" entry. As I have found no entry concerning intended area level elsewhere, it may also be that area entries for "expected character level" from this table are used to scale zones. Awkwardly, these entries rely on referencing character prefabs. Part 2: Architecture of Zone Files As to spawns in most other areas, I have seen the following re the architecture of the Scene / node components of a levelXY file, as attached to the tree of the fbx file. Most / all nodes have an associated GameObject with the same name, which appears to contain the actual associated game information. It may be that they are one and the same, effectively, but I am not certain as yet. Certainly, the tree structure for both so far appears to be an exact mirror. In order to see most of the monobehavior attributes, you need to "tools->Get Script Information". Unfortunately, I do not have the right dll. However, if you hit cancel repeatedly on the file selection box, it will give up fill in the data anyway. NB: All "GameObjects" are from examination of the associated "GameObject" entry of the levelxy file in UABE. All scene "nodes" are from examination of the scene in blender as exported by Unity Asset Studio. NB: All Monoscripts so far are pointers to namespaces/names in DLL files and pass an associated hash. I haven't found a way to interpret the hash. I assume to do that I would need to decompile the dll at a minimum. All MonoScripts are attached via a monobehavior containing a pointer to the creature gameobject and a pointer to the monoscript. I think this defines the actual behavior of the MonoBehavior. For creature editing, the most interesting bits are in the CRE_XXX part, below. On Order of entries: For entries in a vector or array, it is not clear if order actually matters, and sometimes it appears to change between different GameObjects of the same type. Architecture analysis: Root - "AR_XXX_NAME - Local Scene Objects" GameObject: Corresponds to a "AR_XXX_NAME - Local Scene Objects" which has an associated transform, and among that transform's children, a transform and pointer to "GameObject 01 Design" Subnodes- "00_Art" : contains anchorpoints for a variety of art objects. Some objects may correspond to assets in an uncertain manner. Also defines the plane of various floor levels, contains maps defining areas as water, light locations and light blocking surfaces, etcetera. "01_Design" : contains subnodes for "blockers", characters, containers, NPCS, encounters (containing enemies), etc. The data exported in a .fbx largely corresponds to a "02_Sound" - contains a series of physical locations with names corresponding to sound entries, possibly acting as their origin. "AR_XXX_NAME" - seems to correspond to the actual underlying mesh of the level, and a number of basic attachments to it "Main Camera" - almost certainly attached to whichever unity camera system is used by Deadfire. When exported as a .fbx file, it is just some empty nodes. Parallax Manager - Contains target for skybox, waterfalls, may be other things? Party Spawner - Appears to contain location nodes for the party to be directly spawn, e.g. not with a usual area transition. Getting off the elevator in Old Neketaka would appear to be the example here. 01_Design: GameObjects: Corresponds to a "GameObject 01_Design" Among its attributes, contains an mComponent vector containing 1 component pair entry of 1 transform (location) with an attached vector of children. mComponent (ultimate) contents: Transform and Pointer to "Design_Encounters" - Relevant case for today Transform and Pointer to a number of relevant scene components, a discussion for another day. Also some less relevant, unclear contents. Unsigned int m_Layer: usually 0 UInt16 mTag: Don't know what this does. May correspond to Unity-> Gameobject.tag, but that is usually a string. Bool m_IsActive: (unity has a standard "is active in hierarchy" tag, but syntax appears difft") mName: always "01_Design" for examples of this node. Subnodes: "Design_Encounters": This node has a number of children each corresponding to an encounter. Its transform appears to represent the origin from which those encounters are placed. Design_Encounters: Gameobject: LevelXYs contain a corresponding "Design_Encounters" or "GameObject Design_Encounters" File. Contents: m_Name: "Design_Encounters", identical to game Unsigned int m_Layer: usually 0 m_Component Vector containing a transformation, likely the same as the FBX data. Array containing child encounters, and their associated transformations. "Enc_XXX" : Each entry represents an encounter. The associated transform represents the location of that encounter relative to the Design_Encounter node. UInt16 mTag: Don't know what this does. May correspond to Unity-> Gameobject.tag, but that is usually a string. Bool m_IsActive: (unity has a standard "is active in hierarchy" tag, but syntax appears difft") Subnodes of Design_Encounters Enc_XXX (each Entry representing an encounter) Enc_XXX (Entry representing an encounter) GameObject: Corresponds to a "Enc_XXX" ie "GameObject Enc_XXX" in the same file. Contents m_Name: String corresponding to the encounter name, identical to the node in the FBX file Unsigned int m_Layer: usually 0 m_Component: Array containing Entry 0: a transformation to the encounter origin, identical to FBX data. Vector m_Children: child of that transformation containing a list of transformations pointing to the associated CRE_XXX gameobject for creatures in that encounter and its associated transformation (identical in FBX). Can also point to creature spawners and waypoints. m_Component: Array containing Entry 0: a transformation to the encounter origin, identical to FBX data. Vector m_Children: child of that transformation containing a list of transformations pointing to the associated CRE_XXX gameobject for creatures in that encounter and its associated transformation (identical in FBX). Can also point to creature spawners and waypoints. Entry 1: a monobehavior corresponding to the encounter, and tying it to a monoscript for "Game"->"Encounter" in Assembly-Csharp. Dll Notable attributes include EncounterTeam, ExpectedLevel, and LevelScaling type, DelayEndEventForCombat, CombatEndsWhenAllAreDead (can all be 0) EncounterData EncounterList - array with each entry: Pointing to a creature in the encounter Features for creatures which "spawn"(often empty for pre-placed creatures): Pointer to (self, animal companion) spawn point, spawnvfx, despawnvfx Features for creatures which "emerge(often empty for pre-placed creatures): Int EmergeWhen, EmergeIndex, pointer to emergepoint DifficultySettings AppearsInLevelOfDifficulty: Controls what difficulty levels spawn this creature Entry 2: a monobehavior corresponding to the encounter, and tying it to a monoscript for "Game"->"InstanceID" in Assembly-Csharp. Dll Attributes: UniqueID (A UUID), and int IsGuidConstant Entry 3: a monobehavior corresponding to the encounter, and tying it to a monoscript for "Game"->"Persistence" in Assembly-Csharp. Dll Notable attributes: points to an "Enc_Object.prefab" though this appears generic Attributes: exportpackage, restoresavedtransform, m_isNativeSceneObject Entry 4: a monobehavior corresponding to the encounter, and tying it to a monoscript for "Game"->"ConditionalToggle" in Assembly-Csharp. Dll Attributes: m_persistentConditionalToggle, CheckOnce, ActivateOnlyThroughScript, ConditionalScript Scripts Entry 5(Not Universal): a monobehavior corresponding to the encounter, and tying it to a monoscript for "Game"->"ScriptEvent" in Assembly-Csharp. Dll Notable Attributes: ActionScript Scripts -> Contains a vector apparently able to use ActionScript entries to do something. Notably it can set global variables, for example. UInt16 mTag: Don't know what this does Bool m_IsActive: So far all true Subnodes of each Enc_XXX "CRE_XXX": Each entry represents a unique creature in that encounter. The associated transform represents the location of that creature from its parent encounter. CRE_XXX GameObject: Corresponds to a "GameObject CRE_XX" object in the same file. Contents: mComponent Array: This array seems to contain pointers to gameobjects and monobehaviors with most of the major attributes of a creature. See below. mLayer: Corresponds to layer in Unity. All "10" so far nName: String corresponding to the creature name (CRE_XX) identical to the FBX node. mIsActive: see above Subnodes: None NB: All Monoscripts so far are pointers to namespaces/names in DLL files and pass an associated hash. I haven't found a way to interpret the hash. I assume I will need to decompile the dll. All MonoScripts are attached via a monobehavior containing a pointer to the creature gameobject and a pointer to the monoscrip, and a (usually empty) name. mComponent Array Contents: 0 - usually a pointer (same file) to a transform corresponding to the creature location relative to the Enc_XXX location. 1 - pointer (same file) to a unique GameObject "AnimatorBase" associated with the creature. Monobehavior: Attributes: int m_Enabled, Pptr (Avatar) m_Avatar (?shared avatar in shared assets), pptr RunTimeAnimationController m_Controller(?shared controller in shared assets, int m_CullingMode, int m_updatemode, boolm_ApplyLinearVelocityBinding, bool m_hasTransformHierarchy, bool m_AllowConstantClipSampling 2 - pointer (same file) to a unique Object "RigidBody" associated with the creature. (Unity class containing physics simulation for the creature) Monobehavior: Attributes: float m_Mass, float m_Drag, float m_AngularDrag, float m_useGravity, float m_isKinematic, float m_Interpolate, float m_constraints, float m_CollisionDetection 3 - point (same file) to a unique GameObject "BoxCollider" corresponding to the creature, (Unity class for a box shaped collisionzone) Monobehavior: Attributes - PhysicsMaterial m_Material, bool m_IsTrigger, bool m_Enabled, Vector3f m_size, Vector3f m_center 4 - pointer (same file) to a unique Monobehavior attached to a (different file) "Faction" MonoScrip. This MonoScript is shared between some creatures of the same type. Monobehavior: Notable attributes: TeamGameDataReferenceBaseTeam -> Contains a UUID pointing to the associated faction in Factions.GameDataBundle Other attributes: Int (DrawSelectionCircle, DrawConversationCircle, HideSelectionCircleOutsideofCombat, ShowToolTips); Float (Tooltipheight, speakFOWradius, HideUIinfo) 5 - pointer (same file) to a unique Monobehavior attached to a (different file) "Health" MonoScript. This MonoScript is shared between some creatures of the same type. Monobehavior: Notable Attributes: PersistentData m_persistentHealth -> can contain an int ShouldDecay, or ? Int CanRegenerateHealth Float HitReactInterval Int m_canBeTargeted Int NeverGib Int AlwaysGib ******************* Interesting ******************** 6 - pointer (same file) to a unique Monobehavior attached to a (different file) "CharacterStats" MonoScript. This MonoScript is shared between some creatures of the same type. Monobehavior: Notable Attributes: CharacterStatsGameDataReference CharacterStatsData: Contains a UUID pointing to the creature entry in characters.gamedatabundle Int OverrideStartingLevel -> usually 0 (?disabled) if active, DatabaseString OverrideDisplayName -> contains a stringtable reference that can replace the display name OtherAttributes: Int Overridestartinggender, int overridestartingrace, int overridestardingsubrace, overridestartingspeaker, 7 - pointer (same file) to a unique Monobehavior attached to a (different file) "Equipment" MonoScript. This MonoScript is shared between some creatures of the same type. Monobehavior: Notable Attributes: EquipmentSetDataReference BaseEquipment: UUID Pointing to ?; so far all 0s. EquipmentSetReferences StartingItems: Contains a list of equipmentsetreference UUIDs for each slot. so far 0s. Also Ints flagging slots to not be droppable on death. ** I believe this has been superseded entirely by the Equipment components of characters.gamedatabundle 8 - pointer (same file) to a unique Monobehavior attached to a (different file) "Inventory" MonoScript. This MonoScript is shared between some creatures of the same type. Monobehavior: Notable Attributes: PersistentData m_persistentBaseInventory - contains a set of values for max item storage. Can be infinite or ??negative infinity Other attributes: InspectorItem StartingItems; int OverrideRedirectToPlayer 9 - pointer (same file) to a unique Monobehavior attached to a (different file) "Loot" MonoScript. This MonoScript is shared between some creatures of the same type. Monobehavior: Notable Attributes: LootListGameDataReference LootLists - contains an array of UUIDs, pointing to entries in items.gamedatabundle (usually the lootlist for the creature) Int dropEquipment - seems to determine if any equipment drops at all, maybe? Other Attributes: Int usebodyaslootbag, Int fadebodyforlootbags - replace your corpse with a handy haversack. Pptr lootbagoverride (so far empty) 10 - pointer (same file) to a unique Monobehavior attached to a (different file) "Persistence" MonoScript. This MonoScript is shared between some creatures of the same type. Monobehavior: Notable Attributes: String Prefab: attaches to the location of the creature prefab. I don't know what information comes this way, as much of the prefab is now linked to gamedatabundles, which are also linked here. Attributes: int ExportPackage, Int RestoreSavedTransform, Int m_isNativeSceneObject, 11 - pointer (same file) to a unique Monobehavior attached to a (different file) "InstanceID" MonoScript. This MonoScript is shared between some creatures of the same type. Monobehavior: Notable Attributes: PersistentData m_persistentInstanceID -> contains a UUID string UniqueIDString which may be this creatures specific identifier String UniqueID: Contains exactly the same UUID string as the above. Don't know why. Int IsGuidConstant: Can be 0. ?? 12 - pointer (same file) to a unique Monobehavior attached to a (different file) "InstanceID" MonoScript. This MonoScript is shared between some creatures of the same type. Monobehavior: Attributes: RandomUpdateTime, CutsceneSpeed, DisableAnimationCulling, RacialBodyTypeOverride, GenderOverride 13 - pointer (same file) to a unique Monobehavior attached to a (different file) "Mover" MonoScript. This MonoScript is shared between some creatures of the same type. Monobehavior: Notable Attributes MoverGameDataReference MoverData: Contains a UUID pointing to a MoverGameData in characters.gamedatabundle Int m_overrideRadius, m_radius: flag and value to allow changing the ?Mover radius of the creature. ?? 14 - pointer (same file) to a unique Monobehavior attached to a (different file) "AnimationBoneMapper" MonoScript. This MonoScript is shared between some creatures of the same type. Monobehavior: Notable Attributes: BoneMapperGameDataReference m_boneMapperData: contains a UUID pointing to a BoneMapperGameData in characters.gamedatabundle. Often the shared "human" entry. 15 - pointer (same file) to a unique Monobehavior attached to a (different file) "Audioemitter" MonoScript. This MonoScript is shared between some creatures of the same type. Monobehavior: Attributes: isEnvironmentAware, listenerMask, isStaticObject, isOcclusionEnabled, isPartialOcclusionEnabled, isPanningEnabled 16 - pointer (same file) to a unique Monobehavior attached to a (different file) "AudioSoundBank" MonoScript. This MonoScript is shared between some creatures of the same type. Monobehavior: String bankname Attributes: vector bankguid - at least in one case full of int = 0; loadAsynchronous 17 - pointer (same file) to a unique Monobehavior attached to a (different file) "AnimationAudioPlayer" MonoScript. This MonoScript is shared between some creatures of the same type. Monobehavior - an empty name entry 18 - pointer (same file) to a unique Monobehavior attached to a (different file) "StatusEffectManager" MonoScript. This MonoScript is shared between some creatures of the same type. Monobehavior - an empty name entry, 19 - pointer (same file) to a unique Monobehavior attached to a (different file) "AbilityList" MonoScript. This MonoScript is shared between some creatures of the same type. Monobehavior: GenericGameDataReference PermanentAbilities - contains an array, which has been empty in all cases so far. 20 - pointer (same file) to a unique Monobehavior attached to a (different file) "AIController" MonoScript. Monobehavior Notable Attributes; AIDecisionTreeReference m_decisionTreeReference -> contains a UUID pointing to an Onyx.AIDecisionTreeData in aidecisiontrees.aidecisiontreebundle (an exported file) Other Attributes: ScheduleGameDataReference ScheduleReference (Contains a UUID); ScheduleInteractionObjectSet ScheduleInteractionObjects (Contains an array of timesliceinteractionobjects); pptr FollowObject; int WeaponPreference, int Scriptedbehavior, pptr scripteduseobject; float m_shout_range; int m_detectsStealthedCharactersSetting; Int m_isGuard; int CombatEndsOnDeath; Int Tethered; Float TetherDistance; Int OverrideSummonBehavior; Int HideOffScreenMeshes; PersistentData m_persistantAIController 21 - pointer (same file) to a unique Monobehavior attached to a (different file) "GenericAppearance" MonoScript. This MonoScript is shared between some creatures of the same type. Monobehavior: Notable Attributes: PPtr <$CharacterModelVisualData> ModelVisualData: Contains a pointer to a ModelVisualData Entry in a shared asset file This is a larger entry, but contains entries determining the model, LowPoly Model, Female override, submesh settings. It ? points at prefabs Float scalemultiplier - controls this specific creatures scale Other attributes: Int UpdateMeshWhenOffscreen, Int UseHDTextures, Int RegenerateApperance 22 - pointer (same file) to a unique Monobehavior attached to a (different file) "AlphaControl" MonoScript. This MonoScript is shared between some creatures of the same type. Monobehavior Attributes: float Alpha, float MaxAlpha, Int AlwaysRefresh, Int ForceIgnoreAlphaControl 23 - pointer (same file) to a unique Monobehavior attached to a (different file) "OVS" MonoScript. This MonoScript is shared between some creatures of the same type. Monobehavior NotableAttributes: OVSGameDataReference OVSData: Contains a UUID pointing to a OVSGameData in characters.gamedatabundle, assigning a variety of visual effects. VisualStateGameDataReference InitialState: Contains a UUID selecting a substate among the components of the OVSGameData entry; the UUIDs are shared between some components for different OVSGameData entries. (ie: both a wraith and another creature might have a substate with the same UUID)
  9. Well, small update incase anyone else decides to take a crack at this problem. For world map encounters, level and NPC type can be edited by editing encounter entries of the worldmap. I think this largely covers encounters with a default small map to which a set number of enemies are loaded. I haven't tried it, though, but it seems simple enough. For set encounters: As noted elsewhere, the levelxy files contain most areas. They do not correspond to area numbers, e.g. AR_0610_slums is not in level610, it is in level38. Some of them appear to be menus and things. It seems like it might be possible to modify creature spawn locations by use of Asset Studio to export the scene hierarchy for an area. This will export the locations of encounters (and creatures) as part of the scene as a .fbx file, which can be imported e.g. into blender. This allows you to see, and modify the location of various creatures an spawns. How one might alter which creature is which, I have no idea as yet. My attempts to decipher the monobehaviors associated with the levelxy files have not, as yet, been successful. I suspect they somehow attribute creatures to these locations. I am also not entirely sure how to cram the .fbx scenes back into the levelxy files.
  10. Many apologies, but I have just been playing through the game a second time. I have noticed that after the early game, even with level scaling, difficulty does tend to.... taper off a bit, even on POTD. In particular there seem to be a number of encounters that are unexpectedly easy, in particular when a large number of lower level enemies were used to try to buff difficulty. This has got me thinking, as a person who DMs occasionally for pen and paper games, whether it would be worthwhile to tune up those encounters in particular (rather than say increasing the strength of all enemies e.g. via the difficult table, which would be perhaps excessive at low levels, or increasing the strength of enemies used in multiple contexts). I recall a number of mods for e.g. Baldur's Gate 2 that did this, quite fondly. Sword Coast Tactics and some other thing that I can't recall. As such, is there any way to edit the location and number of enemies on various maps, or swap out the level or type of individual enemies? Heck, if I could even find the area-specific intended levels (to force scaling for specific areas), I suppose that might be helpful? PS: I realize I could turn on more God Challenges or what not, but I just feel a number of these encounters need.... tuning up. PPS: is anyone noticing that Unbending Trunk seems to heal much more than 33% of all damage taken? This may be contributing. My, and my enemies, health still seem to actually increase from using it. PPS: There also seems to be insufficient scaling (and baseline growth) of human enemies in particular. They peak at Gorechi street and sortoff.... go downhill from there.
  11. I strongly agree with sentiments expressed by demeisin. As to being able to write books or move pages from one book to another somehow being unrealistic... these grimoires came from somewhere. Someone writes the damn things (Admittedly someone you may have killed). They already established that. The whole world suddenly developing the inability to write is at least a tiny bit bizarre. I would also argue the effect is most crippling for the enjoyment of druids and priests: many of their spells were relatively conditional. Those spells now will not see use, which substantially limits the variety of play. Not so much power, per sei, but certainly variety.
  12. During multiple battles, I have noticed that Wall of Draining will hit targets that are neither inside nor near (ie: half a screen away, perpendicular to the wall) from the wall. If necessary, I can try to replicate, but it is not possible to save in combat, making providing a saved game difficult. The wall also procs extremely rapidly (four+ times a second) meaning that any buffs on targets "within" the wall are removed fairly instantaneously. The combination is a bit absurd.
×
×
  • Create New...