Page 1 of 1
Visualizing the tech tree
Posted: Mon Apr 04, 2016 8:55 pm
by SirDamnALot
I was playing around with the tech tree file and wrote a little knick knack to make an actual tree out of the lists.
Written in Delphi, because I don't know squat about Lua
7-Zip
http://www.fastshare.org/download/SiS_TechTree_Visu_01..7zAlternate zip
http://www.fastshare.org/download/SiS_TechTree_Visu.zipUnzip the file in your SiS directory (where sis.exe is) and run it. It should find the tech tree file from there on its own.
You can snoop around the techs and see their descendands and requirements, but that is not the actual purpose.
- Untitled.png (20.01 KiB) Viewed 14176 times
The real work is the
TechTree.png it should have written in your game directory:
(Zoomed out)
- Untitled2.png (169.22 KiB) Viewed 14176 times
It is not very easy to read (many cross dependencies between science fields) but I had fun writing the thing
Re: Visualizing the tech tree
Posted: Mon Apr 04, 2016 9:19 pm
by sven
Very cool! My version of 7zip is having trouble with that archive, so I can't actually test out the program. But, as I developer, having players who are excited enough about the game to build these kinds of mods and addons suggests that we are indeed on the right track
edited by sven: Got it working! I think the problem may have actually had to do with an interaction between fastshare.org and chrome.From the screenshot, it looks like your Delphi script may be having some trouble parsing the @TECHNOLOGY.lua file (there is no tech in the game called 'haduir'
). I could write a little hack to output the core tech tree directed acyclic graph (DAG) to some kind of easily digestible format. I actually already have one such hack written up -- as I was exporting to graphviz's DOT format for the alpha-version tech tree visualizations. We could use something other than DOT though. Is delphi happy parsing JSON?
Re: Visualizing the tech tree
Posted: Mon Apr 04, 2016 9:28 pm
by SirDamnALot
sven wrote:Very cool! My version of 7zip is having trouble with that archive, so I can't actually test out the program. But, as I developer, having players who are excited enough about the game to build these kinds of mods and addons suggests that we are indeed on the right track
From the screenshot, it looks like your Delphi script may be having some trouble parsing the @TECHNOLOGY.lua file (there is no tech in the game called 'haduir'
). I could write a little hack to output the core tech tree directed acyclic graph (DAG) to some kind of easily digestible format. I actually already have one such hack written up -- as I was exporting to graphviz's DOT format of the core DAG for some of the easly alpha-version tech tree visualizations. We could use something other than DOT though. Is delphi happy parsing JSON?
Yeah, it stumbles a bit with the race specialities like
Code: Select all
tech "Ancient Control Systems" | race_specific {'haduir'} {
The parser is very very simple, I scan line-wise for key words like
typelist or
tech and go from there with the single quotes for the name.
So the
haduir are a false positive.
There should be a JSON unit for Delphi, but I never used it so far.
Re: Visualizing the tech tree
Posted: Mon Apr 04, 2016 9:35 pm
by sven
SirDamnALot wrote:The parser is very very simple, I scan line-wise for key words like typelist or tech and go from there with the single quotes for the name.
So the haduir are a false positive.
There should be a JSON unit for Delphi, but I never used it so far.
Ok, I'll think a little more about this. The fastest and easiest output format for me would probably be very simple pretty-printed Lua tables -- something where rolling a quick parser in whatever language would be easy. At a minimum, any export format would need arrays and associative tables though -- so maybe JSON is the most universally compatible option. I've written Lua\JSON table conversions before. That wouldn't be a big deal. Um, check back tomorrow. I may write up something quick before I go to bed, provided I can get all my more urgent TODOs dealt with
Re: Visualizing the tech tree
Posted: Mon Apr 04, 2016 9:40 pm
by sven
SirDamnALot wrote:It is not very easy to read (many cross dependencies between science fields) but I had fun writing the thing
Oh, and also, just because I didn't say so loudly before -- very nice work with the graph formatting. Fully automated graph visualization is hard to do well, and the outputs you're getting look way nicer than the graph-viz images I was generating back in the day. So kudos
Re: Visualizing the tech tree
Posted: Tue Apr 05, 2016 7:00 am
by SirDamnALot
sven wrote:SirDamnALot wrote:The parser is very very simple, I scan line-wise for key words like typelist or tech and go from there with the single quotes for the name.
So the haduir are a false positive.
There should be a JSON unit for Delphi, but I never used it so far.
Ok, I'll think a little more about this. The fastest and easiest output format for me would probably be very simple pretty-printed Lua tables -- something where rolling a quick parser in whatever language would be easy. At a minimum, any export format would need arrays and associative tables though -- so maybe JSON is the most universally compatible option. I've written Lua\JSON table conversions before. That wouldn't be a big deal. Um, check back tomorrow. I may write up something quick before I go to bed, provided I can get all my more urgent TODOs dealt with
Oh thats cool
I hope I am not distracting you too much, I can update the parsing part from my side too.
(e.g. reading parts & hulls and other tech upgrades from the tech tree file)
sven wrote:SirDamnALot wrote:It is not very easy to read (many cross dependencies between science fields) but I had fun writing the thing
Oh, and also, just because I didn't say so loudly before -- very nice work with the graph formatting. Fully automated graph visualization is hard to do well, and the outputs you're getting look way nicer than the graph-viz images I was generating back in the day. So kudos
Thanks! As a "tool" guy, my visual stuff looks mostly terrible
(I've written an unit editor for the game Naval Warfare: Arctic Circle and a combat helper tool for the pen & paper RPG shadowrun 5.
And they all look terrible
)
Re: Visualizing the tech tree
Posted: Tue Apr 05, 2016 2:19 pm
by sven
SirDamnALot wrote:sven wrote:Ok, I'll think a little more about this. The fastest and easiest output format for me would probably be very simple pretty-printed Lua tables -- something where rolling a quick parser in whatever language would be easy. At a minimum, any export format would need arrays and associative tables though -- so maybe JSON is the most universally compatible option. I've written Lua\JSON table conversions before. That wouldn't be a big deal. Um, check back tomorrow. I may write up something quick before I go to bed, provided I can get all my more urgent TODOs dealt with
Oh thats cool
I hope I am not distracting you too much, I can update the parsing part from my side too.
(e.g. reading parts & hulls and other tech upgrades from the tech tree file)
Ok, here's a super-simple pretty-printed version of the internal
TECHNOLOGY table. It takes out all the shorthand and functional programming tricks in ~TECHNOLOGY.lua, and just gives you the raw data. (This takes about 10 seconds for me to export.)
Let me know how Delphi feels about parsing that. If I can get 20 minutes to mess around, I can output a JSON version of the same table. Also, if there are other internal tables you'd like access to, I could write a little hack that would tell sis.exe to dump arbitrary internal data table to JSON/Lua, if given certain command line-options, potentially opening up a whole world of unix-style utility hacks, for those of you inclined to write such things
Re: Visualizing the tech tree
Posted: Tue Apr 05, 2016 3:18 pm
by sven
sven wrote:Ok, here's a super-simple pretty-printed version of the internal
TECHNOLOGY table. It takes out all the shorthand and functional programming tricks in ~TECHNOLOGY.lua, and just gives you the raw data. (This takes about 10 seconds for me to export.)
And here's a
JSON encoding. It's worth being aware that JSON only supports string keys in its assosiative arrays, while Lua allows you to mix integer keys with other key types, bluring the line between "arrays" and more general "tables". There are a few places where the TECHNOLOGY table includes mixed integer and string keys, specifically, the "prereq" tables, which may include a list of other tech prereqs, plus a "type" field that will be either "all_of" or "one_of", depending on the nature of the prereq.
In these cases, I've told my JSON exporter to convert the integer keys to strings, so the lua table:
Code: Select all
{
"Hadron Cohesion",
"Plasma Focusing",
"Zero-Point Energy",
type = "all_of"
}
Is converted to JSON as:
Code: Select all
{
"1": "Hadron Cohesion",
"2": "Plasma Focusing",
"3": "Zero-Point Energy",
"type": "all_of"
}
Which is a little weird. But working around that may well be easier than trying to find a parser that can handle generic Lua tables. Um, in any case, happy coding
Re: Visualizing the tech tree
Posted: Tue Apr 05, 2016 6:23 pm
by SirDamnALot
sven wrote:Ok, here's a super-simple pretty-printed version of the internal
TECHNOLOGY table. It takes out all the shorthand and functional programming tricks in ~TECHNOLOGY.lua, and just gives you the raw data. (This takes about 10 seconds for me to export.)
Let me know how Delphi feels about parsing that. If I can get 20 minutes to mess around, I can output a JSON version of the same table. Also, if there are other internal tables you'd like access to, I could write a little hack that would tell sis.exe to dump arbitrary internal data table to JSON/Lua, if given certain command line-options, potentially opening up a whole world of unix-style utility hacks, for those of you inclined to write such things
Thanks! The TECHNOLOGY.table looks super easy to read for a line parser
Happy to hear that this can be an easy by-product for the engine =)
Maybe I can do an update to my tool this weekend.
Re: Visualizing the tech tree
Posted: Fri Apr 15, 2016 10:28 pm
by SirDamnALot
Sorry for my late reply, I've been quite busy with work and stuff.
But at least I can give a little update:
http://www.fastshare.org/download/SiS_TechTree_Visu_02..7zUnlocked Designs, Parts, etc are shown in the diagram.
- TechTree.jpg (122.05 KiB) Viewed 14082 times
Re: Visualizing the tech tree
Posted: Tue Aug 16, 2016 7:58 pm
by Captainspire
Would it be alright if I tried to make it all pretty and graphical?
Re: Visualizing the tech tree
Posted: Tue Aug 16, 2016 9:03 pm
by SirDamnALot
Captainspire wrote:Would it be alright if I tried to make it all pretty and graphical?
By all means, go nuts =)
Here is my project folder in case that helps:
http://www.fastshare.org/download/SiS.zip