Jump to content


  • Posts

  • Joined

  • Last visited

  • Days Won


Everything posted by BMac

  1. I looked at the code, and that comment definitely doesn't have enough detail to explain the behavior, which is, to be honest, bizarre. Typically in Boolean algebra, R1 and R2 or R3 would be evaluated like (R1 and R2) or R3, but that's not the case here. The conditionals are evaluated in order. If any AND conditional is false, the whole condition fails. If any OR conditional is true, the whole condition passes. In either case, evaluation will short-circuit (not evaluating any more conditionals). If neither of those things occur, the result is based on the operator of the last conditional. If it's AND, the result is RN (the result of the last conditional) If it's OR, the result is RN OR RN-1 I'm not sure why it says "right-to-left". As far as I can tell, the evaluation order is left-to-right (top-to-bottom in JSON).
  2. @Phipanjo If I replace '2c8238c9-7a86-4394-b5e6-45c6a1d0bf10' with the object GUID used in the example in the original post, I see your item in that store (Marihi's Metalworks). I don't know what your GUID is since I don't have the tools to search it up right now, but make sure it's an object GUID for a container or inventory in the store scene that's actually tied to that store. Also make sure your mod actually shows up in the Mod Manager, if not your folder structure may be the problem.
  3. Your last sentence is correct. If you put any object in a bundle file in your mod folder, it throws out any already-existing object with that "ID" and replaces it with what you have in your file. Putting only the new entries you want to add in your override loot list will actually replace the entire loot list with only those. You'd have to copy over the existing data and then add or remove from that. That's part of why ModScriptHookGameData is useful; it lets you make changes to store loot without copying and overriding entire loot lists.
  4. It just needs to be anywhere game data can be loaded from (e.g. anywhere in a mod folder). If the game data object is loaded, it will be run when appropriate.
  5. Unfortunately moving or removing existing abilities from the progression table will probably require overriding the entire table. Certainly doable, but might have compatibility problems with other mods that use that table. You would copy the entire progression table object PT_Wizard into your mod bundle and add Conditional checks to the spells and passives your new subclass should not be allowed. This is how the normal wizard subclasses are done and you should be able to find samples using the IsSubclass script. To move abilities to new power levels, I would guess you would have to duplicate the table entry for that ability and change it, conditionalizing the new entry for your subclass and the old one for the inverse ("Not" your subclass) and using the VisibilityConditional instead of the normal one to entirely hide the duplicates rather than disabling them.
  6. I replied to a PM about this - here is my reply: I dug a little more and I believe you could induce the NPCs to use unpackage textures from the data folder, but you would still need to modify the Unity data to specify the texture paths. This data probably lives in the individual level bundles the NPC appears in, and the property is called 'm_textureLargePath'.
  7. If you file a support ticket with your save file, our support team may be able to fix it, depending on what has happened (you can find the link in my previous post).
  8. @Bolzano Hi! I haven't actually logged in to the forums for a while (I blame 2FA), so I missed your notification. Sorry! Your demo looks cool! You don't necessarily have to make mods specifically to break into the industry - you just need to make something. I think modding is often recommended, especially for designers, because it lets you demonstrate your work without needing to make an entire game yourself. For us programmers, though, we can make our own little projects from scratch more easily to demonstrate our skills (like your raytracing demo). I think if you can make a couple more projects like that, you'd have a shot at finding a junior graphics programmer role somewhere - particularly if you can do something in the engine the company you're applying for uses (Unreal 4, for us). Raytracing is kind of a hot up-and-coming technology in the industry, so familiarity with that is good, but I'd also do some things with more traditional rendering pipelines, since the hardware to run it is still pretty early and a lot of companies (like us) aren't quite on board with it yet. tl;dr: It doesn't matter what you make, just make something to demonstrate that you know your stuff and, if possible, you know the tools your target company is using. I hope that helps. Let me know if you have any other questions.
  9. @mangothehuman Sorry for the delayed response - I haven't looked in on Deadfire stuff in a while. Which DLC are listed as missing if you hover the disabled Load button? If they are DLC you don't recognize, send a support ticket with your save and we can take a look. Otherwise, make sure all the DLC listed are installed.
  10. @Jawgo I'm a bit late here, but better late than never? I'm getting a bit rusty on Deadfire stuff, but unfortunately I think the racial weapon scales will not be easy to mod. I believe they come from a scale on the bone the weapons are attached to, which is deep in Unity data. I can't think of any ways around that at the moment. If someone is ambitious enough to dig for that data, there are several bones weapons can attach to that need to be adjusted - one on each handle, the back scabbard, and two hip scabbards.
  11. That is an intentional change. Great question - that feedback was very common and we definitely agreed with it. In this patch, Dexterity now grants a bonus to Stride in turn-based mode in addition to its other bonuses. Stride is a very useful stat in TBM, so this should make Dexterity more attractive once again. I have no idea how this missed the patch notes; I'll see what's up there. Yes, now that TBM is out of beta we won't be making any more content or balance changes. The pen-and-paper game is entirely separate from the video game; they don't share any systems.
  12. This is a list of changes from v4.1.0.0011 to v5.0.0.0040 that specifically affect modding the game. The patch notes for other changes to the game can be found here. Check the documentation for more details on the functionality of added data properties. Modding Patch Notes for v5.0.0.0040 Looping AttackBaseVisualEffects are now supported for all events rather than just AnimEvents. The effects are stopped on Impact. Added ExperienceTableComponent.TrapLockXPIncrements Added HostilityType.HostileEver Added TacticalModeSettingsComponent Added CombatSettingsComponent.MinimumRollToGrazeTactical, MinimumRollToHitTactical, MinimumRollToCritTactical Added AttributeComponent.TacticalOverrideBonusesFormatString Added CharacterStatsSettingsComponent.AttributeTacticalStrideMultiplier Added DamageData.TacticalMinimumOverride / TacticalMaximumOverride Added GenericAbilityComponent.ShowStatusEffects Added StatusEffectDurationType.UseDuratonUnadjusted Added GenericAbilityComponent.RandomizeStatusEffect Added AIBehaviorDataComponent.CanEngage Added AICombatMoveComponent.AbortIfImmobile Added AIMoveComponent.AbortIfImmobile (Community Request) Added IsAnyWeaponEquipped conditional (Community Request) Added IsAnyWeaponEquippedInSecondarySlot conditional Fixed a problem where oei_this was not properly initialized when checking soulbound advancement conditionals. (Community Report) Fixed a problem where ModScriptHooks sometimes did not work correctly when loading very old savegames Fixed a problem where scripts or conditionals that were called recursively would not receive correct values for special GUIDs Thanks for working with us to make this game even cooler and more fun! I'm looking forward to seeing where you take it in the future.
  13. Unfortunately that ability is using some special code and it doesn't look like there is a way to override the strings from game data. You're right that this string is not very helpful - I will put in a report. You could potentially add a new status effect to the abilities that has no effect but just has an override string clarifying the effects. It would have to be in addition to the existing strings, though.
  14. I believe the world map merchants all share a single store object which exists on the FreeWorldMap scene: Store_RE_Generic_Merchant (e5ba7105-c251-4191-bc2b-9a7d7f8a3c32). You should be able to use a script hook to modify that inventory like any other. Generally the world map functions like any other scene and the objects in it like those in other scenes, though there are certain aspects that work differently as house2fly observed.
  15. There is some structural information about NPC schedules in ScheduleGameData objects, but unfortunately the details of what a particular NPC does during each time slice are defined on the Unity data for that character and are hard to modify.
  16. Most of that is defining what the Game Data object is and what components it has one it, as covered by the Basic Concepts tutorial. The last three lines are specific data for the ModScriptHookComponent and are documented in the documentation here.
  17. Thanks for the report! This issue will be fixed in v4.1.2.
  18. Yes, you can create new spells and add them to progression tables this way. You'll just need to create a new GenericAbilityGameData object with a new GUID in addition to making the object described here. I don't believe we have a tutorial specifically about creating spells, but the basic concepts tutorial and this tutorial may help.
  19. The hooks will not continue to run after they have run or succeeded if they have RunOnlyOnce or SucceedOnlyOnce respectively. Of course, SucceedOnlyOnce hooks will be running on each scene transition until they succeed, which could potentially lead to slightly longer load times. I would expect it to be pretty minimal, though (an IsInActiveScene call takes about 0.2-0.3 milliseconds on my machine). Also, I don't know exactly how you're using the GlobalScripts, but to clarify, they won't call themselves. They're intended to be re-usable or organized blocks of scripts you can call from different places; you do still need to call them from, for example, a ModScriptHook.
  20. That's good. I believe I know what the issue is now - I'll test it with your save and have it fixed for 5.0.0.
  21. I think I know what's up there. You can probably fix it by adding "OverrideDescriptionStringTactical": -1 to your status effects. Unfortunately it sounds like that's defaulting to 0 when omitted, which indicates string ID 0, whereas -1 indicates "don't use this". I'll see if I can do something about that on my end for 4.1.1.
  22. Unfortunately, yes, that's correct. Yes, you just need to duplicate the object in the AbilityUnlocks array. This example redundantly adds the same ability twice, just to show the syntax: { "GameDataObjects": [ { "$type": "Game.GameData.BaseProgressionTableAppendGameData, Assembly-CSharp", "DebugName": "Priest_FastRunner", "ID": "5ec6e46a-4e3f-4f78-affe-0d7477d3b97f", "Components": [ { "$type": "Game.GameData.BaseProgressionTableAppendComponent, Assembly-CSharp", "BaseTableID": "a52e8b61-9343-4716-8a55-3168be143cc4", "AbilityUnlocks": [ { "Note": "", "Category": "General", "UnlockStyle": "Unlock", "ActivationObject": "Self", "AddAbilityID": "935b1a37-6f38-4ccc-bbc7-296f0f76790f", "RemoveAbilityID": "00000000-0000-0000-0000-000000000000", "Prerequisites": { "MinimumCharacterLevel": 1, "PowerLevelRequirement": { "ClassID": "f7cb46af-a719-41c0-9a53-107eefdbce2b", "MinimumPowerLevel": 1 }, "RequiresAbilityID": "00000000-0000-0000-0000-000000000000", "Conditional": { "Operator": 0, "Components": [] }, "VisibilityConditional": { "Operator": 0, "Components": [] }, "IsMutuallyExclusiveUpgrade": "true" } }, { "Note": "", "Category": "General", "UnlockStyle": "Unlock", "ActivationObject": "Self", "AddAbilityID": "935b1a37-6f38-4ccc-bbc7-296f0f76790f", "RemoveAbilityID": "00000000-0000-0000-0000-000000000000", "Prerequisites": { "MinimumCharacterLevel": 1, "PowerLevelRequirement": { "ClassID": "f7cb46af-a719-41c0-9a53-107eefdbce2b", "MinimumPowerLevel": 1 }, "RequiresAbilityID": "00000000-0000-0000-0000-000000000000", "Conditional": { "Operator": 0, "Components": [] }, "VisibilityConditional": { "Operator": 0, "Components": [] }, "IsMutuallyExclusiveUpgrade": "true" } } ] } ] } ] }
  • Create New...