Logo Platform
logo amplifiers simplified

Need help with Tower of Temporal Paradox

Reply
Copied to clipboard!
7 years ago
Dec 5, 2017, 2:36:09 PM

Hey :)


I've taken a quick look into this and here's what I've found:


NetDustOverTime is the Property whose value controls the amount of Dust gained per turn. It is affected by the GameSpeedTimeMultiplier on the Empire.

DustOverTimeStock is what is actually added to the System Dust. 


If you look at the path in the Empire you will see that it uses ClassEmpire/ClassColonizedStarSystem/StarSystemImprovementUniqueTimeLords which means the Properties you're looking for are found on the improvement within a System. Maybe your path was incorrect?


I also notice that the Resource DustOverTime can be found in ResourceDefinitions.xml and has a location pointing to the improvement itself:

LocationPath="ClassEmpire/ClassColonizedStarSystem/StarSystemImprovementUniqueTimeLords"/>

So you might want it experiment with that too, since a Resource can have multiple LocationPath.


I hope this helps you somehow!

If you have more questions don't hesitate I'll try my best to answer them.


Cheers,

0Send private message
7 years ago
Dec 5, 2017, 5:42:08 PM

@WeaponizedCaffeine


Thank you for your response. May I ask a favor of explaining what


<SimulationDescriptor Name="BuildingStarSystemImprovementUniqueTimeLords" Type="BuildingStarSystemImprovement"/>

and

<QueuedSimulationDescriptorReference Name="BuildingStarSystemImprovementUniqueTimeLords"/>

are needed for?

0Send private message
7 years ago
Dec 6, 2017, 9:19:35 AM

I think that BuildingStarSystemImprovementUniqueTimeLords is a descriptor that is used to tag when an Improvement is being built, useful for preventing Unique Improvements from being queued in multiple Systems.


QueuedSimulationDescriptorReference is used to apply the SimulationDescriptor when the Improvement is queued, that is the checked here:

<InterpreterPrerequisite Inverted="true"    Flags="Prerequisite,Discard">Path(Context,@'../ClassEmpire/ClassStarSystem,BuildingStarSystemImprovementUniqueTimeLords') and not(Path(Context,@'ClassStarSystem,BuildingStarSystemImprovementUniqueTimeLords'))</InterpreterPrerequisite>

Does that make sense? :)

0Send private message
7 years ago
Dec 6, 2017, 11:50:21 AM

@WeaponizedCaffeine


It perfectly does, thank you. My first problem was indeed with wrong path inside my resource. I didn't really saw any description in the tutorial that "QueuedSimulationDescriptorReference" used for queue, I assume I had to understand that from the context (but it was somewhat hard for me, honestly). Is there a way where someone who is not the dev can get that kind of information (and about other properties/descriptors/mechanics, like that the game understands adding "Net" to the property name will be used to increase the value of that property)? Maybe I'm missing something, or using mod tutorial in the wrong way? 


Anyway, what I did now is: 

I have SimulationDescriptors.xml with

<SimulationDescriptor Name="StarSystemImprovementKaizenOffice" Type="StarSystemImprovement">
  <Property Name="MinimumKaizenOfficeIndustry" BaseValue="0"/>
  <Property Name="KaizenOfficeIndustryStock" />
  <Property Name="NetKaizenOfficeIndustry" BaseValue="1"/>
  <BinaryModifier TargetProperty="SystemProduction"              Operation="Addition" Left="0"   BinaryOperation="Addition"  Right="$(KaizenOfficeIndustryStock)" Path="./ClassColonizedStarSystem"  />
</SimulationDescriptor>

StarSystemImprovements.xml with

<StarSystemImprovementDefinition Name="StarSystemImprovementKaizenOffice">
<SupervisorGain Name="Industry"       Weight="3"  />
<Cost ResourceName="SystemProduction">1</Cost>
<SimulationDescriptorReference Name="StarSystemImprovementKaizenOffice" />
</StarSystemImprovementDefinition>

and ResourceDefinitions.xml with

<ResourceDefinition Name="KaizenOfficeIndustry" Type="Common">
<ResourceLocation Name="KaizenOfficeIndustry" LocationPath="ClassEmpire/ClassColonizedStarSystem/StarSystemImprovementKaizenOffice"/>
</ResourceDefinition>

So, what it does right now is: improvement is built and starts adding +1 industry to the system per turn beginning from the next turn as expected (so I'm very grateful for your previous help). 


What I'm trying to achieve now is that that increase would be equal to the 1% of the current system production. I added BinaryModifier to the NetKaizenOfficeIndustry  inside SimulationDescriptors.xml and changed it's BaseValue to "0" like this: 

<SimulationDescriptor Name="StarSystemImprovementKaizenOffice" Type="StarSystemImprovement">
<Property Name="MinimumKaizenOfficeIndustry" BaseValue="0"/>
<Property Name="KaizenOfficeIndustryStock" />
<Property Name="NetKaizenOfficeIndustry" BaseValue="0"/>
<BinaryModifier TargetProperty="NetKaizenOfficeIndustry" Operation="Addition" Left="0.01" BinaryOperation="Multiplication" Right="$(NetSystemProduction)" />
<BinaryModifier TargetProperty="SystemProduction"              Operation="Addition" Left="0"   BinaryOperation="Addition"  Right="$(KaizenOfficeIndustryStock)" Path="./ClassColonizedStarSystem"  />
</SimulationDescriptor>

But it doesn't work. I clearly do something wrong, probably it's again has something to do with location paths. What I think my addition does is: Get value of system industry NetSystemProduction, multiply it by 0.01 to get 1% and then add to NetKaizenOfficeIndustry, and the other calculations occur (KaizenOfficeIndustryStock is increased by new NetKaizenOfficeIndustry, after what it's added to the system industry SystemProduction). I think I don't need to provide Path here because NetKaizenOfficeIndustry is located inside StarSystemImprovementKaizenOffice. So, may I ask for your help once again?


0Send private message
7 years ago
Dec 6, 2017, 1:27:45 PM

Oh I'm glad to hear you've suceeded in making this first step work! Always happy to help!


Unfortunately the documentation for the simulation is, let's face it, pretty lackluster. The thing is nobody has the time (and very few have the knowledge) to make a detailed, exhaustive documentation for it.

I basically learnt the Simulation by getting my hands dirty and asking the simulation-guru Meedoc every time I encountered something I did not understand. (Truth be told, I bothered him a lot in the early days ^^)


For the problem at hand, maybe I'm misunderstanding the effect you're trying to put together, but wouldn't it be simpler to use Operation="Percent"  in a regular Modifier?

In any case, I could be wrong but I think your attempt (green BinaryModifier, right?) is not working because you are using a TargetProperty="NetKaizenOfficeIndustry" that's indeed found in the current context but you're trying to but use $(NetSystemProduction) which is a value that does not exist in the context but in the ClassColonizedStarSystem .


Keep me posted!


Updated 7 years ago.
0Send private message
7 years ago
Dec 6, 2017, 2:43:05 PM

What I'm trying to do is to get improvement that gets you +1% of total system industry at first turn, +2% at second, +3% at third and so on (the amount gained increaes every turn). So I guess I need to get NetKaizenOfficeIndustry to increase by 1% of SystemProduction (not sure if I need to use that or NetSystemProduction can't really tell the difference of two). That can be done by Percent operation or by Multiplication in BinaryModifier (I'm using the latter).  However I - exactly what you told - need to get $(NetSystemProduction) acknowledged by the BinaryModifier, but I don't know how to do it, because Path only refers to TargetProperty (which is NetKaizenOfficeIndustry), not the property in the Right="(NetSystemProduction)".  Is there a way to get that value to be understandable by the BinaryModifier? 


EDIT: Or maybe there is a way to make BaseValue equal to percentage? 

Updated 7 years ago.
0Send private message
7 years ago
Dec 6, 2017, 4:35:13 PM

The problem you're facing is something that is annoying for us too when writing data for the game on the regular.

The thing is there's no magical keyword to fetch a something that's neither in the context nor at the end of the path.


It's hard for me to try and help without really having it on my computer, the Simulation Archmage Meedoc might have a secret black magic spell for that but for now you'll have to make do ^^


In your example:

<BinaryModifier TargetProperty="NetKaizenOfficeIndustry" Operation="Addition" Left="0.01" BinaryOperation="Multiplication" Right="$(NetSystemProduction)" />

The TargetProperty is on the context but one of the Operation Values is on the System.

I think youcould use an intermediate Property, such as:


Add a Property in your current context, for example <Property Name="KaisenOfficeIndustryNetSystemProduction" />

Add a Modifier on the ColonizedStarSystem that transfer the value of NetSystemProduction to KaisenOfficeIndustryNetSystemProduction

Use KaisenOfficeIndustryNetSystemProduction in your BinaryModifier since it's a value that's part of the context


If values are off during testing, it might be because of Priority orders like the NetSystemProduction is transferred before everything is computed in it, so make sure that everything is done in order by tweaking the Priority of your operations (a lower Priority value means it's taken into account first)


I hope this helps you :)



0Send private message
7 years ago
Dec 6, 2017, 6:29:50 PM

I assume what you refer to as "ColonizedStarSystem" are 

<SimulationDescriptor Name="ColonizedStarSystemStateColony" Type="ColonizedStarSystemState">

for all races except Vodyani and

<SimulationDescriptor Name="ClassMothership" Type="ClassMothership">

for Vodyani?

In that case I guess I should copypaste entire descriptors and then add somewhere new modifiers because mod will overwrite both descriptors?


EDIT:

Thought about what you said with "Percent" Operation, came up with this: 

<SimulationDescriptor Name="StarSystemImprovementKaizenOffice" Type="StarSystemImprovement">
<Property Name="MinimumKaizenOfficeIndustry" BaseValue="0"/>
<Property Name="KaizenOfficeIndustryStock" BaseValue="0"/>
<Property Name="NetKaizenOfficeIndustry" BaseValue="1"/>
<Modifier TargetProperty="NetSystemProduction" Operation="Percent" Value="$(KaizenOfficeIndustryStock)" Path="./ClassColonizedStarSystem" Priority="100"/>
</SimulationDescriptor>

I am aware, that the way I put it, it increases by 100%, not by 1%, that coefficient will be changed (made it to see how the numbers behave). So, problem with this is, first turn everything is OK, but the next turns value added is the same what it was at the first turn, but it shouldn't be that way, it should increase because KaizenOfficeIndustryStock increases.

What i mean - with example - I have system with 34 industry. What I expect: 34 on 1st turn, 68 (34+34) on 2nd, 136 (34+34+68) on 3rd, 272 (34+34+68+136) on 4th and so on - I expect the increasing value to growth. What I actually have is that value added is 34 every time - it doesn't increase, as if it is not aware of KaizenOfficeIndustryStock after first iteration. EDIT2: or it's not aware that NetSystemProduction is increased as if value it's using is what it was upon construction.

Updated 7 years ago.
0Send private message
7 years ago
Dec 3, 2017, 8:09:48 PM


Can somebody (maybe devs if they're so kind) explain in detail how does the code for Tower of Temporal Paradox (riftborn unique dust improvement) work? What I'm interested in is making similar improvements for other FIDSI that can be built and still have passive increasing bonus, not behave themselves as queue blockers. I wasn't able (probably because of my insufficient skill level) to reproduce the effect even when I copied all code changing (renaming) only corresponding name pairs, it just added dust bonus one time upon construction, while vanilla improvement kept it's bonus growing every turn. Maybe it has something to do with 


<Property Name="DustOverTimeCount"/>

but I have zero clue about it, saw it only one time in entire Simulation folder.

I think I understand the idea behind such code (did mod Kaizen Workflows), but failed to achieve passive increasing bonus on 1-time constructed building and need help with that.

Any help is appreciated.



0Send private message
7 years ago
Dec 7, 2017, 9:25:58 AM

I guess overwriting those descriptors would make other mods that do the same incompatible? 

Moving from NetSystemProduction to SystemProduction didn't change the behavior, everything works the same way (this is why earlier I said "can't really tell the difference between the two"). However, what I noticed - when I build Drone Networks (improvement that adds +10 food +10 industry) Kaizen Office (name of my improvement) begins to add +44 instead of +34 earlier, and same thing goes when population increases; so my guess is KaizenOfficeIndustryStock keeps "ticking", but the value of increase updates only if SystemProduction actually changes by other sources, as if SystemProduction is not "aware" that it was changed by Kaizen Office. 

0Send private message
7 years ago
Dec 7, 2017, 9:43:16 AM

It's weird I see, you've even added a Priority of 100. I'd have blamed the Priority for such a behavior.

Maybe it could be the way you transfer the value of the System Industry from the System to your improvement (so you have the Industry in the context) that is incorrect?


0Send private message
7 years ago
Dec 7, 2017, 9:50:18 AM

Should've post my previously updated code here, my bad, sorry. This is what I experimented on:

<SimulationDescriptor Name="StarSystemImprovementKaizenOffice" Type="StarSystemImprovement">
<Property Name="MinimumKaizenOfficeIndustry" BaseValue="0"/>
<Property Name="KaizenOfficeIndustryStock" BaseValue="0"/>
<Property Name="NetKaizenOfficeIndustry" BaseValue="1"/>
<Modifier TargetProperty="SystemProduction" Operation="Percent" Value="$(KaizenOfficeIndustryStock)" Path="./ClassColonizedStarSystem"/>
</SimulationDescriptor>

I tried to use Percent based on my resource stock to get rid of transfering SystemProdution to my improvement context in the first place, to avoid descriptor overwriting. As you can see the Priority isn't even there. 

EDIT: so the idea behind is - my resource keeps track of turn number (you may say that), and SystemProduction builds upon itself using Percent and that turn number. Current coefficient is 100% increase, (value of Percent = 1) that would be changed to 1% (value of Percent = 0.01) later.

EDIT2: adding Priority didn't change a thing. 

Updated 7 years ago.
0Send private message
7 years ago
Dec 7, 2017, 10:52:14 AM

It's hard to tell what's wrong from where I'm standing. If your mod is otherwise functional, you could send it over and I could try to pass it in our Simulation Debugger.

0Send private message
0Send private message
7 years ago
Dec 7, 2017, 11:47:13 AM

Okay from what I can tell everything is working fine.

Every turn, the multiplier is increased by 100 (100%, 200%, 300% etc...)

If I have 100 Industry and a +100% bonus I'll have 200 Industry and 300 next turn

If I build something else and have 200 Industry with the same +100% I end up with a correct value of 400 and 600 next turn.

From my very basic tests I noticed that Kaizen Office increases Industry by (Sum of everything in the tooltip)*(100%*NbTurn)


Now Ithink I understand what you meant by 

my guess is KaizenOfficeIndustryStock keeps "ticking", but the value of increase updates only if SystemProduction actually changes by other sources, as if SystemProduction is not "aware" that it was changed by Kaizen Office. 


However I observed it to change over turns even when I didn't build anything else.

This is normal, though: the System Industry, as hinted by the tooltip , is a composition of various sources. So your Kaizen "source" just applies a percent on the value. I'm not sure it's going to help you understand but imagine it as some sort of sticker you put on a value. If what's written on the sticker changes, the value below it does too but removing the sticker has its whole effect disappear even after 3 turns have passed.


From my end I don't see any issue with it, so I'm still a bit confused regarding what is the intended effect.

0Send private message
7 years ago
Dec 7, 2017, 12:10:08 PM

Perhaps this is me thinking in the absolutely wrong way and I guess then the code is working fine, but.

As you said 

Every turn, the multiplier is increased by 100 (100%, 200%, 300% etc...)

If I have 100 Industry and a +100% bonus I'll have 200 Industry and 300 next turn

Shouldn't it be 400 at the "next turn"? My logic goes somth like this - we have basic 100 industry, which is multiplied by 100% and added, so we have 200 industry at 2nd turn; then (what I think and try to get) we have 200 industry multiplied by 100% and added - so we have 400 industry on the 3rd turn, which is multiplied by 100% and added - so we have 800 industry on the forth turn. 


It adds 100 industry every time which equals to 100% of industry of the first turn, but at the second turn that 100% would equal to 200 already. This is weird explanation of what I told earlier about "it's not aware that value has changed".


I would achieve an effect like compound interest in bank, like geometrical progression - only in example we have 100% coefficient and I would like to have it 1%.

Total industry of the system this turn = 1.01 * Total industry of the system last turn.


What we have now (with my "great" lol-code) I guess is more like arithmetic progression which I guess is working fine the way you debugged and showed it.

But this is entirely not what I would like to get. 


EDIT: the greatest confusion for me is why on the third turn we have +100 industry increase (from 200 to 300) if the value from which we get 100% is equal to 200 and it should be 200 + 200 = 400.

Updated 7 years ago.
0Send private message
7 years ago
Dec 7, 2017, 12:30:19 PM

If this helps, I can show you the effect I need - KaizenWorkflows.zip

This is my mod made a couple of month ago. What I would like to achieve is the same effect on FIDSI (nevermind happiness and resource boost), but on built improvement and not on queue blocker.


Sorry if I bother you too much.

Updated 7 years ago.
0Send private message
?

Click here to login

Reply
Comment