Jump to content

Gairnulf

Members
  • Posts

    1067
  • Joined

  • Last visited

  • Days Won

    1

Everything posted by Gairnulf

  1. The way I'm doing it currently is by adding root-level objects according to their $type value. I chose to do it this way because I didn't have perfect information on the objects' structure, and if some $types wouldn't require me to add a lot of extra form controls because of extra components they may contain. Also this way I have the most control over what shows in the list and what will not be included in the query as unimportant to modders. I imagine that in a perfect setup the editor users will only see the stuff in the lists and in the detail views which they "need in the majority of situations". So as a result, I am currently using a function that's like this: determineGameDataQueryOptions(dbName: string): string[] { switch (dbName) { case 'characters': return [this.gameDataObjectTypes.CHARACTERSTATS]; case 'progressiontables': return [this.gameDataObjectTypes.PROGRESSIONTABLE]; case 'abilities': return [this.gameDataObjectTypes.ABILITY, this.gameDataObjectTypes.SPECIALABILITY]; case 'attacks': return [ this.gameDataObjectTypes.RECOVERYTIME, this.gameDataObjectTypes.ATTACK_AOE, this.gameDataObjectTypes.ATTACK_AURA, this.gameDataObjectTypes.ATTACK_BEAM, this.gameDataObjectTypes.ATTACK_FIREARM, this.gameDataObjectTypes.ATTACK_GRAPPLE, this.gameDataObjectTypes.ATTACK_MELEE, this.gameDataObjectTypes.ATTACK_PULSEDAOE, this.gameDataObjectTypes.ATTACK_RANDOMAOE, this.gameDataObjectTypes.ATTACK_RANGED, this.gameDataObjectTypes.ATTACK_SUMMON, this.gameDataObjectTypes.ATTACK_SUMMONRANDOM, this.gameDataObjectTypes.ATTACK_TELEPORT, this.gameDataObjectTypes.ATTACK_BEAMTELEPORT, this.gameDataObjectTypes.ATTACK_TELEPORT, this.gameDataObjectTypes.ATTACK_HAZARD, this.gameDataObjectTypes.ATTACK_MASTERSCALL, this.gameDataObjectTypes.ATTACK_WALL ]; case 'statuseffects': return [this.gameDataObjectTypes.STATUSEFFECT, this.gameDataObjectTypes.AFFLICTION]; } } It's tempting to just filter them by their first component's type as you suggest, but my concern is that if I just include every object that has a Game.GameData.GenericAbilityComponent, I may offer objects in the editor for which I don't yet have all the appropriate form controls, and this may confuse users. I've looked over part of the objects in abilities.gamedatabundle and some seem to have modding-relevant data in their components after the GenericAbilityComponent. The short answer is yes The long one is that you need to replicate objects in many of the files, if you want to build a custom class, with its own full set of abilities and their own effects. It's doable but it's a lot of work, for some of which the editor can help you, but not for everything. It would help if you are very proficient with the game first, so you know what capabilities the game's rules offer your character, and you can better design and balance its abilities and their effects.
  2. I've posted an update on the dev blog crediting Seroster and CheryChocie for the feedback: https://twitter.com/sprsccr/status/1002417558094479360
  3. The fix is up. You can now find and edit 275 new abilities on the Abilities Screen, including Frenzy and its upgrades. This will help everyone else who are using the editor. From the SpecialGenericAbility object's structure it isn't clear why is this a separate type. Might be some hack Obsidian programmers had to make, maybe they wanted to classify all upgradeable abilities as Special Generic Abilities at some point, then dropped the idea but the $type value wasn't changed.
  4. I've found the reason, thankfully it's very easy to fix. The $type property of some of the Barbarian's abilities is "Game.GameData.SpecialGenericAbilityGameData, Assembly-CSharp" instead of the usual "Game.GameData.GenericAbilityGameData, Assembly-CSharp". The reason you can easily find it through the Progression Tables Screen is because the progression table's Abilities List gets filled up by fetching objects by their IDs, whereas the Abilities screen gets all the objects in the Abilities database, and then filters them by their $type property. I wonder what reason did Obsidian have for this SpecialGenericAbility thing. I'll inspect the two object types and update the filtering in the Abilities screen. Thanks a lot for finding this!
  5. I'll take a look, but that's weird because I've been modding Frenzy myself, while I was developing the first release version. The Barbarian_Bruiser was one of the Progression Tables on the first screen, and it has Frenzy in its abilities list.
  6. I've made the fix, though it will still require some manual work. 1. Go to https://spiritualsuccessor.net/abilities 2. Find (Ctrl+F) "Prayer for the body" and open it 3. Scroll to its AttackID property. Click "GoTo" 4. You will find one item in the list of StatusEffectsIDs - "Prayer_for_the_Body_SE_Fit" Click "GoTo" on that one. 5. Now you've opened the status effect which was previously lacking the property you needed. But now I've updated it with a "StatusEffectsValueIDs" list. This list has only one Status Effect in it. This is the tricky part you need to understand. The Status Effect called by the successfully "attack-ed" ability "Prayer for the Body", has a list of status effects that it applies in turn. These Status Effects are listed in this property, that I've now shown for editing. Now you have two ways to proceed: 5.1. You can just change the status effect right here with a stronger one, and hit "Save Changes" for the "Prayer_for_the_Body_SE_Fit" object. You just click the dropdown, select a new Status Effect from the list, and the "Save Changes" button will become clickable. 5.2. The other option is to create your own custom status effect, and then connect it to the "Prayer_for_the_Body_SE_Fit". In this case you have to click "GoTo" on the "INS_Fit_SE_Constitution" status effect. 5.2.1 This will open "INS_Fit_SE_Constitution" in the same Detail View where you just had "Prayer_for_the_Body_SE_Fit". Now make the edits you want. You can edit anything except the ID property. This has to remain the same, because of the way in which changes to objects are saved. 5.2.2 After making the changes, hit "Save Changes". 5.2.3 Now From the Attack Detail View, click "GoTo" again on the "Prayer_for_the_Body_SE_Fit" Status Effect. 5.2.4 Make any sort of irrelevant change, so that the Save Changes button becomes available. Change some value and then change it back to the original. The important part is that you Save this object too. 5.2.5. Go to "Export Data" and hit "Export to file" to save a file with both objects. 5.2.6. Open that file, and manually change the ID of the "INS_Fit_SE_Constitution" status effect. It's enough to change one letter or number. 5.2.7. Now use the same ID in "Prayer_for_the_Body_SE_Fit"'s property called "StatusEffectsValueIDs". It's a list of IDs. You want to delete the one that's there, and replace with the ID of the one you exported. Sorry it's still messy like that, but if I allow changing of IDs of edited objects, its saving would break right now. Due to the fact that many properties are not being exposed in the editor, the saving functionality actually merges the changed object coming from the editor, with the original object, queried from the database. If their IDs don't match, it won't be possible to preform this merge, and the data in the Export Data screen would be unusable. There are ways to circumvent this limitation, but I'll decide on how to do it at a later point.
  7. You can do it, at least in part, if not completely with just the editor, which is still not intuitive enough if you haven't noticed it, I guess You know, I had not decided what the next How-To will be about, but I'll make it about how to do this, because I guess many people want to edit abilities. To answer your question, you need to open the Ability "Prayer_for_the_Body" click GoTo button next to the attack, add a new Status Effect for the stronger inspiration (you may have to find its name first, because the list of status effects is huge), delete the old Status Effect for the weaker inspiration, and finally hit Save Changes on the Attack Detail view. EDIT: Actually, you can't just do it right now. I need to make a small change to the status effects first, so that these inspirations are added to the list of selectable status effects. I'll write you back later today.
  8. Characters.gamedatabundle. Look for "Game.GameData.RaceGameData, Assembly-CSharp" within that file. These objects are not yet editable with Spiritual Successor, but I'm working on that. BTW, I've just released a new Development Update: https://twitter.com/sprsccr/status/1001792218557018112 Follow on twitter for news, and ask questions there, as I check it more often.
  9. These are really great. I dislike most watercolor portraits in the base game, wish I could replace all of them with real ones, but these watercolor versions are very pretty and detailed. Where is your own profile portrait from?
  10. Concurrent players will jump after the first big patch, but the number of owners seems weak.
  11. Anytime someone calls story or characters "bland", I read "I don't really want to play this game". This argument is just so vague and subjective. It's alright, you are not supposed to want to play every game, all the time. When you get in the mood for it, the characters won't seem "bland" and then you'll start it again and get into it.
  12. I'll start by saying I haven't played beyond Deadlight, because from the start it was obvious the game will benefit a lot from the first patches and I didn't want to spoil it for myslef by playing unpatched. Plus, there was enough work to do on the JSON editor to keep me busy. This means I can't speak at length about the game's qualities or story, but the little I saw won me over completely, and I think the game is overall a big improvement over PoE. The increase in complexity and readability of mechanics, and in freedom/exploration of gameplay at the same time, the addition of multiclassing plus the ship system is just a huge boost. This is now much more than an IE games revival/clone. There is much I would like to change about the combat and abilities balance, but that's what modding is for. All reviews of Deadfire I have seen so far seem to be very positive, and I think that's well earned by the game, yet the sales numbers don't seem to be that great. I wonder why is that? Are people waiting for patches/DLC? Does the price feel too high for people who haven't backed/preordered?
  13. The first How-To guide for doing simple edits with Spiritual Successor is up on the development blog.
  14. The first development update is out, and it's the beginning of a series. It tells about the little code refactoring I did and how this will help speed up development of new features. Next post will be the first in another series - a tutorial where I'll walk you through a simple use case for the editor, and the steps to follow in order to mod something relatively simple.
  15. Excellent news about that documentation and modding tools. I asked Adam exactly about documentation yesterday. Please obsidian give me a modding tool for the data, so I can mod instead of coding my own tool
  16. Ok, it' now available at https://spiritualsuccessor.net/ and the same link is in my signature. I'll post basic how-tos soon, two warnings for now: 1. Don't refresh your browser tab if you have made changes which you like but you haven't exported yet through the Export Data screen. The editor doesn't remember the state of your changes, because all the gamedatabundle data is in your browser tab's memory. If you refresh the tab, you will reload the original state of that data from the server. So, export before reloading! 2. It's possible that you click on objects which are not yet editable. If you click on objects in the lists on the left side, and nothing sensible seems to be loading on the right side - there are lots of empty fields, etc - you've probably clicked on an object of a wrong type.
  17. The counter was for fun, and it didn't take much time to write. I thought it's better than just a "coming soon" sign. This way people return back to the site from time to time, just to check on the timer. My original idea was to have the animated solar system with Eora and its two moons circling around the sun. I even got a css animation for that, but in the end I decided it doesn't look all that good. Ok, here is a screenshot, while I'm updating the server with the first release. It's happening! https://twitter.com/sprsccr/status/999061380945842176 You are welcome to stalk Spiritual Successor on Twitter! I plan to use it to post news on updates, and on what I'm working on regularly, until I have the time and decide to set up a development blog.
  18. To anyone interested - the release is slightly behind schedule, but don't panic. It's coming out in 5-6 hours.
  19. How about editing attack/spellcasting speed? I messed around with the files looking for action, recovery & combat movement speed values, found the latter 2 but only combat movement edit worked. GlobalRecoveryMultiplier had no effect in the game no matter what value I assigned to it and I haven't managed to find anything for action speed, maybe in some DLL file? Since there is relatively few of them, I figured the gain from having an interface for them would be minimal and anyone who wants to edit, add such objects can just do it by hand. However I'll add interface for these types of objects too, just for convenience. The thing to keep in mind is, every object you "edit" will be exported as a part of a X.gamedatabundle file. You can edit any object, and if you change a character in its ID, it will be added to the existing objects. If not, it will replace the object with the ID it has. You always end up with new objects and new files, never edit the vanilla gamedatabundles directly.
  20. I believe in the IE games the walking animation is used for a reason. Walking in Deadfire was even better for me once I boosted the speed to about 3.5 and adjusted the animation speed to match the movement speed.
  21. I don't know what's involved in exporting currently existing assets from the unity files or importing new ones. I'm pretty sure you would need a unity development suite, or at least some tool for the export. If you can develop them entirely in unity that would be cool I guess, but unity is proprietary, and the license costs some non-nengligible sum. Alternatively, you could make your models in whatever 3d modelling software you are using, and then pass them to Obsidian. They will credit you when they include them, as they have done with the works of an artist who drew a bunch of portraits for PoE after its release. But for them to include your heads, I guess they'll have to follow strictly the style of the stock ones.
  22. There is a link in my signature with a countdown timer: https://spiritualsuccessor.net/coming-soon The date is in Eoran calendar though You'll have to calculate it yourself. Consider 00:00:00 on Jan 1 2018 to be 00:00:00 in the first day of the Eoran calendar. Hours have 60 minutes, but the day has 26 hours. Development is going well at the moment. The pretty skeuomorphic UI style may not make it into the first release, but in the worst case you'll have enough functionality to mod the Creatures>Progression Tables>Abilities>Attacks>Status Effects chain of objects. You'll also be able to modify Recovery times, and some Global settings. I'll gradually add support for more objects after the first release. The difficulty is not editing the objects, it's really planning your mod and balancing it.
  23. I've found examples among objects in attacks.gamedatabundle where the objects within a "Components" array are put in different order between attacks' objects. For example: Carnage_AOEPrimary: Components: [{46}{9}{12}] That's AttackBaseComponent, then AttackAOEComponent (9 properties), and finally AttackRangedComponent (12 properties). And then in other objects we have: Components: [{46},{12},{9}] For example, the nearby Barbaric_Yell_AOE is like that. It will help me a lot if you can keep these consistent across all attacks of a given type. Because when writing my editor, I use stuff like this.attackForm.setControl('EngagementRadius', this.attack.Components[1].EngagementRadius); And if this Components[1] means one object in one attack, and another object in another attack... I have to make checks every time whether I'm in the right object, which shouldn't be necessary. Just a friendly request.
  24. Regarding Xoti's voice, I like it because I just like Southern American English, but also because it has more personality to it than most voice sets. What I never liked in PoE was how non-fantasy voice acting sounds, in style, tone and language. I don't know if this is because of lack of direction, or it was done on purpose, but I think it hurts the experience. My example of voice acting done right in a fantasy RPG - Icewind Dale. Play it, and see. In general, I think voice acting is something that should be used sparingly in a role playing game, because it takes away from what is the player's job. Imagine watching Game of Thrones and then reading the A Song of Ice and Fire books. You'll be unable to imagine the characters in any way but how you've seen them in the film. That's what voiceovers do in RPGs, they narrow down people's experience and make it less personal. A role playing game should aim to be the opposite, give opportunity for subjective interpretation whenever it makes sense.
×
×
  • Create New...