Another Character Generator

By OggDude, in Star Wars: Edge of the Empire RPG

1 hour ago, Wohli said:

...

Anyway the workaround is to create the SWCharGen folder manually and the app starts.

And a big thanks from me for all that time you spent coding this app. Where could I donate? Could not find it anymore anywhere.

Button, top of the character generator.

17 minutes ago, SilindeT said:

Button, top of the character generator.

Ah thanks!

It seems that I am almost blind. :blink:

1 hour ago, Wohli said:

Ah thanks!

It seems that I am almost blind. :blink:

LOL, no problem. I think we have all been there at some point or another.

15 hours ago, OggDude said:

It's a bug. I had forgotten to add the weapon modifier index to the mod. It's working now.

Cool, thanks for the reply. Also, I noticed that the Droid Special Features don't seem to print right. I've tried creating multiple new characters, before and after clearing the cache, and it keeps doing this:

Capture.PNG

6 hours ago, Wohli said:

The registry key "DataFolder" is properly set to C:\Users\<user name>\AppData\Roaming\SWCharGen.

The problem is the app cannot create the SWChargen directory, although I run the app in administrative context. As you assumed I am able to create that directory by myself, because I am admin of my working machine and have the write permissions for that folder.

But it is strange that I am not getting warned, as you mentioned, when the app tries to create the SWCharGen folder and fails. The app tries to start and simply stops working without any message. No loading screen appears, no error message, nothing.

On the other hand could it be that you are using the value of the reg key as a string to create the directory? If that is the case this could be the real problem. The app data directory is one of those special folders that should be treated differently in .NET. Get the app data folder with var appDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) and than use Path.Combine(appDir, @"\Roaming\SWCharGen\") for creating the directory. If that is not the case forget what I said ;) .

To help reporting errors it would be nice to have a file logging mechanism implemented that dumps exceptions (with all that inner exceptions and stack trace) to a file. If you have some time left have a look at log4net. Just get the nuget package and with a few lines of code you have your file appender ready.

Anyway the workaround is to create the SWCharGen folder manually and the app starts.

And a big thanks from me for all that time you spent coding this app. Where could I donate? Could not find it anymore anywhere.

I get the default data directory originally by first getting the AppData directory, then adding "SWCharGen" to it ("Roaming" is included in the call). This is stored in the registry. As the user, you should have full access to this directory, as should the apps. Different Windows users will have a different default data directory, since the key value is stored in HKEY_CURRENT_USER.

Since it sounds like you're Windows-savvy, did you modify the permissions of your AppData folder? Have you tried running the apps as the Administrator, see if that makes a difference? You might also check the security for the apps and see if something screwy is set. Make sure that "Everyone", or at least the current user, has full rights to the install directory and the files.

I still think it's a permissions problem of some sort.

16 hours ago, lordvarek said:

i am having trouble finding how to make a base i found the stuff for it in editor but main user is it not ready yet or am i missing something

Run GM Tools. Create a group for your party. Go to the Bases pane. Add/modify bases at will :)

21 hours ago, Nytwyng said:

Would you have any objection to me linking to the downloads (credit provided, of course) from mySWRPG.com?

Sure, go for it :)

2 hours ago, grahamcd said:

Cool, thanks for the reply. Also, I noticed that the Droid Special Features don't seem to print right. I've tried creating multiple new characters, before and after clearing the cache, and it keeps doing this:

Capture.PNG

Works for me. You may have bad custom data. Try removing your custom data and see if it makes a difference.

Just as a side note, the apps include over 100 pages of documentation, plus a 30+ page FAQ. If you're having issues, or can't figure out how to do something, check those two sources and see if they help.

And while you're at it, if I forgot to include something, or something is outdated or difficult to understand, please let me know and I'll update it.

3 hours ago, OggDude said:

I get the default data directory originally by first getting the AppData directory, then adding "SWCharGen" to it ("Roaming" is included in the call). This is stored in the registry. As the user, you should have full access to this directory, as should the apps. Different Windows users will have a different default data directory, since the key value is stored in HKEY_CURRENT_USER.

Since it sounds like you're Windows-savvy, did you modify the permissions of your AppData folder? Have you tried running the apps as the Administrator, see if that makes a difference? You might also check the security for the apps and see if something screwy is set. Make sure that "Everyone", or at least the current user, has full rights to the install directory and the files.

I still think it's a permissions problem of some sort.

Tried to reproduce that behaviour at my machine (Win10) at home now and same error appears no matter if running as administrator or not.

Wrote a small console app at work and tried to create the SWCharGen folder, which works with and without administrative permissions.

Version 1.7.0.1 is able to create that folder too without administrative rights.

I guess, without knowing the code, that the call is not made to create that folder, because the exception occurs when trying to read the settings file from that folder and not when creating it. No UnauthorizedAccessException is thrown, instead the DirectoryNotFound exception, so it should not be a permission problem.

I think you are using a construct like:

if(!Directory.Exists(path))
{
    Directory.CreateDirectory(path);
}

Could you verify that the path variable contains the proper string and maybe not only the path for the app folder or something like this?

Edited by Wohli
1 hour ago, OggDude said:

Works for me. You may have bad custom data. Try removing your custom data and see if it makes a difference.

I tried it with an new empty CustomData folder and it worked, note I set the data path to a new temp directory I created. I then went into the data editor; selected the Species section, selected Droid, and clicked Modify. Then I selected the second choice in the Option Choices, and clicked Modify. I did nothing else, then clicked Update, then Update, and then Save. Exited the Data Editor, and checked the CustomData directory. A custom Droid.xml file was created. I made no actual changes, but it created the xml. Just to be safe I cleared the cache, then opened Character Generator again. I set the species to Droid, then clicked Print, and then Print Standard and... it did it again.

I went back, deleted the custom Droid.xml. Cleared the cache and tried again. It worked. I went through the same steps to create the custom Droid.xml and the issue returned. It seems that having any droid.xml file in the CustomData directory triggers the repeat. I even tried it on another PC yet. Same results.

If there is anything else you would like me to try out, I am happy to test it.

Thanks!

6 hours ago, OggDude said:

Run GM Tools. Create a group for your party. Go to the Bases pane. Add/modify bases at will :)

Thanks man, plus this is the best generator I have ever seen. Your continued dedication and selflessness to this community is literally awesome. May all your en devours be grand.

Hey Oggdude, have you given any thought to creating or having some create a brief video tutorial? Could prove useful to some. Especially to us visual learners.

8 hours ago, grahamcd said:

I tried it with an new empty CustomData folder and it worked, note I set the data path to a new temp directory I created. I then went into the data editor; selected the Species section, selected Droid, and clicked Modify. Then I selected the second choice in the Option Choices, and clicked Modify. I did nothing else, then clicked Update, then Update, and then Save. Exited the Data Editor, and checked the CustomData directory. A custom Droid.xml file was created. I made no actual changes, but it created the xml. Just to be safe I cleared the cache, then opened Character Generator again. I set the species to Droid, then clicked Print, and then Print Standard and... it did it again.

I went back, deleted the custom Droid.xml. Cleared the cache and tried again. It worked. I went through the same steps to create the custom Droid.xml and the issue returned. It seems that having any droid.xml file in the CustomData directory triggers the repeat. I even tried it on another PC yet. Same results.

If there is anything else you would like me to try out, I am happy to test it.

Thanks!

When you customize a species, you can add option choices or options to it. Because they require keys, I run the new/modified species through a routine that adds keys with standard names. I was trying to look at the old species and match the same names so I could reuse keys, which normally works. But the droid has several option choices with the same name ("Droid"). That caused it to match the first name and replicate identical keys.

Anyway, I'm now ignoring the original version and just updating empty keys. That seems to work.

3 hours ago, Arrakus said:

Hey Oggdude, have you given any thought to creating or having some create a brief video tutorial? Could prove useful to some. Especially to us visual learners.

Actually no, until you just brought it up :) I've never done a video before. I have seen a few YouTube videos that groups have made of their character creation process using my app, though.

You should share those :)

9 hours ago, Wohli said:

Tried to reproduce that behaviour at my machine (Win10) at home now and same error appears no matter if running as administrator or not.

Wrote a small console app at work and tried to create the SWCharGen folder, which works with and without administrative permissions.

Version 1.7.0.1 is able to create that folder too without administrative rights.

I guess, without knowing the code, that the call is not made to create that folder, because the exception occurs when trying to read the settings file from that folder and not when creating it. No UnauthorizedAccessException is thrown, instead the DirectoryNotFound exception, so it should not be a permission problem.

I think you are using a construct like:


if(!Directory.Exists(path))
{
    Directory.CreateDirectory(path);
}

Could you verify that the path variable contains the proper string and maybe not only the path for the app folder or something like this?

You know what it is... I have several "directory" methods, such as DataFolder(), CacheFolder(), DataFolderDefault(), etc. DataFolder and CacheFolder both verify that the folder exists and creates it if it doesn't. But DataFolderDefault just returns the path without creating. This was never an issue because CacheFolder() was being used before just DataFolderDefault(), and since the cache resides in the default data folder, it was automatically created as well.

However... :) I changed the way I save "global" settings, since Win8 and Win10 are both incredibly anal about non-Admin's writing to install directories, such as Program Files. Even though ClickOnce doesn't install in Program Files, where it does install, the current user won't necessarily have permission to write. So, instead of writing out settings in a .config file within the install directory, I'm saving settings in AppData. And, you guessed it, it's accessing DataFolderDefault() before anything else...

Well, that was a good catch and I'm glad you spent so much time narrowing it down. For the people that are having issues with this, just create the following directory:

C:\Users\<user name>\AppData\Roaming\SWCharGen

That should solve the problem.

Edited by OggDude
18 minutes ago, Daeglan said:

You should share those :)

Here's a review of SWRPG. He mentions the generator toward the end:

This is a pretty long video about how this GM plans for a session. He uses the generator for a few things:

These guys use the generator throughout their entire character generation video. I watched this one all the way through and came up with a few enhancement ideas after watching them either struggle with something or not understand something:

Here's another group using an earlier version of the generator:

I wasn't planning on doing this, but as there's a bug in the current version that prevents new installs from working, I needed another bug release. Good news is that you'll be getting a bunch of other fixes, as well as a few bits of Endless Vigil that I've been working on :)

Speaking of which... 2.0.1 will only contain Endless Vigil. 2.0.2 will contain No Disintegrations, and 2.0.3 will contain Friends Like These. Doing three books for a single release would just take too long.

Anyway, here's what I've fixed for 2.0.0.5:

Release 2.0.0.5

  • There was an issue with the web install involving manifest files. This should be taken care of.
  • Another issue with web install was that Sql Server CE files were not being included, which caused an exception when the generator was run. This should be taken care of.
  • If you launched the character generator with no data (specifically, no characters), you'd get an exception in "CharShowInfo". This will no longer happen.
  • The Navigator specialization was missing Survival from its list of career skills. This has been fixed.
  • In the skills pane, the header of the skill grid was not the right size which caused some text to be partially obscured. This has been fixed.
  • In the Sources dialog, selecting or deselecting a source would cause an exception. This has been fixed.
  • In the Sources dialog, the "Core" cell was editable. It is now properly read-only.
  • The Bardottan species had "Aleena" in the description. This has been fixed.
  • The Farsight Force power was missing a connection between the bottom-row Mastery abiltiy and the Range ability to the right. This has been fixed.
  • When a new species was selected, the character was not being recalculated, so the change was not displayed. This has been fixed.
  • There were a few places in the generator where auto recalc had been turned off for the current character in order to save needless recalcs from happening. However, it wasn't always turned back on properly. This resulted in certain changes not being reflected in the character due to recalculations not being performed properly. These situations should be fixed.
  • There was an issue where the campaign setting for a character would be erased after the character was saved. This will no longer happen.
  • When printing a group sheet, character summaries all displayed "Test [Rival]". This was because the summary control was being translated when it was loaded, which occurred after everything had already been set. Translation now occurs before everything is set, so values are now what they should be.
  • In the data editor, adding a sub-species to a species would give an error dialog that the key was missing. It will no longer do this.
  • In the Options dialog, clicking "Select None" caused an exception. This no longer happens.
  • Standardized the max number of items in combo box drop down lists based on the height of the display.
  • The Vibro-Bayonet attachment was incorrectly applying its damage mods to the base weapon. It will now apply them properly to the bayonet.
  • In crafting, there was a logic error that prevented selection of integral attachments if the item's base HP was 0. It will now display all HP 0 and 1 attachments, regardless of the item's HP limit, assuming they're applicable to the crafted item.
  • In signature ability editor, added filter based on the Ability setting, so only nodes for a particular ability will show up in the drop down lists.
  • In the Transfer dialog, from the Equipment pane of the generator, group sources for equipment were not being found. This has been fixed.
  • In the Transfer dialog, from the Equipment pane in the group dialog, bases and vehicles had their transferred equipment updated properly, but characters did not. This has been fixed.
  • In the Crafting dialog, if you chose a droid directive that allowed skill choices, then selected all the skills, the "Choose" button would not allow you to change them. This has been fixed.
  • In the Crafting dialog, when adding the Unobtrusive effect to droids, the key for Indistinguisable wasn't set. If Behavioral Optimizations was then selected, Indistinguisable wasn't displayed in the list. This has been fixed.
  • In the Crafting dialog, when adding to droid characteristics using Superior Hardware, if you later lowered the count, it would retain all of the previous characteristic changes. It will now remove any excess characteristics until it matches the effect count.
  • After modifying a companion, any equipment changes to the companion were not showing up. This has been fixed.
  • After modifying a base NPC, any equipment changes to the NPC were not showing up. This has been fixed.
  • In the Data Editor, the last source list will now be automatically included when you add an item.
  • In the Data Editor, fixed issue with item attachment editor where changes to mods or limits weren't displayed immediately in the summary.
  • In the Data Editor, when modifying an existing species where option choice or option names were used multiple times, certain option choices or options could end up being repeated several times, while others were removed completely (this happened on the Droid species because more than one option choice was called "Droid"). This was due to the validation routine that made sure proper keys were in placer for options and option choices because it matched new names with existing names. It will now only update a key if one is missing.
  • Fixed an issue that prevented new users from running the programs.

Mmm, shiny. Looking forward to putting this one through its paces.

3 hours ago, OggDude said:

You know what it is... I have several "directory" methods, such as DataFolder(), CacheFolder(), DataFolderDefault(), etc. DataFolder and CacheFolder both verify that the folder exists and creates it if it doesn't. But DataFolderDefault just returns the path without creating. This was never an issue because CacheFolder() was being used before just DataFolderDefault(), and since the cache resides in the default data folder, it was automatically created as well.

However... :) I changed the way I save "global" settings, since Win8 and Win10 are both incredibly anal about non-Admin's writing to install directories, such as Program Files. Even though ClickOnce doesn't install in Program Files, where it does install, the current user won't necessarily have permission to write. So, instead of writing out settings in a .config file within the install directory, I'm saving settings in AppData. And, you guessed it, it's accessing DataFolderDefault() before anything else...

Well, that was a good catch and I'm glad you spent so much time narrowing it down. For the people that are having issues with this, just create the following directory:

C:\Users\<user name>\AppData\Roaming\SWCharGen

That should solve the problem.

I am glad I could help and your application saved me way more time than I spent tracking down that issue.

5 hours ago, OggDude said:

I wasn't planning on doing this, but as there's a bug in the current version that prevents new installs from working, I needed another bug release. Good news is that you'll be getting a bunch of other fixes, as well as a few bits of Endless Vigil that I've been working on :)

Speaking of which... 2.0.1 will only contain Endless Vigil. 2.0.2 will contain No Disintegrations, and 2.0.3 will contain Friends Like These. Doing three books for a single release would just take too long.

Hi OggDude,

Not that i want to sound demanding, but could you do No Disintegrations first?

The main reason i ask this is that here in Europe, we have not even seen the first print of the book in our game stores (they cant get stock), so having it in the character editor as an alternative would be amazingly useful, especially as there is a resource out there with the details for the Talent Trees.

It would be great if you could get No Disintegrations to Europe where FFG have failed.

Thanks.

After Release 2.0.0.5

Transferring items to and from groups works in the GM Tools.

However, even though it appears to work, when transferring items to the Group within the Character Generator, the items simply become lost. You transfer them from the character and they never appear in the equipment list for the group.

45 minutes ago, Ferretfur said:

Hi OggDude,

Not that i want to sound demanding, but could you do No Disintegrations first?

The main reason i ask this is that here in Europe, we have not even seen the first print of the book in our game stores (they cant get stock), so having it in the character editor as an alternative would be amazingly useful, especially as there is a resource out there with the details for the Talent Trees.

It would be great if you could get No Disintegrations to Europe where FFG have failed.

Thanks.

I'll second that!

As a developer, nothing else helps you realize the flaws in your software design then watching the average end-user use the software. Those are good videos. I will need to make a note to check them out.