X4 - Just a faked economy?

This forum is the ideal place for all discussion relating to X4. You will also find additional information from developers here.

Moderator: Moderators for English X Forum

respaekt
Posts: 35
Joined: Wed, 10. Jun 09, 09:55

Re: X4 - Just a faked economy?

Post by respaekt »

Avius Caelestis wrote: Tue, 4. Dec 18, 21:38 I'm not on either side really since I haven't seen enough of the game to form an opinion about the economy, but I can provide you with a test bench by using a large money save:

Build 15x M class trade ships in Argon Prime, 3x L class trade ships, and try for an XL builder, all simultaneously. Do the same thing in the Teladi system. You will notice a warning message "The station does not have the resources to complete this order, it may take some time." appear in your screen down at the bottom ish right.

Walk away.

So far that "simulation" has been running for 8ish hours. The XL ship was never built. Two of the L ships were built. I get bursts of completion on the M class ships. Usually engine parts are the limiting component here, though I have also seen shielding and drone show up, especially with the big ships. I can correct this behaviour myself by manually using the L class ships to go pick up engine parts in the HAK system nearby, and delivering them. This will start my ships to finish construction. But the AI apparently couldn't go one system away to do this, or it was a really low priority in the build table / trading table. Would require further testing to see where that lies.

From a UI standpoint, it can be a little aggravating. If you're not paying attention to that warning message (it's yellow/gold ish text, same font size) there's no way to see which resources you're specifically missing to complete your order. Your ships will show up in the property screen with a timer clock and an exclamation Icon with no time elapsing. To figure out what components are missing, I just attempting to build more ships, at which point the trade UI will again tell you how much of each component is not available.

For repeatability, I should note that at game start on 5 separate starts, I was unable to build an XL builder ship in Argon Prime due to missing components, but the Teladi yards were able to build the ship from the get go.
That sums up my observations pretty well:

- 17 hours into the game.
- I only can build/upgrade ships at teladi wharfs
- An ordered ship in a argon prime missing hull parts, the order is placed over 10 hours ago
- My 15 Autotraders making only small profit/volume runs, like 50 credits to 10k credits most of the time. I have to earn my money with cristal farming.

The ecomony feels really unfinished, like a million-credits economy, not a billion-credits enonomy.

- There is no war activity in my universe. Have adv satellites in every sector, feels like the game is slowly running out, instead of picking up ecomonic and warlike pace

Its seems that the scripts and processes in the background needs to be rework and balanced a lot! Its a bummer that almost no game today is a nearly finished product. In a few months maybe, when the dlcs give us a bigger universe and more updates.
Lyth
Posts: 2355
Joined: Mon, 21. Jan 08, 03:48
x4

Re: X4 - Just a faked economy?

Post by Lyth »

Steve,
I did a bigger post but it was just waffle in the end.
Happy to concede my point and clarify, probably more a perception thing, Am very happy to agree the previous games were more aggressive in comparison to X4. Which is all that matters.
Take it easy, If you can't - Take it by force.
MAup
Posts: 29
Joined: Sun, 2. Dec 18, 02:35
x4

Re: X4 - Just a faked economy?

Post by MAup »

A good modder should be able to hook up a mod, with realtime information of all stations inventory, ammount of ships each faction have, being able to calculate a standard price for something, and see its increase/decrease in price overtime.
I think this would be much easier than go through all code to find a hint of this kind.
User avatar
JamesTheClarke
Posts: 78
Joined: Mon, 3. Dec 18, 10:31
x4

Re: X4 - Just a faked economy?

Post by JamesTheClarke »

Without provided evidence or many weeks of player testings available I think this whole thing should be taken with a massive grain of salt.

We'll all know more about how the underlying economy mechanics really work in a few months. If a larger patch hasn't changed it by then again.
Kadatherion
Posts: 1021
Joined: Fri, 25. Nov 05, 16:05
x4

Re: X4 - Just a faked economy?

Post by Kadatherion »

We can't yet say it's one way or the other, but if the war mechanic actually really is in as intended and it just struggles at kicking in, meaning it might become functional many more hours into a game (or that it could if we ease the jobs quota restrictions), then I'd begin to see a pattern: unrealistic and untested pacing.
Think of the "bugged" skill gains for the crewmen as another example: it's not that they don't work per se, they are a thousand times slower than reasonable. Meaning the most likely scenario before launch was that someone tested if the skill gain script worked quickly, "cheating" it, it appeared functional and that was it, but nobody actually played the game naturally and long enough to notice it was so slow it was equivalent to being non functional. It would seem - if this is the case ofc - that much of the game balance has been thought of on paper but hardly ever extensively tested by actually playing it: which makes sense, it's not the kind of thing you can test thoroughly before launch if you haven't had a real beta and hundreds of work hours dedicated to that aspect only.

I am keen to lean towards this latter theory. Ego, as every other company really, can have boasted a bit too much prerelease and have cut something out here and there, this always happens to a certain extent at least, but by their track record they are more the kind of guys that do put those promised things in, just in a very, very messy, jury rigged, untested and unbalanced way at first.
Honved
Posts: 1252
Joined: Sun, 20. Jun 10, 14:53
x3tc

Re: X4 - Just a faked economy?

Post by Honved »

Actually, a partially faked economy makes a lot more sense than either a totally faked one OR a completely dynamic one. There are planets, not just space stations, so there could and probably SHOULD be some minimum amount of available supply and a somewhat larger demand from those planets, which would provide a minimal source of key resources and a marginally larger sink for surplus products. That way, the economy is never totally "dead", just idling in low gear until space-based supply and demand pick up. Stations should require a constant supply of food and some minimal amounts of energy, regardless of whether they're manufacturing products or not, because the occupants need to eat and breathe. More significant economic growth HAS to be enabled either by ship/equipment losses through conflict and/or by the construction of stations and other infrastructure, otherwise they've got to provide some kind of sink for those finished goods.

X3 used sources and sinks to a MUCH greater extent, primarily with Trade Stations and Terran logistics stations, in some cases providing the ONLY source of certain essential resources, and sinks for massive amounts of food and certain other surplus finished product. Equipment Docks would also sink many finished products, which simply vanished. Unfortunately, it was a little too blatant that the goods simply appeared or disappeared, rather than being transported to or from the planetary surface or sold to civilian or military buyers.
Revenant342
Posts: 225
Joined: Thu, 21. Nov 13, 03:22
x4

Re: X4 - Just a faked economy?

Post by Revenant342 »

As far as Argon sectors being short hull parts goes, mine seem to be very ore-starved, resulting in a lack of refined metals and then hull parts. If its the same for you, even a couple of your own autominers mining ore makes a noticeable impact. One Drill only gathers enough ore per run to make 200 refined metals, which turns into ~160 hull parts.
gschultz
Posts: 45
Joined: Tue, 16. Jul 13, 18:53
x4

Re: X4 - Just a faked economy?

Post by gschultz »

BlackRain wrote: Wed, 5. Dec 18, 04:34
Kane Hart wrote: Wed, 5. Dec 18, 03:33 Well your proof now all over the Internet it's not fake. The economy is stalling out on a lot of people with a lot of play time lol
These things need to be reported then because itncould be a bug. I was assured by someone that the economy is entirely real (i guess with one exception being the small amount of ships spawned at a gate because no shipyard, meaning khaak and pirates somewhat)
didnt get to thank you yesterday for reluctantly doing a lot of the leg work to fact find. We are far from done helping the devs.....but you took the thread seriously - after a little bit of hand flailing and insults ;)
soundslikerust
Posts: 42
Joined: Mon, 5. Jan 15, 05:43
x3ap

Re: X4 - Just a faked economy?

Post by soundslikerust »

BlackRain wrote: Tue, 4. Dec 18, 19:17
VariousArtist wrote: Tue, 4. Dec 18, 19:12
BlackRain wrote: Tue, 4. Dec 18, 19:04So how is this not dynamic?
Theres an answer to a question to detail the possible findings:
The game is effectively a static seed, on start. AI actions are not taken into account unless they directly do something in relation to the player.
Auto trading, does not change prices, or change supply and demand, the same station will be fullfilled for the time the ship is docked and then it will need the same supplies again.
Auto mining does not affect the amount of resource available in the same way as manual mining might. Ore deliveries dont translate into goods. The game makes assumptions these things are happening and keeps simulated changes to an absolute bare minimum. Basically it spawns things on the basis other things are happening but to such a small degree. It makes the universe feel static.
All larger changes and true simulated stuff is actually just static changes which occur ONLY when the player himself is actively doing said activity.
For example, after 3-5 trades manually prices of wares will change in most cases quite significantly along with supply and demand. An auto trader next to no effect. All auto traders do is determine whether a demand is fullfilled i.e. i need 300 , i now have 300. I now need 0. That is as far as the simulation goes in terms of automated activities.
similarly if you are mining, you can deplete resources hugely faster than thousands of AI doing the same thing.

Basically, if you do stuff manually, you will see more stuff happen but it is not true simulation.
If you do stuff auto matically your universe will barely change and feel significantly more static.
This appears to by why there are so many contradicting views of the game and the universe simulation.
There is very little actual simulation.
I already read through everything the guy said, and everything he said is pure conjecture. Also, it is not true in my experience. I am seeing A TON of economic activity and I am not doing anything special. All my traders are automated, I don't do a single manual trade. I also only have 3 auto traders, one auto miner. The universe is definitely moving all around me without my help. My problem, as I said, is the lack of enemy ships due to what is defined in jobs.xml. I am looking forward to testing increasing this by a lot. There are now over 300 stations in the areas I have explored too, which is more than before. I have even seen a station being constructed and expanded before my eyes.


You're right. He probably made it up. I don't see anything like that (I had to cut this file in half) There is much much more economy code in different places


Code: Select all

<?xml version="1.0" encoding="utf-8"?>
<mdscript name="FactionLogic_Economy" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="md.xsd">
  <cues>

    <!--TODO @Owen - if traffic levels for a station are at a sustained high level, build a dock area-->

    <!--Helper libraries-->

    <library name="UpdateSectorNeighbourTable">
      <actions>
        <assert value="$Faction? and $SectorNeighbourTable?" text="'Variable $Faction or $SectorNeighbourTable not set. [Owen]'" break="1"/>
        <!--TODO @Owen take contested into account-->
        <do_if value="$Faction? and $SectorNeighbourTable?">
          <clear_table table="$SectorNeighbourTable"/>
          <find_sector name="$Sectors" owner="$Faction" multiple="true"/>
          <do_all exact="$Sectors.count" counter="$USNT_i">
            <set_value name="$Neighbours" exact="[]"/>
            <set_value name="$SectorNeighbourTable.{$Sectors.{$USNT_i}}" exact="$Neighbours"/>
            <find_cluster_in_range name="$Clusters" object="$Sectors.{$USNT_i}" maxdistance="1" multiple="true"/>
            <do_all exact="$Clusters.count" counter="$USNT_k">
              <find_sector name="$Neighbours" owner="$Faction" space="$Clusters.{$USNT_k}" multiple="true" append="true"/>
            </do_all>
          </do_all>
        </do_if>
      </actions>
    </library>

    <!--Faction economy library-->
    <library name="Econ_Manager" namespace="this">
      <params>
        <param name="FactionManagerCue"/>
        <param name="Faction"/>
        <param name="DebugChance" default="0"/>
      </params>
      <actions>
        <set_value name="$DebugText" exact="'(' + $Faction.id + ') Econ_Manager - '"/>
        <set_value name="$Reports" exact="table[]"/>

        <!--Table of actions the faction has attemtped to fix economic problems.-->
        <!--Key is by sector, value is the list of actions-->
        <set_value name="$ActionReports" exact="table[]"/>

        <!--Table of sectors within 1 jump of the sector (including itself)-->
        <set_value name="$SectorNeighbourTable" exact="table[]"/>
        <include_actions ref="md.FactionLogic_Economy.UpdateSectorNeighbourTable"/>

        <set_value name="$InsufficientProductsTable" exact="table[]"/>
        <set_value name="$ShortageProductsTable" exact="table[]"/>
        <set_value name="$InsufficientWorkforceTable" exact="table[]"/>
        <set_value name="$ShortageWorkforceTable" exact="table[]"/>
        <set_value name="$InsufficientBuildTable" exact="table[]"/>
        <set_value name="$ShortageBuildTable" exact="table[]"/>

        <!--Aggregated tables have the Ware as key and the value is the aggregated time of all reports for that ware-->
        <set_value name="$AggregatedInsufficientProductsTable" exact="table[]"/>
        <set_value name="$AggregatedShortageProductsTable" exact="table[]"/>
        <set_value name="$AggregatedInsufficientWorkforceTable" exact="table[]"/>
        <set_value name="$AggregatedShortageWorkforceTable" exact="table[]"/>
        <set_value name="$AggregatedInsufficientBuildTable" exact="table[]"/>
        <set_value name="$AggregatedShortageBuildTable" exact="table[]"/>

        <!--Table of sectors which contain ware tables of aggregated report values-->
        <set_value name="$SectorInsufficientProductsTable" exact="table[]"/>
        <set_value name="$SectorShortageProductsTable" exact="table[]"/>
        <set_value name="$SectorInsufficientWorkforceTable" exact="table[]"/>
        <set_value name="$SectorShortageWorkforceTable" exact="table[]"/>
        <set_value name="$SectorInsufficientBuildTable" exact="table[]"/>
        <set_value name="$SectorShortageBuildTable" exact="table[]"/>
      </actions>
      <cues>
        <cue name="RespondToShortageData" instantiate="true">
          <conditions>
            <event_cue_signalled cue="md.FactionLogic_Economy.ShortageDataGenerated"/>
          </conditions>
          <delay min="1s" max="5s"/>
          <actions>
            <signal_cue cue="EvaluateShortages"/>
          </actions>
        </cue>

        <cue name="EvaluateShortages" instantiate="true">
          <conditions>
            <event_cue_signalled/>
            <check_value value="md.FactionLogic_Economy.GenerateShortageData.state == cuestate.waiting"/>
          </conditions>
          <actions>
            <set_value name="$DebugChance" exact="0"/>

            <include_actions ref="md.FactionLogic_Economy.UpdateSectorNeighbourTable"/>

            <do_if value="@md.FactionLogic_Economy.GlobalStorageData.$Reports">
              <set_value name="$OwnerReports" exact="@md.FactionLogic_Economy.GlobalStorageData.$Reports.{$Faction}"/>
              <do_if value="$OwnerReports">
                <clear_table table="$InsufficientProductsTable"/>
                <clear_table table="$ShortageProductsTable"/>
                <clear_table table="$InsufficientWorkforceTable"/>
                <clear_table table="$ShortageWorkforceTable"/>
                <clear_table table="$InsufficientBuildTable"/>
                <clear_table table="$ShortageBuildTable"/>

                <!--Aggregated tables have the Ware as key and the value is the aggregated time of all reports for that ware-->
                <clear_table table="$AggregatedInsufficientProductsTable"/>
                <clear_table table="$AggregatedShortageProductsTable"/>
                <clear_table table="$AggregatedInsufficientWorkforceTable"/>
                <clear_table table="$AggregatedShortageWorkforceTable"/>
                <clear_table table="$AggregatedInsufficientBuildTable"/>
                <clear_table table="$AggregatedShortageBuildTable"/>

                <!--Table of sectors which contain ware tables of aggregated report values-->
                <clear_table table="$SectorInsufficientProductsTable"/>
                <clear_table table="$SectorShortageProductsTable"/>
                <clear_table table="$SectorInsufficientWorkforceTable"/>
                <clear_table table="$SectorShortageWorkforceTable"/>
                <clear_table table="$SectorInsufficientBuildTable"/>
                <clear_table table="$SectorShortageBuildTable"/>

                <set_value name="$TableRef" exact="null"/>
                <set_value name="$TableRefKeys" exact="null"/>
                <set_value name="$ReportKeys" exact="$OwnerReports.keys.list"/>
                <do_all exact="$ReportKeys.count" counter="$i">
                  <set_value name="$Station" exact="$ReportKeys.{$i}"/>
                  <set_value name="$Sector" exact="$Station.sector"/>

                  <!--Insufficient Production Wares-->
                  <do_if value="$OwnerReports.{$Station}.{'$InsufficientProductionWares'}?">
                    <set_value name="$TableRef" exact="$OwnerReports.{$Station}.{'$InsufficientProductionWares'}"/>
                    <set_value name="$TableRefKeys" exact="$TableRef.keys.list"/>
                    <do_all exact="$TableRefKeys.count" counter="$k">
                      <set_value name="$Ware" exact="$TableRefKeys.{$k}"/>
                      <set_value name="$ReportValue" exact="$TableRef.{$Ware}"/>
                      <set_value name="$AggregatedInsufficientProductsTable.{$Ware}" exact="$ReportValue" operation="add"/>
                      <do_if value="not $SectorInsufficientProductsTable.{$Sector}?">
                        <set_value name="$SectorInsufficientProductsTable.{$Sector}" exact="table[]"/>
                      </do_if>
                      <set_value name="$SectorInsufficientProductsTable.{$Sector}.{$Ware}" exact="$ReportValue" operation="add"/>
                      <!--Avoid clashes by adding a little to the report value-->
                      <do_while value="$InsufficientProductsTable.{$ReportValue}?">
                        <set_value name="$ReportValue" exact="1" operation="add"/>
                      </do_while>
                      <set_value name="$InsufficientProductsTable.{$ReportValue}" exact="table[{'$Station'} = $Station, {'$Ware'} = $Ware]"/>
                    </do_all>
                  </do_if>

                  <!--Production wares in short supply-->
                  <do_if value="$OwnerReports.{$Station}.{'$ShortageProductionWares'}?">
                    <set_value name="$TableRef" exact="$OwnerReports.{$Station}.{'$ShortageProductionWares'}"/>
                    <set_value name="$TableRefKeys" exact="$TableRef.keys.list"/>
                    <do_all exact="$TableRefKeys.count" counter="$k">
                      <set_value name="$Ware" exact="$TableRefKeys.{$k}"/>
                      <set_value name="$ReportValue" exact="$TableRef.{$Ware}"/>
                      <set_value name="$AggregatedShortageProductsTable.{$Ware}" exact="$ReportValue" operation="add"/>
                      <do_if value="not $SectorShortageProductsTable.{$Sector}?">
                        <set_value name="$SectorShortageProductsTable.{$Sector}" exact="table[]"/>
                      </do_if>
                      <set_value name="$SectorShortageProductsTable.{$Sector}.{$Ware}" exact="$ReportValue" operation="add"/>
                      <do_while value="$ShortageProductsTable.{$ReportValue}?">
                        <set_value name="$ReportValue" exact="1" operation="add"/>
                      </do_while>
                      <set_value name="$ShortageProductsTable.{$ReportValue}" exact="table[{'$Station'} = $Station, {'$Ware'} = $Ware]"/>
                    </do_all>
                  </do_if>

                  <!--Insufficient Workforce Wares-->
                  <do_if value="$OwnerReports.{$Station}.{'$InsufficientWorkforceWares'}?">
                    <set_value name="$TableRef" exact="$OwnerReports.{$Station}.{'$InsufficientWorkforceWares'}"/>
                    <set_value name="$TableRefKeys" exact="$TableRef.keys.list"/>
                    <do_all exact="$TableRefKeys.count" counter="$k">
                      <set_value name="$Ware" exact="$TableRefKeys.{$k}"/>
                      <set_value name="$ReportValue" exact="$TableRef.{$Ware}"/>
                      <set_value name="$AggregatedInsufficientWorkforceTable.{$Ware}" exact="$ReportValue" operation="add"/>
                      <do_if value="not $SectorInsufficientWorkforceTable.{$Sector}?">
                        <set_value name="$SectorInsufficientWorkforceTable.{$Sector}" exact="table[]"/>
                      </do_if>
                      <set_value name="$SectorInsufficientWorkforceTable.{$Sector}.{$Ware}" exact="$ReportValue" operation="add"/>
                      <do_while value="$InsufficientWorkforceTable.{$ReportValue}?">
                        <set_value name="$ReportValue" exact="1" operation="add"/>
                      </do_while>
                      <set_value name="$InsufficientWorkforceTable.{$ReportValue}" exact="table[{'$Station'} = $Station, {'$Ware'} = $Ware]"/>
                    </do_all>
                  </do_if>

                  <!--Workforce wares in short supply-->
                  <do_if value="$OwnerReports.{$Station}.{'$ShortageWorkforceWares'}?">
                    <set_value name="$TableRef" exact="$OwnerReports.{$Station}.{'$ShortageWorkforceWares'}"/>
                    <set_value name="$TableRefKeys" exact="$TableRef.keys.list"/>
                    <do_all exact="$TableRefKeys.count" counter="$k">
                      <set_value name="$Ware" exact="$TableRefKeys.{$k}"/>
                      <set_value name="$ReportValue" exact="$TableRef.{$Ware}"/>
                      <set_value name="$AggregatedShortageWorkforceTable.{$Ware}" exact="$ReportValue" operation="add"/>
                      <do_if value="not $SectorShortageWorkforceTable.{$Sector}?">
                        <set_value name="$SectorShortageWorkforceTable.{$Sector}" exact="table[]"/>
                      </do_if>
                      <set_value name="$SectorShortageWorkforceTable.{$Sector}.{$Ware}" exact="$ReportValue" operation="add"/>
                      <do_while value="$ShortageWorkforceTable.{$ReportValue}?">
                        <set_value name="$ReportValue" exact="1" operation="add"/>
                      </do_while>
                      <set_value name="$ShortageWorkforceTable.{$ReportValue}" exact="table[{'$Station'} = $Station, {'$Ware'} = $Ware]"/>
                    </do_all>
                  </do_if>

                  <!--Insufficient Build Wares-->
                  <do_if value="$OwnerReports.{$Station}.{'$InsufficientBuildWares'}?">
                    <set_value name="$TableRef" exact="$OwnerReports.{$Station}.{'$InsufficientBuildWares'}"/>
                    <set_value name="$TableRefKeys" exact="$TableRef.keys.list"/>
                    <do_all exact="$TableRefKeys.count" counter="$k">
                      <set_value name="$Ware" exact="$TableRefKeys.{$k}"/>
                      <!--treat insufficient build wares as higher priority?-->
                      <!--TODO @Owen move to params-->
                      <set_value name="$ReportValue" exact="$TableRef.{$Ware} * 2"/>
                      <set_value name="$AggregatedInsufficientBuildTable.{$Ware}" exact="$ReportValue" operation="add"/>
                      <do_if value="not $SectorInsufficientBuildTable.{$Sector}?">
                        <set_value name="$SectorInsufficientBuildTable.{$Sector}" exact="table[]"/>
                      </do_if>
                      <set_value name="$SectorInsufficientBuildTable.{$Sector}.{$Ware}" exact="$ReportValue" operation="add"/>
                      <do_while value="$InsufficientBuildTable.{$ReportValue}?">
                        <set_value name="$ReportValue" exact="1" operation="add"/>
                      </do_while>
                      <set_value name="$InsufficientBuildTable.{$ReportValue}" exact="table[{'$Station'} = $Station, {'$Ware'} = $Ware]"/>
                    </do_all>
                  </do_if>

                  <!--Build wares in short supply-->
                  <do_if value="$OwnerReports.{$Station}.{'$ShortageBuildWares'}?">
                    <set_value name="$TableRef" exact="$OwnerReports.{$Station}.{'$ShortageBuildWares'}"/>
                    <set_value name="$TableRefKeys" exact="$TableRef.keys.list"/>
                    <do_all exact="$TableRefKeys.count" counter="$k">
                      <set_value name="$Ware" exact="$TableRefKeys.{$k}"/>
                      <set_value name="$ReportValue" exact="$TableRef.{$Ware} * 1.5"/>
                      <set_value name="$AggregatedShortageBuildTable.{$Ware}" exact="$ReportValue" operation="add"/>
                      <do_if value="not $SectorShortageBuildTable.{$Sector}?">
                        <set_value name="$SectorShortageBuildTable.{$Sector}" exact="table[]"/>
                      </do_if>
                      <set_value name="$SectorShortageBuildTable.{$Sector}.{$Ware}" exact="$ReportValue" operation="add"/>
                      <do_while value="$ShortageBuildTable.{$ReportValue}?">
                        <set_value name="$ReportValue" exact="1" operation="add"/>
                      </do_while>
                      <set_value name="$ShortageBuildTable.{$ReportValue}" exact="table[{'$Station'} = $Station, {'$Ware'} = $Ware]"/>
                    </do_all>
                  </do_if>
                </do_all>

                <do_if value="$DebugChance == 100">
                  <debug_text text="'Insufficient production wares'" context="false"/>
                  <set_value name="$TableRef" exact="$AggregatedInsufficientProductsTable"/>
                  <include_actions ref="AggregatedReportTableHelper"/>

                  <debug_text text="'Production ware shortages'" context="false"/>
                  <set_value name="$TableRef" exact="$AggregatedShortageProductsTable"/>
                  <include_actions ref="AggregatedReportTableHelper"/>

                  <debug_text text="'Insufficient workforce res.'" context="false"/>
                  <set_value name="$TableRef" exact="$AggregatedInsufficientWorkforceTable"/>
                  <include_actions ref="AggregatedReportTableHelper"/>

                  <debug_text text="'Workforce ware shortages'" context="false"/>
                  <set_value name="$TableRef" exact="$AggregatedShortageWorkforceTable"/>
                  <include_actions ref="AggregatedReportTableHelper"/>

                  <debug_text text="'Insufficient build res.'" context="false"/>
                  <set_value name="$TableRef" exact="$AggregatedInsufficientBuildTable"/>
                  <include_actions ref="AggregatedReportTableHelper"/>

                  <debug_text text="'Build ware shortages'" context="false"/>
                  <set_value name="$TableRef" exact="$AggregatedShortageBuildTable"/>
                  <include_actions ref="AggregatedReportTableHelper"/>

                  <set_value name="$TableRef" exact="$InsufficientProductsTable"/>
                  <debug_text text="'Worst insufficient production ware reports (of ' + $TableRef.keys.count + ')'" context="false"/>
                  <set_value name="$DebugReportType" exact="'insufficient'"/>
                  <include_actions ref="SortedReportTableHelper"/>

                  <set_value name="$TableRef" exact="$ShortageProductsTable"/>
                  <debug_text text="'Worst production ware shortage reports (of ' + $TableRef.keys.count + ')'" context="false"/>
                  <set_value name="$DebugReportType" exact="'short'"/>
                  <include_actions ref="SortedReportTableHelper"/>

                  <set_value name="$TableRef" exact="$InsufficientWorkforceTable"/>
                  <debug_text text="'Worst insufficient workforce ware reports (of ' + $TableRef.keys.count + ')'" context="false"/>
                  <set_value name="$DebugReportType" exact="'insufficient'"/>
                  <include_actions ref="SortedReportTableHelper"/>

                  <set_value name="$TableRef" exact="$ShortageWorkforceTable"/>
                  <debug_text text="'Worst workforce ware shortage reports (of ' + $TableRef.keys.count + ')'" context="false"/>
                  <set_value name="$DebugReportType" exact="'short'"/>
                  <include_actions ref="SortedReportTableHelper"/>

                  <set_value name="$TableRef" exact="$InsufficientBuildTable"/>
                  <debug_text text="'Worst insufficient build ware reports (of ' + $TableRef.keys.count + ')'" context="false"/>
                  <set_value name="$DebugReportType" exact="'insufficient'"/>
                  <include_actions ref="SortedReportTableHelper"/>

                  <set_value name="$TableRef" exact="$ShortageBuildTable"/>
                  <debug_text text="'Worst build ware shortage reports (of ' + $TableRef.keys.count + ')'" context="false"/>
                  <set_value name="$DebugReportType" exact="'short'"/>
                  <include_actions ref="SortedReportTableHelper"/>

                  <set_value name="$TableRef" exact="$SectorInsufficientProductsTable"/>
                  <debug_text text="'Aggregated insufficient production ware reports by sector'" context="false"/>
                  <set_value name="$DebugReportType" exact="'insufficient'"/>
                  <include_actions ref="SectorReportTableHelper"/>

                  <set_value name="$TableRef" exact="$SectorShortageProductsTable"/>
                  <debug_text text="'Aggregated production ware shortage reports by sector'" context="false"/>
                  <set_value name="$DebugReportType" exact="'shortage'"/>
                  <include_actions ref="SectorReportTableHelper"/>

                  <set_value name="$TableRef" exact="$SectorInsufficientWorkforceTable"/>
                  <debug_text text="'Aggregated insufficient workforce ware reports by sector'" context="false"/>
                  <set_value name="$DebugReportType" exact="'insufficient'"/>
                  <include_actions ref="SectorReportTableHelper"/>

                  <set_value name="$TableRef" exact="$SectorShortageWorkforceTable"/>
                  <debug_text text="'Aggregated workforce ware shortage reports by sector'" context="false"/>
                  <set_value name="$DebugReportType" exact="'shortage'"/>
                  <include_actions ref="SectorReportTableHelper"/>

                  <set_value name="$TableRef" exact="$SectorInsufficientBuildTable"/>
                  <debug_text text="'Aggregated insufficient build ware reports by sector'" context="false"/>
                  <set_value name="$DebugReportType" exact="'insufficient'"/>
                  <include_actions ref="SectorReportTableHelper"/>

                  <set_value name="$TableRef" exact="$SectorShortageBuildTable"/>
                  <debug_text text="'Aggregated build ware shortage reports by sector'" context="false"/>
                  <set_value name="$DebugReportType" exact="'shortage'"/>
                  <include_actions ref="SectorReportTableHelper"/>
                </do_if>

                <!--Decide which reports to act on-->
                <!--TODO @Owen - move to parameters.xml-->
                <set_value name="$ActionThresholds" exact="table[]"/>
                <set_value name="$ActionThresholds.{'$request_commandeerable_freighter'}" exact="3000"/>
                <set_value name="$ActionThresholds.{'$request_freighter'}"                exact="6000"/>
                <set_value name="$ActionThresholds.{'$request_priority_freighter'}"       exact="11000"/>
                <set_value name="$ActionThresholds.{'$request_production'}"               exact="35000"/>
                <set_value name="$ActionThresholds.{'$request_factory'}"                  exact="65000"/>
                <set_value name="$ActionThresholds.{'$not_viable'}"                       exact="90000"/>
                <set_value name="$ActionThresholdsKeys" exact="$ActionThresholds.keys.sorted"/>

                <set_value name="$InsufficientNeighbourMultiplier" exact="0.2" comment="Factor of which to take neighbouring insufficient resources into account"/>
                <set_value name="$NeighbourActionMultiplier" exact="0.5" comment="Factor of which to take the action score of neighbouring sectors for this ware into account"/>

                <set_value name="$Request_Commandeerable_Freighter_Release_Time" exact="5400s" comment="Time after which the ship will be released"/>

                <set_value name="$Request_Freighter_Spawn_Wait_Time" exact="1000s" comment="Time to allow the freighter to start being placed in a shipyard"/>
                <set_value name="$Request_Freighter_Build_Wait_Time" exact="1000s" comment="Time to allow the freighter to be built by the shipyard after spawning"/>

                <set_value name="$Request_Pri_Freighter_Spawn_Wait_Time" exact="1500s" comment="Time to allow the freighter to start being placed in a shipyard"/>
                <set_value name="$Request_Pri_Freighter_Build_Wait_Time" exact="1500s" comment="Time to allow the freighter to be built by the shipyard after spawning"/>

                <set_value name="$Request_Production_Build_Wait_Time" exact="5h" comment="Time to allow the building to start"/>
                <set_value name="$Request_Production_Build_Timeout"   exact="5h" comment="Time to allow the build to progress before disregarding"/>
                <set_value name="$Request_Production_Working_Timeout" exact="5h" comment="Time to allow the factory to work before disregarding"/>

                <set_value name="$Request_Factory_Build_Wait_Time" exact="15h" comment="Time to allow the building to start, where any module is operational or buildmodule is building"/>
                <set_value name="$Request_Factory_Build_Timeout"   exact="10h" comment="Time to allow the build to progress before disregarding"/>
                <set_value name="$Request_Factory_Working_Timeout" exact="5h" comment="Time to allow the factory to work before disregarding"/>

                <!--Check the exising actions to see if any should be disregarded-->
                <set_value name="$DisregardedActions" exact="[]"/>
                <set_value name="$ActionReportKeys" exact="$ActionReports.keys.list"/>
                <do_all exact="$ActionReportKeys.count" counter="$ARK_i">
                  <set_value name="$ActionReportList" exact="$ActionReports.{$ActionReportKeys.{$ARK_i}}"/>
                  <do_all exact="$ActionReportList.count" counter="$ARL_i" reverse="true">
                    <set_value name="$DisregardAction" exact="false"/>
                    <set_value name="$DisregardReason" exact="'UNKNOWN'" chance="$DebugChance"/>
                    <set_value name="$DisregardObject" exact="null"/>

                    <set_value name="$ActionReport" exact="$ActionReportList.{$ARL_i}"/>
                    <set_value name="$ActionReportDef" exact="$ActionReport.$ActionDef"/>

                    <!--CHECK REQUEST_COMMANDEERABLE_FRIEGHTER ACTION-->
                    <do_if value="$ActionReportDef.$Type == '$request_commandeerable_freighter'">
                      <set_value name="$CommandeeredShip" exact="$ActionReportDef.$Ship"/>
                      <do_if value="$CommandeeredShip.isoperational and $CommandeeredShip.isjobship and not @$ActionReportDef.$Disregard" comment="$ActionReportDef.$Disregard can be set in the action handler itself">
                        <!--Ship is still an existing job ship-->
                        <do_if value="player.age ge $ActionReportDef.$CommandeerTime + $Request_Commandeerable_Freighter_Release_Time">
                          <!--Ship is no longer a requested ship. Disregard action report-->
                          <set_value name="$DisregardAction" exact="true"/>
                          <set_value name="$DisregardReason" exact="'Ship is to be released as a commandeered freighter'" chance="$DebugChance"/>
                          <set_value name="$DisregardObject" exact="$CommandeeredShip"/>
                        </do_if>
                      </do_if>
                      <do_else>
                        <!--Ship is no longer a requested ship. Disregard action report-->
                        <set_value name="$DisregardAction" exact="true"/>
                        <set_value name="$DisregardReason" exact="'Ship is no longer a suitable job ship'" chance="$DebugChance"/>
                        <set_value name="$DisregardObject" exact="$CommandeeredShip"/>
                      </do_else>
                      <remove_value name="$CommandeeredShip"/>
                    </do_if>

                    <!--CHECK REQUEST_FREIGHTER ACTION-->
                    <do_elseif value="$ActionReportDef.$Type == '$request_freighter'">
                      <set_value name="$RequestedShip" exact="$ActionReportDef.$Ship"/>
                      <do_if value="($RequestedShip.exists or $RequestedShip.isoperational) and $RequestedShip.isrequestedjobship">
                        <!--Ship is still an existing requested job ship or is an operational ship waiting to be built somewhere-->
                        <!--TODO @Owen - parameters for things such as how long to wait for requested ships-->
                        <do_if value="not $RequestedShip.exists">
                          <do_if value="$ActionReport.$StartTime lt player.age - $Request_Freighter_Spawn_Wait_Time">
                            <!--DISREGARD-->
                            <!--However, the ship still does not exist and it was requested some time ago. Kill and try something else-->
                            <destroy_object object="$RequestedShip"/>
                            <set_value name="$DisregardAction" exact="true"/>
                            <set_value name="$DisregardReason" exact="'Time elapsed and it never existed'" chance="$DebugChance"/>
                          </do_if>
                        </do_if>
                        <do_elseif value="$RequestedShip.isoperational">
                          <!--TODO @Owen, check if actually doing something. Any trade runs?-->
                          <!--<do_elseif value="$ActionReportDef.$LaunchTime lt xxxxs and the situation is around the same or worse">
                          try another frieghter or a more drastic measure?
                          </do_elseif>-->
                        </do_elseif>
                        <do_elseif value="$RequestedShip.isconstruction">
                          <do_if value="@$ActionReportDef.$SpawnTime lt player.age - $Request_Freighter_Build_Wait_Time">
                            <!--DISREGARD-->
                            <!--Ship has not been built yet-->
                            <!--TODO @Owen. Check state of the build. Is it close to finishing? Allow a bit more time?-->
                            <!--TODO @Owen Recycle-->
                            <destroy_object object="$RequestedShip"/>
                            <set_value name="$DisregardAction" exact="true"/>
                            <set_value name="$DisregardReason" exact="'Ship took too long to finish building'" chance="$DebugChance"/>
                          </do_if>
                        </do_elseif>
                        <do_elseif value="$RequestedShip.iswreck">
                          <!--DISREGARD-->
                          <!--Requested job ship is destroyed-->
                          <set_value name="$DisregardAction" exact="true"/>
                          <set_value name="$DisregardReason" exact="'Ship is destroyed.'" chance="$DebugChance"/>
                          <set_value name="$DisregardObject" exact="$RequestedShip"/>
                        </do_elseif>
                      </do_if>
                      <do_else>
                        <!--Ship is no longer a requested ship. Disregard action report-->
                        <set_value name="$DisregardAction" exact="true"/>
                        <set_value name="$DisregardReason" exact="'Ship is no longer a requested job ship'" chance="$DebugChance"/>
                        <set_value name="$DisregardObject" exact="$RequestedShip"/>
                      </do_else>
                      <remove_value name="$RequestedShip"/>
                    </do_elseif>

                    <!--CHECK REQUEST_PRIORITY_FRIEGHTER ACTION-->
                    <do_elseif value="$ActionReportDef.$Type == '$request_priority_freighter'">
                      <set_value name="$RequestedShip" exact="$ActionReportDef.$Ship"/>
                      <do_if value="($RequestedShip.exists or $RequestedShip.isoperational) and $RequestedShip.isrequestedjobship">
                        <!--Ship is still an existing requested job ship or is an operational ship waiting to be built somewhere-->
                        <!--TODO @Owen - parameters for things such as how long to wait for requested ships-->
                        <do_if value="not $RequestedShip.exists">
                          <do_if value="$ActionReport.$StartTime lt player.age - $Request_Pri_Freighter_Spawn_Wait_Time">
                            <!--DISREGARD-->
                            <!--However, the ship still does not exist and it was requested some time ago. Kill and try something else-->
                            <destroy_object object="$RequestedShip"/>
                            <set_value name="$DisregardAction" exact="true"/>
                            <set_value name="$DisregardReason" exact="'Time elapsed and it never existed'" chance="$DebugChance"/>
                          </do_if>
                        </do_if>
                        <do_elseif value="$RequestedShip.isoperational">
                          <!--TODO @Owen, check if actually doing something. Any trade runs?-->
                          <!--<do_elseif value="$ActionReportDef.$LaunchTime lt xxxxs and the situation is around the same or worse">
                          try another frieghter or a more drastic measure?
                          </do_elseif>-->
                        </do_elseif>
                        <do_elseif value="$RequestedShip.isconstruction">
                          <do_if value="@$ActionReportDef.$SpawnTime lt player.age - $Request_Pri_Freighter_Build_Wait_Time">
                            <!--DISREGARD-->
                            <!--Ship has not been built yet-->
                            <!--TODO @Owen. Check state of the build. Is it close to finishing? Allow a bit more time?-->
                            <!--TODO @Owen Recycle-->
                            <destroy_object object="$RequestedShip"/>
                            <set_value name="$DisregardAction" exact="true"/>
                            <set_value name="$DisregardReason" exact="'Ship took too long to finish building'" chance="$DebugChance"/>
                          </do_if>
                        </do_elseif>
                        <do_elseif value="$RequestedShip.iswreck">
                          <!--DISREGARD-->
                          <!--Requested job ship is destroyed-->
                          <set_value name="$DisregardAction" exact="true"/>
                          <set_value name="$DisregardReason" exact="'Ship is destroyed.'" chance="$DebugChance"/>
                          <set_value name="$DisregardObject" exact="$RequestedShip"/>
                        </do_elseif>
                      </do_if>
                      <do_else>
                        <set_value name="$DisregardAction" exact="true"/>
                        <set_value name="$DisregardReason" exact="'Ship is no longer a requested job ship'" chance="$DebugChance"/>
                        <set_value name="$DisregardObject" exact="$RequestedShip"/>
                      </do_else>
                      <remove_value name="$RequestedShip"/>
                    </do_elseif>

                    <!--CHECK REQUEST_PRODUCTION ACTION-->
                    <do_elseif value="$ActionReportDef.$Type == '$request_production'">
                      <set_value name="$Station" exact="$ActionReportDef.$Station"/>
                      <do_if value="not $Station.exists">
                        <!--DISREGARD-->
                        <!--The station no longer exists-->
                        <set_value name="$DisregardAction" exact="true"/>
                        <set_value name="$DisregardReason" exact="'Station no longer exists'" chance="$DebugChance"/>
                      </do_if>
                      <do_elseif value="@$ActionReportDef.$BuiltTime">
                        <!--All productions were finished-->
                        <!--TODO @Owen check if the factory is actually producing?-->
                        <do_if value="$ActionReportDef.$BuiltTime lt player.age - $Request_Production_Working_Timeout">
                          <!--DISREGARD-->
                          <!--Productions have been complete for some time.-->
                          <set_value name="$DisregardAction" exact="true"/>
                          <set_value name="$DisregardReason" exact="'Factory has had the new productions for ' + $Request_Production_Working_Timeout" chance="$DebugChance"/>
                          <set_value name="$DisregardObject" exact="$Station"/>
                        </do_if>
                      </do_elseif>
                      <do_elseif value="@$ActionReportDef.$StartBuildTime or @$ActionReportDef.$LastBuildTime">
                        <!--Some module has begun construction-->
                        <do_if value="[$ActionReportDef.$StartBuildTime, @$ActionReportDef.$LastBuildTime].max lt player.age - $Request_Production_Build_Timeout">
                          <!--DISREGARD-->
                          <!--Factory has been expanding for a long time.-->
                          <set_value name="$DisregardAction" exact="true"/>
                          <set_value name="$DisregardReason" exact="'Factory has been expanding for ' + $Request_Production_Build_Timeout" chance="$DebugChance"/>
                          <set_value name="$DisregardObject" exact="$Station"/>
                        </do_if>
                      </do_elseif>
                      <do_else>
                        <!--Building has not started yet-->
                        <do_if value="$ActionReport.$StartTime lt player.age - $Request_Production_Build_Wait_Time">
                          <!--DISREGARD-->
                          <!--Construction has not started on the factory for a long time.-->
                          <set_value name="$DisregardAction" exact="true"/>
                          <set_value name="$DisregardReason" exact="'Expansion has not started on factory for' + $Request_Production_Build_Wait_Time" chance="$DebugChance"/>
                          <set_value name="$DisregardObject" exact="$Station"/>
                        </do_if>
                      </do_else>
                      <remove_value name="$Station"/>
                    </do_elseif>

                    <!--CHECK REQUEST_FACTORY ACTION-->
                    <do_elseif value="$ActionReportDef.$Type == '$request_factory'">
                      <set_value name="$Station" exact="$ActionReportDef.$Station"/>
                      <do_if value="not $Station.exists">
                        <!--DISREGARD-->
                        <!--The module did exist, but no longer-->
                        <set_value name="$DisregardAction" exact="true"/>
                        <set_value name="$DisregardReason" exact="'Station no longer exists'" chance="$DebugChance"/>
                      </do_if>
                      <do_elseif value="@$ActionReportDef.$BuiltTime">
                        <!--Build has finished-->
                        <!--TODO @Owen check if the factory is actually producing?-->
                        <do_if value="$ActionReportDef.$BuiltTime lt player.age - $Request_Factory_Working_Timeout">
                          <!--DISREGARD-->
                          <!--Factory has been complete for some time.-->
                          <set_value name="$DisregardAction" exact="true"/>
                          <set_value name="$DisregardReason" exact="'Factory has been working for ' + $Request_Factory_Working_Timeout" chance="$DebugChance"/>
                          <set_value name="$DisregardObject" exact="$Station"/>
                        </do_if>
                      </do_elseif>
                      <do_elseif value="@$ActionReportDef.$StartBuildTime">
                        <!--Build has started-->
                        <do_if value="$ActionReportDef.$StartBuildTime lt player.age - $Request_Factory_Build_Timeout">
                          <!--DISREGARD-->
                          <!--Factory has been building for a long time.-->
                          <set_value name="$DisregardAction" exact="true"/>
                          <set_value name="$DisregardReason" exact="'Factory has been building for ' + $Request_Factory_Build_Timeout" chance="$DebugChance"/>
                          <set_value name="$DisregardObject" exact="$Station"/>
                        </do_if>
                      </do_elseif>
                      <do_else>
                        <!--Building has not started yet-->
                        <do_if value="$ActionReport.$StartTime lt player.age - $Request_Factory_Build_Wait_Time">
                          <!--DISREGARD-->
                          <!--Construction has not started on the factory for a long time.-->
                          <set_value name="$DisregardAction" exact="true"/>
                          <set_value name="$DisregardReason" exact="'Construction has not started on factory for' + $Request_Factory_Build_Timeout" chance="$DebugChance"/>
                          <set_value name="$DisregardObject" exact="$Station"/>
                        </do_if>
                      </do_else>
                      <remove_value name="$Station"/>
                    </do_elseif>
                    <do_else>
                      <assert value="false" text="'Unknown action type ' + $ActionReportDef.$Type + ' [Owen]'" break="1"/>
                    </do_else>

                    <do_if value="$DisregardAction">
                      <debug_text text="'Disregarding action with reason: ' + $DisregardReason + ' Action: ' + $ActionReport" context="false" chance="$DebugChance"/>
                      <do_if value="$DisregardObject and $DisregardObject.isclass.component">
                        <!--.isclass.component check as $DisregardObject may be disconnected and .exists may not work-->
                        <signal_objects object="$DisregardObject" param="'factionlogic_econ_disregard'" param2="$ActionReportDef.$Type"/>
                      </do_if>
                      <append_to_list name="$DisregardedActions" exact="$ActionReportList.{$ARL_i}"/>
                      <remove_value name="$ActionReportList.{$ARL_i}"/>
                    </do_if>
                  </do_all>
                </do_all>
                <remove_value name="$ActionReportKeys"/>

                <!--First, check the insufficient production resources-->
                <!--TODO @Owen - deal with ware shortage tables-->
                <set_value name="$ReportTablesToProcess" exact="[$SectorInsufficientProductsTable, $SectorInsufficientWorkforceTable, $SectorInsufficientBuildTable]"/>
                <do_all exact="$ReportTablesToProcess.count" counter="$h">
                  <set_value name="$TableRef" exact="$ReportTablesToProcess.{$h}"/>
                  <!--TableRef keys are sectors-->
                  <do_if value="$TableRef.keys.count">
                    <set_value name="$TableRefKeys" exact="$TableRef.keys.list"/>
                    <do_all exact="$TableRefKeys.count" counter="$i">
                      <set_value name="$Sector" exact="$TableRefKeys.{$i}"/>
                      <debug_text text="'\n' + $DebugText + 'Checking sector ' + $Sector + ' ' + $Sector.knownname" context="false" chance="$DebugChance"/>
                      <set_value name="$SubTable" exact="$TableRef.{$Sector}"/>
                      <set_value name="$SubTableRefKeys" exact="$SubTable.keys.list"/>
                      <do_all exact="$SubTableRefKeys.count" counter="$k" reverse="true">
                        <set_value name="$Ware" exact="$SubTableRefKeys.{$k}"/>
                        <set_value name="$SectorValue" exact="$SubTable.{$SubTableRefKeys.{$k}}"/>
                        <debug_text text="'Sector ' + $Sector + ' ' + $Sector.knownname + ' has insufficient ware ' + $Ware + ' at value ' + $SectorValue" context="false" chance="$DebugChance"/>

                        <do_if value="$SectorNeighbourTable.{$Sector}?">
                          <set_value name="$NeighbouringSectors" exact="$SectorNeighbourTable.{$Sector}"/>
                        </do_if>
                        <do_else>
                          <!--TODO @Owen decypher the comment below-->
                          <!--TODO @Owen This sector does is not owned by this faction but has stations reporting about wares-->
                          <set_value name="$NeighbouringSectors" exact="[$Sector]"/>
                        </do_else>

                        <!--Check if the neighboring sectors have reports for the same ware. Take them into account but with the $InsufficientNeighbourMultiplier-->
                        <!--TODO @Owen - only if positive?-->
                        <do_all exact="$NeighbouringSectors.count" counter="$sector_i">
                          <set_value name="$NeighbourSector" exact="$NeighbouringSectors.{$sector_i}"/>
                          <do_if value="$NeighbourSector != $Sector and $TableRef.{$NeighbourSector}?">
                            <set_value name="$NeighbourSubTable" exact="$TableRef.{$NeighbourSector}"/>
                            <do_if value="$NeighbourSubTable.{$Ware}?">
                              <set_value name="$SectorValue" exact="$NeighbourSubTable.{$Ware} * $InsufficientNeighbourMultiplier" operation="add"/>
                              <debug_text text="'Neighbouring sector ' + $NeighbourSector + ' ' + $NeighbourSector.knownname + ' also has insufficient ware ' + $Ware + ' to add modified value ' + $NeighbourSubTable.{$Ware} * $InsufficientNeighbourMultiplier + ' for a new value of ' + $SectorValue" context="false" chance="$DebugChance"/>
                            </do_if>
                          </do_if>
                        </do_all>

                        <set_value name="$HighestActionCost" exact="0"/>
                        <set_value name="$HighestDisregardedActionCost" exact="0"/>
                        <do_all exact="$DisregardedActions.count" counter="$o">
                          <do_if value="$DisregardedActions.{$o}.$Sector and $DisregardedActions.{$o}.$Ware == $Ware">
                            <do_if value="$ActionThresholds.{$ActionReportDef.{'$Type'}} gt $HighestDisregardedActionCost">
                              <!--This was a disregarded action for this sector, remember how much worth it had so an action of higher worth can be queued-->
                              <set_value name="$HighestDisregardedActionCost" exact="$ActionThresholds.{$ActionReportDef.$Type}"/>
                              <debug_text text="'Disregarded action had the highest cost so far of ' + $HighestDisregardedActionCost" context="false" chance="$DebugChance"/>
                            </do_if>
                          </do_if>
                        </do_all>

Lymark
Posts: 39
Joined: Thu, 10. May 18, 19:35
x4

Re: X4 - Just a faked economy?

Post by Lymark »

It seems like the 'war settings' of the game is currently set to very low, according to a dev on steam forum here.
https://steamcommunity.com/app/392160/d ... 8793267217
marksnake
Posts: 64
Joined: Fri, 24. Jul 15, 11:02
x3ap

Re: X4 - Just a faked economy?

Post by marksnake »

Lymark wrote: Wed, 5. Dec 18, 22:00 It seems like the 'war settings' of the game is currently set to very low, according to a dev on steam forum here.
https://steamcommunity.com/app/392160/d ... 8793267217
A guy from the german forum posted that he was cheating 1 billion credits...then he ordered a lot of big ships in Argon Prime. Market was dead there before.

What happened ?
Traders began to deliver recources...the traffic was massive in AP.
So...without wars there is no demand for resources...however, the system seems to be dynamic.
ScandyNav
Posts: 321
Joined: Wed, 6. Nov 02, 20:31
x4

Re: X4 - Just a faked economy?

Post by ScandyNav »

Ok, the econimy may be really good simulated. But we are all agree that claim wars are broken ATM and this make economy dead within 10 or so hours. Coz end product - ships, are not consumed.
marksnake
Posts: 64
Joined: Fri, 24. Jul 15, 11:02
x3ap

Re: X4 - Just a faked economy?

Post by marksnake »

Yes, the conflict simulation seems to be unfinished or totally missing. Don`t know whats going on there.
Zealoth
Posts: 125
Joined: Tue, 15. Dec 09, 15:44
x4

Re: X4 - Just a faked economy?

Post by Zealoth »

I really hope Egosoft will take this opportunity to make Xenon into the menace they are in lore. No more sitting in few and far between sectors.

Now Xenon should push with organised invasions now and then (as they build up)

It would be a pretty interesting diplomacy wise too. Do the factions backstab eachother and risk weakening/loosing their buffor for immediate territory gain? Their full stockpiles of shipbuilding materials really are fuealing the warmongers...
Or they build a coalition to fight off the expansion?

It would be an amazing sink for the economy. I beg you, please don't ruin this amazing system by just deleting the end wares.

You could also have civillian stations as sinks - you already have a worker system that sinks food and medicine - the civilian stations could work as population centers and take all the final (or semi-final wares - whatever makes missile parts - as those dont really make sense as consumer items) and use them up - for their consumer needs

They could provide some other benefits for the resources they consume (for example tax income to the player? Manpower for factions?), a sensible build station mission target (with a choice to either keep em for tax or sell em for chunk change. Also a nice place to train and recruit crew?

I went on a leg here lol
Zippo342
Posts: 410
Joined: Fri, 31. Mar 06, 20:07
x3tc

Re: X4 - Just a faked economy?

Post by Zippo342 »

I'd like to see the Xenon or Kha'ak start invading based on a story line mission trigger, causing a massive war in various systems. The player is required to intervene to possibly beat back the invaders, and the war doesn't stop after that.

Basically, before a mission trigger, the universe is safe for everyone, so new players can get used to things. After the trigger, all hell breaks loose, and the economy really starts rolling, or not (if the races are losing)
Streaming most nights 1800-0000ish at www.twitch.tv/chthonicone/
Kadatherion
Posts: 1021
Joined: Fri, 25. Nov 05, 16:05
x4

Re: X4 - Just a faked economy?

Post by Kadatherion »

The problem with balancing the dynamic war - that lead them to set it up at launch with such a conservative behaviour almost nothing actually happens - is that on average you have to keep the status quo in your game universe. Yes, I might like more aggressive Xenons, but if they consistently conquer Commonwealth sectors that can destroy the economy as well and limit the freedom of the player, and several other players may prefer to play a more peaceful playthrough. Basically, you have to average it the best you can so that nothing extreme happens *UNLESS THE PLAYER HIMSELF WANTS*. Meaning we'd need very heavy fighting on border regions, and yet no real chance of steamrolling (IE: if Xenons having 1 sector have enough resources to fight on par with the Argons for an extended lenght of time without succumbing, when they happen to conquer another sector they can't get double the resources, or the Argons are going to vanish soon after). This is fairly easy to do in a non dynamic environment, it's a nightmare in a dynamic one.

It' a very, very fine balance line you have to find, and sometimes it's basically impossible, hence why really dynamic wars have most often been more at home in the realm of modding, where their objectively limited percentage of the playerbase has already chosen they are ok with potential chaos, by downloading and installing the mod itself. Remember, a dev has to find the middle ground, the compromise between very different playstyles when it comes to sandbox games.
Kulin
Posts: 145
Joined: Thu, 13. Mar 03, 15:51
x4

Re: X4 - Just a faked economy?

Post by Kulin »

Kadatherion wrote: Thu, 6. Dec 18, 12:40 The problem with balancing the dynamic war - that lead them to set it up at launch with such a conservative behaviour almost nothing actually happens - is that on average you have to keep the status quo in your game universe. Yes, I might like more aggressive Xenons, but if they consistently conquer Commonwealth sectors that can destroy the economy as well and limit the freedom of the player, and several other players may prefer to play a more peaceful playthrough. Basically, you have to average it the best you can so that nothing extreme happens *UNLESS THE PLAYER HIMSELF WANTS*. Meaning we'd need very heavy fighting on border regions, and yet no real chance of steamrolling (IE: if Xenons having 1 sector have enough resources to fight on par with the Argons for an extended lenght of time without succumbing, when they happen to conquer another sector they can't get double the resources, or the Argons are going to vanish soon after). This is fairly easy to do in a non dynamic environment, it's a nightmare in a dynamic one.

It' a very, very fine balance line you have to find, and sometimes it's basically impossible, hence why really dynamic wars have most often been more at home in the realm of modding, where their objectively limited percentage of the playerbase has already chosen they are ok with potential chaos, by downloading and installing the mod itself. Remember, a dev has to find the middle ground, the compromise between very different playstyles when it comes to sandbox games.
I think there should more things then wars that deplete resources. Random Events would be another thing, triggered by some kind of Rimworld Style Storyteller-AI.

Or maybe they could think about some kind of decay. If a ship is not used for a long time, for its main purpose, let it break down. In that way the AI is steadily rebuilding ships, even in times of peace. Should not happen to the player, obviously. :D

Or we should add some kind of base consumption. I'm sure any kind of civilization uses stuff like high tech wares for more things then ships. So just - from time to time - remove some stuff from those end-of-the-supply-chain factories.
Kadatherion
Posts: 1021
Joined: Fri, 25. Nov 05, 16:05
x4

Re: X4 - Just a faked economy?

Post by Kadatherion »

Kulin wrote: Thu, 6. Dec 18, 12:57I think there should more things then wars that deplete resources. Random Events would be another thing, triggered by some kind of Rimworld Style Storyteller-AI.

Or maybe they could think about some kind of decay. If a ship is not used for a long time, for its main purpose, let it break down. In that way the AI is steadily rebuilding ships, even in times of peace. Should not happen to the player, obviously. :D

Or we should add some kind of base consumption. I'm sure any kind of civilization uses stuff like high tech wares for more things then ships. So just - from time to time - remove some stuff from those end-of-the-supply-chain factories.
Indeed, if the dynamic system shows it can't be made to work reliably enough, we are going to need resource sinks even if that means being a bit less faithful to the "simulation". After all, gameplay > realism. I mentioned that already several times, as well as events that could work both as features to spice up the gameplay and as more immersive resource sinks as well (I suggested them in the Galaxy News topic, another staple of the genre that indeed was many times in the past used for such goal).

Granted, this system is ambitious, and before throwing the towel it's only sensible to see how far we can push it before having to fall back into more trusted and familiar territory.
Grimmrog
Posts: 299
Joined: Thu, 6. Dec 18, 13:17
x4

Re: X4 - Just a faked economy?

Post by Grimmrog »

Maybe AI trading has less effect because AI trades poorly, and even until the patch even traded for loss.
Bad choices might just have a less proper impact than manually doing a proper one.
Zealoth
Posts: 125
Joined: Tue, 15. Dec 09, 15:44
x4

Re: X4 - Just a faked economy?

Post by Zealoth »

Kadatherion wrote: Thu, 6. Dec 18, 12:40 The problem with balancing the dynamic war - that lead them to set it up at launch with such a conservative behaviour almost nothing actually happens - is that on average you have to keep the status quo in your game universe. Yes, I might like more aggressive Xenons, but if they consistently conquer Commonwealth sectors that can destroy the economy as well and limit the freedom of the player, and several other players may prefer to play a more peaceful playthrough. Basically, you have to average it the best you can so that nothing extreme happens *UNLESS THE PLAYER HIMSELF WANTS*. Meaning we'd need very heavy fighting on border regions, and yet no real chance of steamrolling (IE: if Xenons having 1 sector have enough resources to fight on par with the Argons for an extended lenght of time without succumbing, when they happen to conquer another sector they can't get double the resources, or the Argons are going to vanish soon after). This is fairly easy to do in a non dynamic environment, it's a nightmare in a dynamic one.

It' a very, very fine balance line you have to find, and sometimes it's basically impossible, hence why really dynamic wars have most often been more at home in the realm of modding, where their objectively limited percentage of the playerbase has already chosen they are ok with potential chaos, by downloading and installing the mod itself. Remember, a dev has to find the middle ground, the compromise between very different playstyles when it comes to sandbox games.
I think you could implement a system like EU4 has, where if you get steamLOLing too hard too quick suddenly everyone is like "The great pact of stomping this to the ground". It would make sense that if Xenon are pushing in too hard for other factions to put away their differences and fight for their survival over petty faction squabbles. It would make building stations near disputed regions way more...exciting, as you'd be making a LOT of money supplying the war effort and station rebuilding, but then again had to live with a risk of Xenon expeditionary force catching whiff of your manufacturing complex and organising a raid against it. It would also make the player have a lot more stake in the game.

And make a new faction/use HOP as one that is only interested in total conquest so the player can just join the dark side and pick a fight with everyone. Bonus points if that means extra Xenon expansion since the "light side" can no longer defend properly

One can dream :idea:

Return to “X4: Foundations”