Page 1 of 2

tech tree (modding/adding techs)

Posted: Wed Mar 28, 2018 7:45 pm
by siyoa
adding new techs is quite easy, and they show in regular view no problem

tech tree view is quite a different matter, I have a few end game techs added and tech tree not showing them didn't bother me much ... but now I am thinking to add some more techs in the middle of tech pool and I was looking into the code for tech tree to see how difficult it is to add them there ... it seems that tech tree is quite hardcoded at the moment and not modding friendly

are you guys planning to rewamp tech tree for easier modding ? and meanwhile, can you, please, provide a quick crash course on tech tree modding (in its current form) ? I may try to figure out the code if I have enough time, but any help that speeds it up is much appreciated ;)

Re: tech tree (modding/adding techs)

Posted: Wed Mar 28, 2018 7:55 pm
by sven
siyoa wrote:adding new techs is quite easy, and they show in regular view no problem

tech tree view is quite a different matter,

are you guys planning to rewamp tech tree for easier modding ? and meanwhile, can you, please, provide a quick crash course on tech tree modding (in its current form) ?
It should actually be pretty easy to mod as is. The core thing you need to know is that the big "master_columns" list in tech_tree_settings.lua determines where in the columns of the tree any tech shows up. Techs that don't appear in that list are just not shown in the tree. But, if you add the name of your newly created techs to master_columns -- they should show up.

(There's a lot of other fanciness involved with the way the tech tree is laid out, and tricky things that one can do to try an make the lines going in and out of a particular tech look better -- I'd recommend ignoring that stuff as a modder. But, skimming the code at the top of tech_tree_settings.lua will give you a glimpse into that rabbit hole.)

Re: tech tree (modding/adding techs)

Posted: Wed Mar 28, 2018 8:06 pm
by siyoa
hmm, apparently I was doing something wrong then, as I added new tech to "master_columns" and it didn't want to show up ... I was able to remove existing tech from there though ... will try tonight again :)

it seems that tech tree doesn't change on the fly as you edit tech_tree_settings.lua, new game is needed everytime, maybe I just didn't save files properly ... at the end I had to validate my steam files as I couldn't remember anymore what I changed :mrgreen:

Re: tech tree (modding/adding techs)

Posted: Wed Mar 28, 2018 8:32 pm
by sven
siyoa wrote:it seems that tech tree doesn't change on the fly as you edit tech_tree_settings.lua, new game is needed everytime, maybe I just didn't save files properly ... at the end I had to validate my steam files as I couldn't remember anymore what I changed :mrgreen:
Yeah -- tech_tree_settings.lua doesn't support live-coding as well as it could. That's something that's actually been bothering me as well. I've just taken a few minutes to see about improving things here -- as of r22104 (currently on the in_development steam branch), edits made to tech_tree_settings.lua should be reflected immediately in the tech tree screen.

Re: tech tree (modding/adding techs)

Posted: Wed Mar 28, 2018 8:45 pm
by siyoa
sven wrote:I've just taken a few minutes to see about improving things here -- as of r22104 (currently on the in_development steam branch), edits made to tech_tree_settings.lua should be reflected immediately in the tech tree screen.
fantastic, thanks :D

Re: tech tree (modding/adding techs)

Posted: Fri Mar 30, 2018 1:59 am
by siyoa
so, indeed it works (Beam Mods and Force Beams 2 in the picture), not sure what I was doing before :oops: definitely something incorrect

now, there seems to be some memory leak in latest dev version, anytime I edit tech_tree_settings.lua when live-coding

Re: tech tree (modding/adding techs)

Posted: Fri Mar 30, 2018 4:23 am
by sven
siyoa wrote:now, there seems to be some memory leak in latest dev version, anytime I edit tech_tree_settings.lua when live-coding
hrm. have you been experimenting with any of the other stuff in tech_tree_settings.lua (besides the master_columns entries)?

under the hood -- the tech tree layout involves an optimization step -- and if that optimization is in some way impossible, it may lead to strange behaviors (including, i think, out of memory errors). creating impossible optimization problems can be pretty easy to do accidentally, if you're playing with, say, the iq_constraints table.

Re: tech tree (modding/adding techs)

Posted: Fri Mar 30, 2018 5:41 am
by siyoa
sven wrote:hrm. have you been experimenting with any of the other stuff in tech_tree_settings.lua (besides the master_columns entries)?
nope, master_columns only ... for now ;)

is it GPU or system memory ? I only have 2GB of GPU memory

EDIT: interesting, I tried to repeat it, but I don't get error anymore, it still takes a second or 2 to switch to SiS application from text editor anytime I add/remove entry in master_columns (it still tries to process a lot of data) ... normally it switches between applications immediately

Re: tech tree (modding/adding techs)

Posted: Fri Mar 30, 2018 6:18 am
by siyoa
hmmm, this is what I meant by tech tree being hardcoded 2 days ago ... I run into similar thing then

I get an error as per the picture if I put my new tech to this section of master_columns (Beam Mods after Primary Beams)

Code: Select all

  {

    "Antimatter Torpedoes",


		"Warp Node Dynamics",
    "Hadron Cohesion",
    "Warp Lane Stabilizers",


    "Plasma Projectiles",




    "Primary Beams",
     "Beam Mods",

    "Zero-Point Energy",


    "Adaptive Energy Grid",	
   "Adamantium Construction",	


    "Dreadnoughts",	

    "Quantum Decryption",	

    "Starfighters",
    "Civil Fortifications",

    "Hidden Bases",

    "Weather Control",
    "Atmospheric Condensation",	
  },

Re: tech tree (modding/adding techs)

Posted: Fri Mar 30, 2018 6:20 am
by siyoa
if I put it here, all is fine

Beam Mods after Advanced Turbolasers

Code: Select all

{

        "Antimatter Warheads",

    "Railguns",
		"Pulse Generators",
		"Warp Node Attunement",
    "Graviton Physics",

    "Neutron Beams",
    "Stupendous Energy Physics",
    "Plasma Focusing",
  "Disruptors",
  

    "Advanced Turbolasers",
	"Beam Mods",

	    "Subspace Networking",
	    "Improved Solar Panels",
			"Arda Fabrication Techniques",

    "Battlecruiser",
    "Carriers",		
	
	
    "Multirole Fighters",		
	
    "Battle Mechs",
    "Hardened Bunkers",
    "Interspecies Law",

    "Cloning",
    "Synthetic Foodstuffs",
    "Habitat Domes",
	
	
  },

Re: tech tree (modding/adding techs)

Posted: Fri Mar 30, 2018 5:25 pm
by sven
siyoa wrote:hmmm, this is what I meant by tech tree being hardcoded 2 days ago ... I run into similar thing then

I get an error as per the picture if I put my new tech to this section of master_columns (Beam Mods after Primary Beams)
Hmm... Yes, the OR node rendering logic is a bit brittle. I don't recall exactly /why/ that particular error would show up, but, I do vaguely remember deciding that some cases in the tech tree layout code were rare enough that I figured I could get away with just not handling them properly. (Meanwhile, the handful of cases in the tech tree that do involve visualizing relatively complex <OR> joins do have custom, special case handling code in tech_tree_edges.lua.)

My own experience with adding new techs has been that as long as I pick a column position that sortof looks like the tech ought to fit there -- it usually does fit without issues. Clearly though, your mileage hasn't been quite as good.

How many new techs are you trying to add to the tree?

Re: tech tree (modding/adding techs)

Posted: Fri Mar 30, 2018 5:33 pm
by sven
siyoa wrote:if I put it here, all is fine
Hrm, it looks like, in this rendering, there are no visible edges between Beam Mods and anything else. If the edges going into Beam Mods are, for some reason, triggering a case I haven't handled in the rendering code, you could try adding custom code to info.hide_edge to just hide all lines going into Beam Mods, i.e.:

Code: Select all

	if tech=='Beam Mods' return true end
Then, in theory, you ought to be able to put the tech in any column without issues. (Though no lines would show up.)

Re: tech tree (modding/adding techs)

Posted: Fri Mar 30, 2018 5:42 pm
by sven
siyoa wrote:is it GPU or system memory ? I only have 2GB of GPU memory
Should be system. So, it should take a *serious* memory leak to trigger that warning. (Probably some kind of infinite loop in my edge-placement code.)
siyoa wrote: EDIT: interesting, I tried to repeat it, but I don't get error anymore, it still takes a second or 2 to switch to SiS application from text editor anytime I add/remove entry in master_columns (it still tries to process a lot of data) ... normally it switches between applications immediately
This doesn't surprise me. The optimization and edge layout steps that go into tech tree rendering are slow -- 2 seconds doesn't sound that far off what I'd expect.

Re: tech tree (modding/adding techs)

Posted: Fri Mar 30, 2018 6:37 pm
by siyoa
sven wrote:Should be system. So, it should take a *serious* memory leak to trigger that warning. (Probably some kind of infinite loop in my edge-placement code.)
must be, that laptop has 12GB of RAM :shock:
sven wrote:How many new techs are you trying to add to the tree?
not that many at the moment, but eventually I can end up with 20+
sven wrote:Then, in theory, you ought to be able to put the tech in any column without issues. (Though no lines would show up.)
will try this one for sure ... now, I understand that tech tree should really be visual representation of dependencies between technology advancements ... I personally don't care about the lines as much, but than why to have tech tree, right ?

I just think that the current model is hampering modding to a bigger extend than, maybe, it should ? you assign techs into fields, so main dependencies should be within this field and only very occasionally other field affects it ... so maybe, what if you show only dependencies within the field by lines and anything coming from other field would be represented by that little icon in top left corner ? all that fancy OR stuff would be lost, but this may enable you to code tech tree really flexible, so much less would be hardcoded and much more would be automatically generated, so adding a tech would be really just a simple entry ?

EDIT: please, don't take this as a criticism, more like positive feedback (although I am not sure how much it is worth it, from someone who is not fluent in lua code that much :?: ), for a small team of two, you guys are doing amazing work already :idea:

Re: tech tree (modding/adding techs)

Posted: Fri Mar 30, 2018 7:40 pm
by sven
siyoa wrote: I just think that the current model is hampering modding to a bigger extend than, maybe, it should ? you assign techs into fields, so main dependencies should be within this field and only very occasionally other field affects it ... so maybe, what if you show only dependencies within the field by lines and anything coming from other field would be represented by that little icon in top left corner?
This is actually already being done -- by default, only lines between techs in the same field will be rendered.
siyoa wrote: all that fancy OR stuff would be lost, but this may enable you to code tech tree really flexible, so much less would be hardcoded and much more would be automatically generated, so adding a tech would be really just a simple entry ?
The core problem, I think, is that if a modder creates a tech with an OR prereq, as you did, adding it to the tree is currently hard -- because OR prereqs are buggy without special purpose edge-handling code. Tweaking the tech_tree_edges.lua code a bit so that new OR prereqs just aren't rendered at all (rather than trying, and often failing, to render them in some fancy way) is probably the solution here that would be most useful for modders. But... I make no promises on when I might get around to writing that up. For now, I'd suggest you just try hiding OR preq lines by adding special cases to info.hide_edge, and then let me know if you run into any other problems.