I'm on Windows and GCS doesn't start! How come?

The most likely cause is not having OpenGL 3.2 or better installed on your machine. If you are on an older machine without the necessary OpenGL support, you may be able to work around this by putting the OpenGL32.dll from Mesa into the same directory as your GCS.exe file.

How can I convert old GCS files to the current format?

This depends greatly on just how old the file is. Files made prior to the v4.20 release need to be converted using the program found here: GCS JSON Updater. This will convert them to the v4.20 format.

Files created before v4.30 need to be converted using the v4.37.1 release. Either open and save each file with GCS v4.37.1 or you can use the command-line option to convert a bunch of files at once.

Once GCS v5.x.x can open the file, you can save it from GCS v5.x.x to have it stored in the current format.

Can I submit new/revised data files?

Absolutely! Almost all of the current data content of GCS was provided by helpful individuals other than me. If you have completely new content, please create a new library for it and send the resulting file. If, on the other hand, you're modifying one of the existing data files, please be sure to update to the latest version from the git repository first, make your changes, then submit a patch file of the differences. In either case, please either create a Pull Request or an Issue for the work and attach the new file or patch file to that.

Where can I find the global settings file?

Its location is dependent upon your specific platform. You can find the location of the settings file by running passing gcs --help on the command-line. The output will have the path to the settings file, among other things.

For those of you on macOS, you will need to open a terminal and (assuming you have GCS in the top-level Applications folder on your system, type: /Applications/GCS.app/Contents/MacOS/gcs --help

How can I change where GCS loads settings from and to?

There are two ways to accomplish this. One is to make use of the command-line --settings option that explicitly tells GCS where to find its settings file. The other is to copy the settings file to be located next to the GCS executable. When a file named gcs_prefs.json is found next to the GCS executable, it will be used instead of the normal location. Note that this does not override the command-line option, so if you do both, the command-line option will take precedence.

When doing this, you may also want to change the location of the log file, which can be adjusted using the --log-file command-line option.

How do I convert my all of my User Library data files to the current file format?

If you don't want to manually load and then save each data file to convert it to the current file format, you can use the command-line to update every data file at once. How this works depends on your computer's operating system.

Warning: Misusing the command-line can seriously damage your operating system. Unless you know what you're doing, proceed carefully and don't deviate from the instructions below.

  1. Backup your User Library.
  2. Open a terminal (macOS and Linux) or the command prompt (Windows). On Windows, you can do this by typing "Command Prompt" in the Windows search bar and clicking on the first result.
  3. Issue the convert command by typing: "PATH_TO_GCS" --convert "PATH_TO_USER_LIBRARY" substituting the full paths to GCS and the User Library as appropriate. Note that you should make sure the paths have quotes around them as shown above, in case they contain spaces.
    On Windows, the path to GCS might look like this: C:\Program Files\GCS\gcs.exe
    On macOS, the path to GCS might look like this: /Applications/GCS.app/Contents/MacOS/gcs
    On Linux, the path to GCS might look like this: /usr/local/bin/gcs
    The path to the User Library can be found by opening GCS, right-clicking on the User Library folder, selecting Configure, then copying everything in the Path field in the settings tab that comes up.
  4. When the command is run, it will start listing the files it is converting. Once it finishes, you can close the terminal. If the command gives you an error instead of listing your files, go back to step 3 and try again, double checking that your file paths are correct and that you're typing everything correctly, spaces included. Note that files that are too old to be opened by the current version may need you to install an older version of GCS to do a conversion to bring them up to a version that the current version can process.
  5. Open GCS and verify that you can open your data files.

Can I define my own standard hit location tables and have them show up in the combo for selection?

Yes. Make sure to give the table a unique ID, then export it and place it in a directory named "Hit Locations" at the top level of one of your GCS Library directories.

What operators and functions are available for use in attribute expressions?

OperatorName
(open paren
)close paren
+add
-subtract
^power
*multiply
/divide
==equal to
!=not equal to
<=less than or equal to
<less than
>=greater than or equal to
>greater than
&&logical and
||logical or
!logical not
%modulo
FunctionDescription
abs(number) Returns the absolute value of the number.
advantage_level(name) Looks for a trait with the 'name' and returns its level or -1 if it can't be found. Not available prior to v4.31. Deprecated; use 'trait_level()' for v5+.
cbrt(number) Returns the cube root of the number.
ceil(number) Returns the smallest (closest to negative infinity) value that is greater than or equal to the number and is equal to a mathematical integer.
dice(sides) Returns a string suitable for passing to the 'roll' function. 'dice(4)' would return '1d4'.
dice(count, sides) Returns a string suitable for passing to the 'roll' function. 'dice(2,4)' would return '2d4'.
dice(count, sides, modifier) Returns a string suitable for passing to the 'roll' function. 'dice(2,4,-1)' would return '2d4-1'.
dice(count, sides, modifier, multiplier) Returns a string suitable for passing to the 'roll' function. 'dice(2,4,-1,2)' would return '2d4-1x2'.
enc(forSkills) Returns the current encumbrance modifier (a value from 0 to 4). If 'forSkills' is true, the modifier is adjusted to account for equipment that has been marked as not having its weight counting against skills. Not available prior to v5.3.
enc(forSkills, returnFactor) Returns the current encumbrance modifier (a value from 0 to 4) or the move multiplication factor if 'returnFactor' is true. If 'forSkills' is true, the modifier is adjusted to account for equipment that has been marked as not having its weight counting against skills. Not available prior to v5.4.
exp(number) Returns Euler's number e raised to the power of the number.
floor(number) Returns the largest (closest to positive infinity) value that is less than or equal to the number and is equal to a mathematical integer.
has_trait(name) Returns true if the named trait is present and active on the sheet. Not available prior to v5.12.
if(test, true_result, false_result) Returns 'false_result' if 'test' resolves to 0 or an empty string, otherwise returns 'true_result'.
log(number) Returns the natural logarithm (base e) of the number.
log1p(number) Returns the natural logarithm of the sum of the number and 1.
log10(number) Returns the base 10 logarithm of the number.
max(num1, num2) Returns the greater of the two numbers.
min(num1, num2) Returns the lesser of the two numbers.
pow(num1, num2) Returns the value of num1 raised to the power of num2.
random_height(st) Returns a random height in inches based on the chart from B18. Adjusts appropriately for the traits Skinny, Overweight, Fat, and Very Fat, if present on the sheet. Not available prior to v5.12.
random_height(st, shift) Returns a random height in inches based on the chart from B18. Adjusts appropriately for the traits Skinny, Overweight, Fat, and Very Fat, if present on the sheet. 'shift' is the number of columns to shift when producing results — this is in addition to shifts caused by the traits Skinny, Overweight, Fat, and Very Fat. Use negative values to shift down, positive values to shift up. Not available prior to v5.12.
random_weight(st) Returns a random weight in pounds based on the chart from B18. Not available prior to v5.12.
roll(dice_spec) Returns the result of rolling dice (dice_spec uses standard dice notation or the result of a call to the 'dice' function).
round(number) Returns the closest integer value to the number, with ties rounding to positive infinity.
signed(number) Returns the number with a leading '+' if it is positive.
skill_level(name) Looks for a skill with 'name' and no specialization and returns its level or 0 if it can't be found. Not available prior to v5.4.
skill_level(name, specialization) Looks for a skill with 'name' and 'specialization' and returns its level or 0 if it can't be found. Not available prior to v5.4.
skill_level(name, specialization, relative) Looks for a skill with 'name' and 'specialization' and returns its level or 0 if it can't be found. If 'relative' is true, the relative level is returned instead. Not available prior to v5.4.
sqrt(number) Returns the positive square root of number.
ssrt(length, units, flag) Returns a value from the Size and Speed/Range Table on B550. 'length' should be a number. 'units' should be one of "in", "ft", "yd", "mi", "cm", "km", or "m". 'flag' should be true to have it return the size modifier or false to return the speed/range modifier. Not available prior to v4.32.
ssrt_to_yards(number) Returns the number of yards for the given size modifier from the Size and Speed/Range Table on B550. Not available prior to v4.32.
trait_level(name) Looks for a trait with the 'name' and returns its level or -1 if it can't be found. Not available prior to v5.