Modules Stats Beta 1.10 current. Updated: 9/16/09 Ver: 1.15

I’ve updated the spreadsheet again, now for version 1.14. I also changed the process I used to import the tab delimited values file into excel so that the quotation marks in the data files are preserved. The URL linked above is still the place to go.

Darn, I already wrote my own python script, extracting stuff.
Yours seems much longer, gotta look into this one when I got some time… maybe you got some more more nifty features.

With the power of the infamous MS Excel 2007 I clicked out some nifty graphic-bars so now I (and maybe you too) can see which stuff is how good against hull or shields
(those shiny yellow-greenish columns).

(Im not so sure about the conversion from fire_interval to fire_s though…)

I doubt it. I went with the stupidest parser design I thought would actually work. It simply sticks things from opposite sides of the string " = " into a dict. The only remotely clever feature is they way it will stick certain columns at the beginning of the output (and exclude others). If you understand set operations, that part is pretty simple too.

Yeah, the units (especially for time) in the module data are not very clear. I’ve been meaning to use a stopwatch to see exactly how long on a weapon takes reloading, but I haven’t had a chance yet. In the mean time I’ve just been assuming that time is measured milliseconds, but that’s probably wrong. From your table, you are using 1/360 sec, right?

If guessing at units hasn’t make your brain hurt yet, try correcting for the fact that missiles can only fire again after their first volley has arrived. That’s where it really gets messy. The speed values for missiles (and maybe plasma) are a bit strange, as they don’t seem to be on the same scale as the displayed speeds for ship in the game (a missile that is spec’d at 0.5 speed can overtake a fighter moving 3.0).

I’m not sure your stats for shield and armor damage are going to give you good guidance. Thats because it doesn’t actually help to have more shield or armor penetration than the resistance of the enemy’s shield or armor. As long as is able to penetrate, a weapon will always do its full damage, and penetration versus non-penetration is a hard line. Since a weapon with 27 shield penetration can get through any shield in the game there’s no advantage of having more. Even 24 shield penetration is enough to go through all but the Reflective Shield module, so the Proton Beam module and the Federation’s Fusion Beam have a big advantage against shields compared to the standard Beam Laser, but this is not obvious in your stats. Armor penetration is a bit more complicated because the armor thickness goes down with damage, but the general issue is the same.

Totally. But I guess it’s wrong. I took it cause it somehow is a little bit realistic.
I just sat down with a stopwatch and stopped the time of the heavy plasma…
It’s strange: sometimes it uses 7 seconds reload time and sometimes 8,9,10…
Because of not changing the target in this times I guess it must have something to do with the shell not hitting - maybe like the missiles?
But it shouldn’t be… somebody should stop some more times to find it out.

Also you can’t factor in the fact that in particular multiple missiles will get their hit chances tripled but also their interception.

You’re right - totally.
I wanted a total number of a weapon - how much damage it can actually do in average.
So maybe I would have to assume that each weapon has to deal with an average shield/armor etc.
But this would not help very much, wouldn’t it?

I’am very confident that there must be a mathematical and short form which could somehow give us a better overview.
Or compute a nice answer to a question like: ‘Give me the best ship against THIS enemy.’
What do you think?

Also here is my python program.
Used python 3.1 and had to program somewhat unusual (coming from 2.3+).

import os
path_GSB = 'C:/Programme/Positech Games/Gratuitous Space Battles'
path_GSB_modules = path_GSB+'/data/modules'

def list_to_dict(str_list,cutoff='[dataitems]'):
    dictionary = {}
    for item in str_list:
        if item.strip() == '[dataitems]':
            break
        if item.find('=')>0:
            key, value = item.split('=')
            dictionary[key.strip()]=value.strip().replace('"','')
    return dictionary

output_file = open('C:/Programme/Positech Games/Gratuitous Space Battles/stats.txt','w')
properties = ['name','damage','fire_interval','max_range','min_range','optimum_range','powerconsumed','shield_penetration','armour_penetration','speed','tracking_speed','turnspeed','weight','crew_required']
seperator = ';'
lf = '\n'
for prop in properties:
    output_file.write(prop+seperator)
output_file.write(lf)
for file_name in os.listdir(path_GSB_modules):
    actual_file = open(path_GSB_modules+'/'+file_name,'r')
    dictionary = list_to_dict(actual_file.readlines())
    if 'category' not in dictionary.keys(): continue
    if 'size' not in dictionary.keys(): continue
    if dictionary['category'] != "WEAPONS": continue
    if dictionary['size'] != "CRUISER": continue
    for prop in properties:
        if prop not in dictionary.keys():
            output_file.write(seperator)
            continue
        output_file.write(dictionary[prop]+seperator)
    output_file.write(lf)
output_file.close()
sys.exit(0)

Learning something new every day…
The set operation is nice, indeed.
I would have tried to get those dictionaries to collide and return the intersection somehow… but I’am to lame to look it up.

Moving on to the mathematical thing, I’ll try to come up with something - let’s get the facts:
Can we somehow have a look on when shields are absorbing damage / reflecting / letting through?
If we could define this for shields, amor - the weapons will be piece of cake.

Hmm, it could be possible that plasma launchers cycle faster when their previous shots hit, since when they misses there will be a projectile flying across the rest of the battlefield. There is a “speed” stat that I’m pretty sure controls how fast it moves (though again, who knows what its units are), and like missiles they have a “fuel” stat that show the maximum distance the projectile can go.

Hmm, I’m not sure if some “dimensions” of a design can be given useful numerical values, because facing off against different opponents can greatly change the value of a given module. A fleet that devastates opponents who have missiles (because it has lots of PD or guidance scramblers) probably won’t do nearly as well against lots of fighters, or against a fleet with lots of plasma launchers. Similarly, a fleet that’s strong against one of those may be useless against the original missile fleet.

If you’re just trying to characterize the weapon modules, I suspect that the best thing to consider is just their DPS values versus different kinds of targets. So in addition to a raw DPS stat, you’d have a DPS against cruiser shields, one for cruisers with heavy armor, another for fast frigates moving at speed 0.8, and one for fighters going speed 2.75 (and there are plenty more you could play with).

Those more specific DPS values should be pretty easy to calculate. They’re just the raw DPS multiplied the hit chance and a factor to account for penetration. Hit probability is 1-(target_speed/tracking_speed), with a minimum of a ~2% chance of a lucky hit. Shields and armor reflect all of the damage from weapons that do not have penetration greater than or equal to their resistance or thickness, except that non-penetrating weapons still deal damage ~2% of the time from critical hits. If the weapon does penetrate it does full damage (so the penetration factor is either 1.0 or 0.02). The 2% values for critical and lucky hit values may not be right, but I can’t remember where I saw cliffski mention each of them to double check.

I’d suggest using 24 shield resistance and something like 50 armor thickness for the two cruiser targets, and have them each moving at speed 0.15. For frigates, assume something like 9 resistance of each type. Fighters don’t have any resistances worth mentioning, so they must rely on their speed.

This might seem like a silly question but I’ve been thinking, shouldn’t GSB’s ship design interface provide a data table like this itself? I mean most of the basic data is presented there, but only for 1 module at a time. It’d be nice if one could view a list of, for example, the weapon modules in this manner, sortable by damage, cost, or any other relevant field. Seriously, for a game where ship design plays such a significant part, why are we relying on external apps to view the data in a more usable format?

Yes, this would actually make sense and I wouldn’t need to try to calculate anything.
Cliffski should do the work actually…

Some kind of “Summary” - button which openes a screen with everything listed and summed up at the end.
That would be just terrific, right?

Well I was thinking more about an alternative view to the current module picker. Instead of a screen with a bunch of icons that all look too much alike, there could be an alternative display that shows a list of the modules with their stats, much like a spreadsheet view. So if one were interested in picking the weapon/armour/whatever with the lowest cost, for example, they could just click the cost field to sort the list by cost. Also, throwing in basic DPS values for the weapons wouldn’t hurt either, even if it doesn’t take into account any potential enemy shielding/armour it would still be useful just to see how the weapons compare to one another.

I just realized that I haven’t updated this thread in a while. I’ve improved the python script I posted here, and the new version has its own thread in the modding section. Feedback is welcome!

I’ve used that code to grab an updated set of module data, which I’ve uploaded to my Google spreadsheet. This data is from version 1.21, which may not exactly match the official release version, due out sometime later today. I’ll update again when that version is out.

On another note, I did a bunch of testing of rates of fire using a stop watch program on my smart phone, and I’m pretty sure that fire_interval is measured in units of 0.0025 sec (1/400 sec). There was quite a lot of noise in my data (recorded by hitting the “lap” button each time a weapon fired) but averaging out many cycles with different weapons it seemed pretty clear, there were a few strange ways in which different weapons seemed to imply different rates, but I couldn’t figure out any pattern.

Hey, thanks for making the spreadsheet - I had thought of making one, but then I figured someone else had probably already made one.

One thing I’ve found useful (and added to a copy I made of your spreadsheet) is the ratios of shield penetration (and armor penetration) to fire interval. The result is a “damage over time” that the weapon can do. For example, the “Cruiser Beam Laser” has a shield penetration of 20 and a fire rate of 2700. I take 20 / 2700 and then multiply by 100 to make the results easier to read. The result is about 0.74. The “Cruiser Pulse Laser” only has a shield penetration of 11, but with a fire rate of 500 the result is 2.2. Doing the same for armor penetration also produces interesting results.

Unless I’m missing something, I think these “damage over time” results are more useful than shield penetration or armor penetration numbers alone.

Oh, I just realized if I multiply by 400 instead of 100, I get the “penetration per second.”

I think your calculation is going to be off if you’re using the penetration values rather than the damage value. GSB compares the weapon’s penetration to the shield or armor resistance, and if the weapon’s is greater it deals the weapon’s damage value to the shields or armor. Having extra penetration doesn’t increase the damage dealt at all. On the other hand, if the defense’s resistance is higher than the weapon’s penetration value it deals no damage at all. There is a 2% chance of a critical hit that ignores resistances, but that’s usually not too useful.

I’ve gone ahead and added a whole set of DPS calculations to the posted spreadsheet. There’s the raw DPS, but also DPS vs different sorts of ships. The first two are against a cruiser moving at speed 0.15, with either a Shield Module II or 50 average armor thickness. The next is a frigate with shield resistance 10 and average armor also 10, moving at speed 0.60 (the DPS is against whichever defense is more effective). The last is a fighter moving at speed 2.18 with negligible armor (fighter armor is always negligible from a resistance standpoint).

It would be very useful to me if you added “dps/weight” “dps/cost” “dps/crew” and “dps/power” for weapons. I want to make the most cost effective ship in certain categories.

Since they seem reasonable, I’ve added each of these to my Google spreadsheet.

I’ve also double checked, and the module data from beta 1.21 is identical to the official release 1.23. There are some minor data errors (courtesy of MS Excel) that I want to fix at some point, but they’re mostly in unimportant fields (like “color”).

Hi, does the spreadsheet at members.nuvox.net/~on.tduncan/BS … 0stats.xls contain the same data as the Google Spreadsheet version? I don’t have a Google account or the ability to create one right now, so I used the XLS version instead. The data is very useful even though there isn’t a DPS column on it.

No, the original excel spreadsheet has not been updated in quite some time (since game version 1.10, I suspect, judging by this thread’s title).

I’m attaching to this post the most recent version of my spreadsheet in Excel format (in a zip file, because the forum doesn’t allow the uploading of .xls files). I hope it is useful to you!
GSB Imported Module Data.zip (40.5 KB)

Awesome! Thank you. For some reason the Google Spreadsheet link now works for me without asking me to log in, but it is still good to know that I can get a copy of the spreadsheet without using Google in case they decide to change their minds about that.

I’d like to add my thanks too for the spreadsheet; it’s come in very handy!

Great spreadsheet - can I assume, judging by the post date/time, that this is way out of date now? :frowning: