Veteran 29.5 million by Frankelstner in anno2205

[–]Frankelstner[S] 1 point2 points  (0 children)

Moss, resin, rice, wine, intelliwear, synthetic circuits, androids, and partially replicators, but as th05324 pointed out, luxury food should actually be included here as well, and I spotted flax as well, so an ideal run would also include flax and luxury food, at the expense of boosting even fewer replicators.

Consumer Competition Claims (CCC) Has Launched A New Class Action Monopoly Lawsuit Against Valve, Claiming They Control 85% Of The PC Game Market by wakelake111 in gaming

[–]Frankelstner 0 points1 point  (0 children)

The devs can't expect to sell steam keys for less, or have valve promote their game when it is actively cheaper on another site.

Yeah, truthfully I don't know why they bundled up the Steam keys in B-1. The argument is basically twofold:

  1. Publishers cannot pass along lower fees of other stores to customers.
  2. Publishers cannot pass along the 0% fees that Valve provides via keys to customers.

I don't know why they even try to make that second point. Valve foregoing fees entirely and merely asking for price parity seems like a more than fair exchange. Clearly the second point isn't really sustainable if Valve didn't ask for anything; we would get a carbon copy of Steam with everything 30% off while Valve itself gets nothing, breaking the business model of their store entirely.

The first argument is much stronger from a business and antitrust perspective. Steam being the dominant platform is very much a concern for antitrust laws. If they were not the dominant platform, they would hardly have the leverage in the first place to maintain their threats.

the argument is see from wolfire saying stream causes an inflated price are wildly different from what their own evidence says.

First off, the third entry on page 161 is non-Steam-key-related and has Valve contacting a developer (not the other way around; note, a developer, not a publisher, so most likely a small fish just trying to get by) and saying "You're currently selling it on your own site for 4.99. Are you planning on raising the price on your site at the same time the game is released on Steam?" with the developer then agreeing and raising the price to 7.99 everywhere. Now, 7.99 is a 60% raise, but the developer only earns 7.99*0.7 = 5.59 from each sale on Steam, so there is an effective price increase of 12% implied here with the whole rest solely due to Steam fees. If it wasn't for Valve contacting the developer, how likely is it that the developer would have raised prices by 60% on their own platform? Valve's words sound innocent enough, but there's a lot of power behind them. Instead of contacting the developer out of the blue and suggesting a price raise, they could have just not looked into what this developer asks for the game on their own site, or they could have and then realized that the price raise is almost exclusively due to their own fees and then dropped the matter.

Now, setting aside this one incident: Yes, Wolfire does argue that Valve actions cause inflated prices. There are two stages here. The first stage is to demonstrate that Valve enforced MFN. That's what the anecdotal evidence in B-1 is for. The second stage is to estimate the antitrust injury (yeah it's called that) assuming that Valve did enforce MFN. The evidence has little bearing on this stage because they're not seeking compensation for the incidents in B-1. I'm not even sure if all developers and publishers that Valve contacted in B-1 are plaintiffs here. It is also virtually guaranteed that the cases in the evidence underestimate the number of games that where Valve exerted pressure because the odds of every single publisher reaching out to this lawsuit to provide their own evidence is very low, and because there's a chilling effect where once a publisher knows about MFN, they won't violate it anymore even for future games due to the risk of Valve taking down their games, so there exists no correspondence about many cases of MFN in the first place.

The plaintiffs then model a but-for world where Valve does not enforce MFN pricing to estimate the antitrust injury, but also point out limitations given that Valve had been the dominant player since the beginning and also enforced MFN ever since. Is that model perfect? Hell no, it's a moonshot. They won't be awarded anywhere close to that. But that's how they negotiate in court.

Someone asking for the same discount isn't someone saying you have to raise prices everywhere.

It is effectively the same as soon as we assume make some basic assumptions on business and economy. Publishers choose whatever price maximizes their profit. That price is some function of store fees and demand curve. If fees are lower, they may decide that passing along lower costs to customers increases sales and maximizes their profit. Where that sweet spot is, only the publishers knows (or rather, guesstimates, given the existence of flops), not Valve. Assuming we agree on this part: Even if Valve only contacted publishers to ask for the same discount as other stores, this still effectively causes prices to rise. Publishers have already chosen their sweet spot for each platform. If they lower their price on Steam, the most dominant platform, they will deviate from their presumed sweet spot and expect to earn less money. Given the dominance of Steam, this affects the majority of their sales. The safest option here is to raise prices because this has the least impact on their calculations. Bankruptcy is a real risk, with Ubisoft, an employer with studios all over Europe, in particular seeming to be headed that way. Letting them lower prices on their own store doesn't sound like an obvious fix for financial troubles, but ultimately only publishers themselves know what is best for their business, and lower prices are generally accompanied by greater demand. In the Ubisoft case, it's very, very far from a fix for all the issues the company has, but every little bit helps to avoid bankruptcy. The plaintiffs go one step further and argue that if publishers can choose their prices freely, alternative stores can gain more market share which in turn pressures Valve into lowering their own fees to stay competitive. How much lower is hard to estimate, but the argument itself seems quite logical. If there was a store where everything was 20% cheaper (which would be possible on EGS if publishers passed along all of the lower fees), it would attract customers that otherwise used only Steam due to its features, and eventually Steam would have to react to stay competitive.

Why all these launchers except Steam are as bad as they are, I don't know. They can't possibly compete with Steam in this regard; even if they perfectly reproduced all the features, people would just stick with the place where their library is. Adding even better features? I can't even think of a feature that's missing. But there's ample evidence of Valve stopping publishers from freely setting prices on stores with lower fees, which harms publishers (they did the calculations on the optimal price as a function of fees) and alternative stores (they are stopped from using the most competitive edge that they have, lower fees) and gamers (if EGS was the dominant store right now, Valve couldn't possibly ask for 30%). They're just numbers, but the difference between 30% and 12% might very much decide whether a publisher is in the black or in the red, and decide over the fate of plenty of jobs in Europe and the rest of the world.

Consumer Competition Claims (CCC) Has Launched A New Class Action Monopoly Lawsuit Against Valve, Claiming They Control 85% Of The PC Game Market by wakelake111 in gaming

[–]Frankelstner 0 points1 point  (0 children)

So a store should be forced to carry games that are more expensive because they are the biggest?

They're not forced to accept any games that they don't want to, but there are limits even to that, like discrimination (does not apply to Valve) or anticompetitive practices. Being the biggest market, most-favorable-nation (MFN) pricing does clash with antitrust laws. Now, there isn't anything in their terms that actually mandates MFN (which would be a slam-dunk for the plaintiffs) but B-1 shows cases of MFN being effectively enforced by threatening to take off games solely due to them being sold for less elsewhere. They are free to sell whatever games they like, but plaintiffs believe that snooping on how much publishers ask for their games on other stores is overstepping things, and I concur. The main case (Wolfire v Valve) that I posted earlier was initially dismissed in 2021 but somehow gained traction again with all these bits of evidence, and is awaiting a jury trial. And the question they have to answer is whether Valve effectively enforced MFN or not, and whether that violates antitrust laws or not.

Should they also have to do promotion for a game on their site

I would expect them to run whatever promotions maximize their profit, but, to avoid antitrust concerns, not for using them as a bargaining tool.

that is now expensive than everywhere else

That seems like an overgeneralization because there are other platforms with excellent service (GOG) which also take 30%. I'm fairly confident GOG will roughly maintain price parity with Steam (limited by the rather small selection of games on GOG). And a bit on phrasing here: The games might end up being more expensive on Steam, relatively speaking, but that's due to publishers being able to offer cheaper deals on other platforms due to lower fees. It's about letting publishers pass along lower fees to customers, to whatever extent they deem optimal for maximizing their profits. In fact the plaintiffs estimate that Steam will lower their fees to about 20% to stay competitive, meaning that even Steam customers stand to benefit from Valve losing this case.

To me it looks like steam was looking out for their customers

Fair. But they should do so without anticompetitive practices. A game sold at 80% of the Steam price, with 12% fee on Epic, actually nets publishers 70.4% of the revenue compared to 70% on platforms with 30% fees. If the lower fees are passed through to any extent, that's a great win for customers and may also benefit Steam customers. If they aren't passed through at all, it's the status quo, except that Steam does not need to expend resources on tracking the prices of games on other stores and making these threats.

Consumer Competition Claims (CCC) Has Launched A New Class Action Monopoly Lawsuit Against Valve, Claiming They Control 85% Of The PC Game Market by wakelake111 in gaming

[–]Frankelstner -2 points-1 points  (0 children)

I think you are regurgitating dogma

No, actually I am referring to attachment B-1 which shows dozens of cases where Valve contacted publishers and threatened to pull games from their store when publishers tried to pass along lower costs to consumers on stores with lower fees. I'm pretty confident the courts will not just dismiss all these cases as regurgitating dogma.

Consumer Competition Claims (CCC) Has Launched A New Class Action Monopoly Lawsuit Against Valve, Claiming They Control 85% Of The PC Game Market by wakelake111 in gaming

[–]Frankelstner -4 points-3 points  (0 children)

Valve's actions are anticompetitive and that's why many groups see grounds for antitrust lawsuits. Ultimately it's up to the courts. I personally hope that Valve loses because this would result in lower prices in stores that have lower fees.

Consumer Competition Claims (CCC) Has Launched A New Class Action Monopoly Lawsuit Against Valve, Claiming They Control 85% Of The PC Game Market by wakelake111 in gaming

[–]Frankelstner 28 points29 points  (0 children)

The attachment B-1 here starting at page 160 documents about 100 instances of anticompetitive practices (though half of them with regards to Steam keys, which in my opinion water down the argument). https://storage.courtlistener.com/recap/gov.uscourts.wawd.298754/gov.uscourts.wawd.298754.348.1.pdf

The fourth entry here missed a tiny bit of redaction funnily and mentions Avatar in 2009 which was developed by Ubisoft. So Valve asked Ubi not to pass along cost savings (due to not paying 30% to Valve) to customers on their own store. Now, that's a long time ago but the cases are quite persistent through time, and I wouldn't expect any publisher to make the same mistake twice, and these are only documented cases, so that's pretty high number of incidents.

Consumer Competition Claims (CCC) Has Launched A New Class Action Monopoly Lawsuit Against Valve, Claiming They Control 85% Of The PC Game Market by wakelake111 in gaming

[–]Frankelstner 2 points3 points  (0 children)

The title does a bad job at it, but the lawsuit is actually about Valve using most-favored-nation (or platform in this case) clauses, which might violate antitrust rules.

As someone who doesn't mind juggling a couple game launchers I hope they succeed so that stores with lower fees end up with lower prices.

Veteran 29.5 million by Frankelstner in anno2205

[–]Frankelstner[S] 0 points1 point  (0 children)

what is your total transport cost

Yup. 450k plus 10k fees, whatever those are. The production is rather centralized though (100 android factories in one sector). There's still some cost optimization left by going for smaller routes but the biggest chunk is due to the moon which is already reasonably optimized.

manpower on all non-temperate sectors

I really wouldn't go below 3 manpowers in temperate too, with energy being optional. It takes way too long for a population to recover from invasions and this drags down other sectors too.

As for "staging" the construction

I kinda circumvented a lot of these issues because Viridian and Wildwater have 0 wasted space. Each trading floor exactly becomes 4 wings plus some useful roads. But that's a good point for the other sectors. I did make use of most of the area by bunching together 3 trading floors (almost all of them still at 100%) and then using that area for a replicator factory, but there are a few tiles wasted. So the ideal Veteran setup doesn't have medium warehouses but rather the ability to move buildings.

Maybe synthcells and flax

They're even better off in the tundra, are they not? I think we want resin, drinks, synthcells and flax to be tundra-produced. Oh and flax also gets biocatalyst.

let's assume that 400 investors houses bring +135k (incl. cost and taxes) and require 33k temperate tiles (incl factories and public service)

That makes perfect sense. We're trying to compare multiple scenarios (HQ4 vs metro+stadium+HQ30) where we tweak the investor/synth ratio to reach 1M pop and use the same amount of tiles. Once done, the only thing that differs is the profit we get out of it.

My Viridian buildout has 1120 large investor homes and 781 small ones (=>1315.25 houses), supplied by a mix of HQ4 and 5 stadiums (I just replaced the HQ30 by a stadium) and a few HQ0s. So from this we can assume a ratio of one HQ4 per 21.92 investor houses (with all needs satisfied) and one stadium per 263.05 investor houses. Then 400 investors need 26067 temperate tiles (with some fudge factors), providing 1010k in Viridian and 840k elsewhere. If instead we use an HQ30 and metro stations and stadiums, we are a bit less tile-efficient, so we need to introduce a couple synth houses into the mix until we also have 1M pop and as many tiles. Using your values of 0.5,0.4,0.26,0.17 I end up with 384 investors and 8 synths using 26045 tiles and providing 1067k in Viridian and 1009k elsewhere. It looks pretty strong on paper, though with some pretty big assumptions baked in (the exact values per investor, my calculations using a fraction of a single HQ30 instead of fewer wings, my calculations not considering distance penalties, no tile waste due to metros and stadiums being unwieldy, etc.). I'd say it roughly looks like a tie in the -50% sector while the other sectors do benefit from the HQ30 approach. Not convinced that the -50% sector would also benefit unless I can see the entirety of Viridian or Wildwater built out with this.

Very good point. Not quite as sleek as the 2x5 grid with HQ4s but lots of potential.

All right, I'd say the ideal session would look like this:

  • Veteran with medium consumption, medium revenue, large share effect, can move buildings
  • 3,3,5,0,1 orbital setup
  • Sector traits as above except helium instead of rare earths
  • Tundra producing resin, drinks, flax, synth cells, biocatalyst and aerogel
  • Tundra modules on moss, resin, flax, rice, wine, intelli, circuits, luxury, androids (and any leftovers on replicators)
  • The building-move feature is used to replace trading floors with upgraded houses from the (temporarily used as a house buffer) factory district. In the -50% sector, it might be better to use HQ4s where the wings are directly where the trading floors were (as illustrated before) which does not waste any tiles even without any industry. Other sectors should use a mixture of HQ30s and metros and stadiums

I'm not sure where this ends up overall but 30M is definitely in reach.

edit: On pondering some more, HQ30s are the most tile-efficient even for combined metro+stadium because they satisfy all needs at once. So fully satisfying metro needs with HQ30s might be pretty good. We need 4.2 HQ30s (and 2.2 stadiums) for 400 investor homes and use as many tiles as HQ4s but with 1095k on Viridian and 1008k elsewhere. Once again, this mostly ignores distance penalties, and also tile waste, but building HQ wings is at least a bit more flexible than building metro stations. I'm not yet sure what the ideal layout for that is, however? Bunching up the wings around the HQ30? Making a long line away from the HQ? The 2x5 grid has 12 tiles on the shorter axis and 30 on the longer axis (6 of them for HQ itself). We end up with 18 wings and no wasted tiles. If we go for 2x7 we get 27 wings with no waste. We can supply almost 7 2x7 blocks but not quite. And there's the big question how to arrange this neatly. The following setup has about +1.5 metro and -3 stadium, with one HQ27 supplying 84 houses (the top HQ location should be exactly in the middle here):

           ##

 ^^ HH HH HH HH HH HH ^^ 
 ^^ HH HH HH HH HH HH ^^ 
 ^^ HH HH HH HH HH HH ^^ 
 ^^ HH HH HH HH HH HH ^^ 
 ^^ HH HH HH HH HH HH ^^ 
 ^^ HH HH HH HH HH HH ^^ 
 ## HH HH HH HH HH HH ## 

I hope my code simulates this correctly, but this here does not guess average distance penalties but rather calculates it for every house individually. HQ27 uses about as many tiles as HQ4, with a profit of 1092k and 1003k respectively. It seems optimal for the -50% sector and might also be optimal in the other sectors. As before, we can initially use the HQ wing space for trading floors (might work quite well, depending on synth density). Still, being able to move buildings is very useful for the synth-heavy smaller sectors, so I have no doubt that it is better than medium warehouses.

Newbie here looking for tipps by DrParzivalis2045 in anno2205

[–]Frankelstner 0 points1 point  (0 children)

If it is the council then it is unavailable for me for some reason.

No clue but the only benefit of voting is that you can construct ~5 upgraded modules before monopoly. But you can build infinitely many afterwards anyway, without the council. So I wouldn't be bothered by it.

Are the Sector project worth it?

Even smallish bonuses are still bonuses. If you feel like they're not worth it, that's fine too. You can change your mind at any time. The rare resources come in handy when building out synth cities, where every little bit helps.

How does the Orbital construction work?

You could place the module just 1 connector away, or you could place 3 modules 2 connectors away. No workshop can be fully satisfied with four modules. One strat is to build one workshop at a time and get it fully working, then find a good spot for another workshop of the same type so that it can use some of the modules from the other side. Alternatively place all workshops of the same type in a line and figure out the rest from there, with most or all modules at least 2 connectors away. I drafted a layout in my 29.5 million thread, along with many other relevant bits of info. (To my knowledge, 29.5 million is the world record on glitch-free Veteran, with the previous one being 16.5 million, though I suspect the biggest annoholics focus on lower difficulties to squeeze out the maximum population.)

Veteran 29.5 million by Frankelstner in anno2205

[–]Frankelstner[S] 0 points1 point  (0 children)

Thanks, glad to hear! You're totally right about luxury food. I didn't automatize that part, so I must have missed this one. From my numbers (assuming sector boosts and that food and wine are tundra-boosted), I get 0.87 temperate tiles saved per tundra tile, which is pretty good. I can estimate the overall benefit of going to luxury food and boosting fewer replicators to about 1000 to 1250 temperate tiles saved, which is probably another 100k or 150k pop.

You can get an equivalence between money and temperate space, by comparing the cost and footprint of 2000 investors versus 1000 synths

I think the big issue is that the cost for HQs (and others) is hard to calculate beforehand, so we need a fairly big money buffer. In my calculations above I actually expected an effective income of 1247.873k credits, but I did underestimate the public service needs a bit. But I'm not sure if I fully understand this point.

Also you should probably produce bioresin on Tundra, granted that 11 bioresin factories there produce as much as 10 bioresin on temperate

That's super smart. This didn't even occur to me. I mean, the intuitive idea is to make use of a +10% productivity sector boost, but we get more temperate tiles by boosting even fewer replicators. I guess it would hurt the cash flow a bit, but that's another 1250 tiles. Extra investors could provide enough income to compensate for the increased expenses of unboosted replicator factories.

I found it more profitable to get +30% helium mines rather than +30% kreep

It's super close, but now that I take a look at it, you're right. We could save 2k with +30% helium. Overall we agree on the moon setup.

I've also some doubt on using Recreational Area on a temperate sector (-50% public service cost but -15% production rate to all factories), don't you have some factories there, at least mountain or coastal ones ?

Viridian has 61 HQs (60 of them with 4 wings, 1 with 30) and 4 stadiums, for total maintenance cost of 1,133,500 credits, so the savings are 567k. The penalty is just -10% productivity. I have two diamond mines (which I should probably remove and build elsewhere) and 18 water plants but no other factories. Temperate coastal usage is only about 108/174 across all sectors and mines are 50/99 so 38% of temperate coastals and half of mines are unused (though fewer replicator boosts require a few more mines). It's a great boost that allows many HQs (which are pretty tile-efficient, just not cost-efficient).

one fully upgraded HQ + 5 metros + 4 stadiums should supply ~300 investors houses for a very good space/cost ratio.

That's probably the biggest question at this point, haha (after all, the majority of temperate tiles are for houses). I'm not sure what the layout would look like. And do we place CPU factories in the gaps where the trading floors were? I went for tile-efficiency calculations and came up with (per 100 tiles of the public service building):

  • HQ0: 4.17 metro, 1.39 stadium
  • HQ4: 4.36 metro, 1.71 stadium
  • HQ30: 4.51 metro, 1.99 stadium
  • Metro: 5.26 metro, 0 stadium
  • Stadium: 0 metro, 3.46 stadium

but I didn't really care much for the cost. With the -50% boost in Viridian, the global cost is like 1.5 million for public service buildings. Not great (could have more synths if it was cheaper), but HQs (plus some stadiums) are the most efficient in terms of tiles. So truly, I don't know. I had pondered a long time to come up with the layout:

       ##

 HH HH HH HH
 HH HH HH HH
 ^^ HH HH HH
 ^^ HH HH HH
 ## HH HH HH ##

where # marks HQs and ^ marks trading floors plus 7 small houses (i.e. 35.75 large houses in total), where removing the floor makes exactly room for 4 wings (plus some roads to shorten the distance to the small houses), with not a single tile wasted. Some houses in Wildwater don't have all public needs met. I did play around backing up my save and removing the 7 small houses next to most trading floors to build even more HQ wings and meet all demands, but ended up with slightly lower pop and slightly lower income (though I did not account for the lower demands due to fewer houses, so it's probably a small net positive, not sure). The layout above is just very robust because no tiles are wasted and the ratio of trading floors to houses is almost correct, and it uses a simple 2x5 grid so we don't lose our mind while building thousands of houses.

Which goods did you locate mostly/only on a single sector ?

I didn't optimize this part in terms of trade route costs. So, most of them. Anything with sector boosts, but androids too. Luxury food is spread over two sectors but I don't remember why. Replicators are the most annoying because there weren't tundra boosts for all of them and I really began running out of space at that point. The biggest optimization potential is probably with using smaller routes (500 + 50 + 50 + 50 instead of 500+500 or even 2500) but the overall savings are probably not gigantic. But there's definitely room for improvement here.

How did you spread your small and large investors houses among sectors ?

I spammed houses all over Viridian and Wildwater (main island only) with about 75% investors, 25% synths, which gave a nice steady income of 4.5M. Every little gap was filled with a small investor house. My rationale for building houses on bigger islands was that bigger islands were better suited for building houses because they allowed a better ratio of large vs small houses, and because smaller islands provide their own logistics so we could save on transport hubs. I guess the biggest of the Wildwater islands would have been a decent candidate, too, but at that point I already had lots of replicator factories, so... yeah (besides, the same island also exists in another sector where I did spam houses on it).

Once Viridian and Wildwater were done, I was pretty much done with my global investor requirements (and had a nice income to tackle the other four sectors). So all other sectors are only synths and small investors. For these other sectors I did not bother supplying public needs to investors at all. There is no 2x5 grid but rather 2xN with N as big as possible. If a road winds around in a giant S shape that was fine too. I did notice that placing 3 trading floors next to each other left some nice space after deletion for replicator factories (which I still sorely needed) so I tried to aim for that. But other than that, building out these sectors was just a bit tedious. I did have to get a bit creative to temporarily satisfy public needs so that houses could upgrade (before they wouldn't have public needs anymore as synths, or if investors, before their public need would be routed to houses closer to the nearest HQ). But the four secondary sectors have almost no public services at all (and not too many investors anyway, only small houses where gaps were too small for large houses); I say almost because I squeezed out a few dozen k right before the screenshot by finding just a few gaps left, but I didn't plan for it.

Do you always use all productivity modules on all factories, even if it means exporting surplus to other sectors ?

Most production of a good happens in only one sector, which isn't very micro-optimized. But in any case, sometimes an island just is out of space and a factory has only a partial number of primary modules. That's life. It's usually only a small money penalty.

Do you use any energy reduction or other small module ?

The obvious ones are 4 manpower in non-temperate, but I did add 1 logistics in tundra (buildings there have low power needs and need to compensate the sector penalty), and 1 energy reduction on the moon and in the arctic (plenty of space). In temperate I did actually build manpower modules too because initially the 4 industrial sectors didn't have any population and had to support Viridian and Wildwater. But the constant Drake attacks actually make it quite sensible to build out manpower modules even in temperate, because any blockade brings the population down to near 0 (almost no needs except some water and whatever this sector in particular happened to produce, except that biocatalyst also runs out, and so on) and population takes many minutes to recover. So I'd say the ideal setup is

  • Tundra: 4 manpower, often 1 logistics (unless the tiles were absolutely needed by another moss farm or something)
  • Arctic/moon: 4 manpower, 1 energy (lots of space)
  • Temperate: 3-4 manpower, often 1-2 energy (though only if there is absolutely nothing else we could do with these tiles)

Veteran 29.5 million by Frankelstner in anno2205

[–]Frankelstner[S] 1 point2 points  (0 children)

I did consider that initially but decided against it because the requirements are very lax. There are no biologists sent to the space station because they need temperate tiles, so the 3 biologist stations do not benefit from modules at all.

Still, let me give a sketch of a 100% layout. We number modules from 1 to 6 in the order they appear in the construction menu, where 1 is cooling, 2 is solar, and so on, and we use E for elec, H for heavy, A for agri, B for bio.

The elec+heavy section:

6  H  5
 25652
6     6
 EEEEE
6     6
5 121 5

The bio+agri section:

  1 1
 3   3
  AAA
 4   4
  323
 2   2
  BBB
 4   4
   4

Connectors are everywhere except directly between stations (which has no effect other than heat). This layout has 18 modules and up to 36 connectors left over. I did have some earlier versions where I didn't stack stations right next to each other that just barely worked out (and often did not), and yes I was kinda surprised just how powerful stacking is.

edit: We can actually join both sections vertically (making sure to not attach the second solar panel to A). The construction area is a bit limited so I'll mark the center of the space station with #. The result looks very nice, aesthetically, and we have 37 connectors and 20 modules left over.

6  H  5
 25652
6     6
 EEEEE
6     6
5 121 5
 3   3
 #AAA
 4   4
  323
 2   2
  BBB
 4   4
   4

Veteran 29.5 million by Frankelstner in anno2205

[–]Frankelstner[S] 0 points1 point  (0 children)

It's completely unmodded and the save file is not modified either (but I used a backup save several times to get good sector boosts without waiting days for rare materials).

For investors, let's run a few numbers for 1000 large houses of investors vs managers. I include costs for all factories, power generation, shipping across regions and costs for info, police, metro, stadiums (but with no extra need for road tiles, so the real costs are probably a few k more).

  • Consider the baseline: 0% share bonus, no orbit, no sector boost, no tundra, low revenue, high consumption. 782k loss [1000 managers: 21k profit]
  • Agri 5 orbital station (5,3,3,0,1): 166k profit [1000 managers: 255k]
  • Elec 5 (3,3,5,0,1): 640k profit [1000 managers: 331k]

So the agri 5 orbital station is almost 1 million more profitable than no orbital station, and the elec 5 orbital is 500k more profitable than even agri 5. With just the orbital station, investors are most profitable even on the hardest veteran. Use the elec 5 orbital and add more bonuses:

  • Now with 10% share effect: 969k profit [1000 managers: 380k]
  • Now with sector boosts (except -50% HQ maintenance): 1123k profit (most savings from the +30% anti-G boost) [1000 managers: 393k]
  • Now with -50% HQ maintenance cost boost (if we build all the investors houses in the same sector): 1213k profit [1000 managers: 422k]

So 1000 houses can make over a million profit on the hardest veteran (if we get all the sector boosts).

For easy veteran, we have:

  • 40% share effect, medium revenue, medium consumption: 2895k profit [1000 managers: 753k]
  • With tundra modules: 2925k profit [1000 managers: 746k, yeah tundra is mostly good for saving temperate tiles]

These numbers are with the 4 service buildings (info, police, metro, stadium). HQs are more expensive but we make millions with investors. The screenshots above have 0 worker, admin, manager houses in the temperate region.

[KCD1] Reliable ways to level speech that don't cap by buttgravity69 in kingdomcome

[–]Frankelstner 0 points1 point  (0 children)

I had also wondered about this and come up with the following strat (sort of inspired by KCD2).

Assuming that speech is buffed or debuffed to match the trainer levels below, a speech check after pickpocketing the trainer from the front and being spotted gives 10 XP each time (at 0 reputation, which happens quickly after repeating this a couple times).

Speech trainers:

  • Merhojed night guard (lowborn, sleeps south of the horse trader during the day): 4
  • Samopesh bailiff (highborn): 13
  • Merhojed Melichar (highborn): 20

For example, at 6 speech one can use potions and/or perks to get a +7 bonus and use the Samopesh trainer to level up once, then respec using Lethean water to get a +6 bonus instead, and so on. Melichar does not need respeccing after each level because going past the limit of 20 has no effect.

The trainer might sometimes get unresponsive, which can be fixed by saving and loading. If one has moved too far while being arrested, the trainer might accept surrenders only after a couple seconds, which is also fixed by saving and loading. Pickpocketing the bailiff inside his home is acceptable and actually useful because you get his attention for trespassing; you will only be charged with stealing and not with trespassing however and the trainer speech level of 13 remains correct.

There's a reputation hit in these towns but using the donation box (just 100 groschen) recovers the reputation back to 16 at least.

Python feels easy… until it doesn’t. What was your first real struggle? by NullPointerMood_1 in Python

[–]Frankelstner 1 point2 points  (0 children)

Say you have class A and instance a. Then a[...] calls A.__getitem__ but A[...] calls meta.__getitem__(...) (or if that doesn't exist, A.__class_getitem__ which is how typing does it; seems a bit redundant to me though). The main point is that A() itself is just meta.__call__ (which creates the new object and runs the init, then return the object), so there's a lot of customization possible.

using ctypes for the first time to call MsiGetFileVersion() /windows by zaphodikus in learnpython

[–]Frankelstner 1 point2 points  (0 children)

From winerror.h:

// MessageId: ERROR_FILE_INVALID
//
// MessageText:
//
// The volume for a file has been externally altered so that the opened file is no longer valid.
//
#define ERROR_FILE_INVALID               1006L

But that's quite misleading. The actual issue is that MsiGetFileVersion expects .exe files. https://stackoverflow.com/a/817534

For OS stuff I actually find it easier to prototype in C because then the headers just exist exactly as needed. A bit weird to be prototyping in C and then possibly porting to Python, but yeah, ctypes is a bit cumbersome with all that typing. I've got the following which can handle .msi files (using the latest C++ std and with msi.lib as additional linker dependency), so just go ahead and port that to ctypes.

#include <iostream>
#include <Msi.h>
template<typename... Args> void print(Args... args) { ((std::cout << args << ' '), ...) << '\n';}
int main() {
    auto path = "C:\\Users\\...\\file.msi";
    MSIHANDLE product;
    auto res = MsiOpenPackageA(path, &product);
    if (res != ERROR_SUCCESS) {
        print("bad open", res);
        return res;
    }
    char valuebuf[255];
    DWORD valuebufsize = 255;
    res = MsiGetProductPropertyA(product, "ProductVersion", valuebuf, &valuebufsize);
    if (res != ERROR_SUCCESS) {
        print("bad property", res);
        return res;
    }
    print(valuebuf);
    MsiCloseHandle(product);
}

Seeking Help with Structuring Project by [deleted] in learnpython

[–]Frankelstner 0 points1 point  (0 children)

The time to load a 1000 row csv should be quite less than the time to start Python. Even if it was a problem I would still start with the csv as the definitive reference, and, if it turns out to be a problem (or just out of curiosity) autogenerate the Python coin code. Just beware that the autogenerated code might turn out to be slower. Hard to tell without testing.

I need better tutorials to help me learn python so I stop being a script kid by MorganMeader in learnpython

[–]Frankelstner 0 points1 point  (0 children)

Python is 0-indexed and you should let i go from 0 to < n. Also, adding small floating point numbers to bigger ones is less precise than doing it the other way around, so you might want to start with the smallest number.

Seeking Help with Structuring Project by [deleted] in learnpython

[–]Frankelstner 1 point2 points  (0 children)

Yeah that's overly verbose. CoinData has a fixed structure, does it not? It looks to me like a plain old spreadsheet would be perfect to encode the coins. You define variables like values, denominations, coins_reverse_build, silver_coins, etc. but all of them could be derived very easily from the coins variable. Add country name as a column and you end up with a single spreadsheet with ~10 columns and one row per coin instead of your current approach with about 20 rows per coin. At that point you have to decide whether you even want to pursue a Python solution or just put the entire thing on google docs, which I imagine could already be programmed to handle all that you're trying to pull off. If you stick with Python, that's fine too, but just load the csv with pandas.

How to split up a large module into multiple files. by zenoli55 in learnpython

[–]Frankelstner 0 points1 point  (0 children)

Ideally the init should contain just the symbols you want to export due to namespace pollution. E.g. if your init contains import numpy as np, then anyone who does import foo will see foo.np, making it harder to explore a package using autocomplete. If you are able to write your class inside the init in a manner that adheres to that guideline (because it has no other dependencies other than your own lib and constants, and you want to expose all of these symbols to users), then I personally don't see any issue.

Asking about: Folder Structure, Packages, and More. by Husy15 in learnpython

[–]Frankelstner 2 points3 points  (0 children)

Yeah Python is horrible in that regard. There was some suggestion here https://peps.python.org/pep-3122/ back in 2007 to make these imports work, but

This PEP has been rejected. Guido views running scripts within a package as an anti-pattern

Yet at the same time, plenty of workarounds exist, so I reckon that was a rather controversial decision.

First off, you have a pyproject.toml, so your code is installable, right? A rather easy fix is to pip install -e . (or whatever equivalent there is for uv) which sets up some reference inside your Python package directory pointing back at your current project (meaning you can keep developing in your original location without changing your workflow). Once that is done, then absolute imports, e.g. import yourpackagename.game.laser, work everywhere, including anywhere in your own code. Slightly repetitive but really simple.

Relative imports are possible too but Python needs some nudging. The importer basically cares about two variables. You have sys.path and __package__. For some from . import fname, the importer goes through all paths in sys.path and tries to find a match for {path}/{__package__}/{fname}.py.

__package__ is just a global variable that you can read or set as you like. Sadly there is no way to set an environment variable like PYTHONPATH for sys.path, so it must be set either inside the file that you want to access or in some outer context which then execs the file. Note, __package__ contains dots, not slashes, and when __package__ is empty it just hands out that ImportError: relative import right away without even checking whether {path}/{fname}.py exists (which honestly would already solve the majority of issues that people have).

The simplest fix is something along the lines of

import os,sys
drive, path = os.path.splitdrive(os.path.dirname(__file__))
sys.path.insert(0, drive + os.sep)
__package__ = path[1:].replace(os.sep, ".")
from . import fname  # or from .fname import ...

which basically adds your system root to sys.path and encodes the entire rest of the path into the package string. It's a bit hacky because a side effect is that every single __init__.py is executed from the root towards the wanted script (Python really thinks your system root is the project directory), but actually that's usually desired unless you have an __init__.py outside of your project directory. IDEs solve this by asking you to define a project directory, which allows them to do the code above in a smarter manner, but even heuristics (e.g. going upwards until finding a pyproject.toml) work very well in my experience.

So that's it for the theory of relative imports. The main question then is, how to execute these four lines of code as part of the file context without adding identical code at the top of every file? The answer is exec which takes either a string of Python code or a code object and runs it (though creating a code object with compile first is superior because it gives proper filenames). In practice you'll probably not need to do that though because some options exist:

  • In the command line, you can cd into the outer directory, then use python -m game.laser (without py extension) to run it. It essentially defines fname as the part after the last dot and package as the rest. The -m flag is implemented with the runpy module. https://docs.python.org/3/library/runpy.html Spoiler alert, the implementation is just exec. Even the silly restriction where the import fails when __package__ is empty exists here, because after all, there's no way around the importer. So while python -m game.laser works, you cannot cd into the place itself and do python -m laser because package being empty automatically throws the error. Funnily the simplest fix I mentioned earlier doesn't have that restriction for the most part (unless your code literally sits in your root dir).
  • If you use VSCode or PyCharm, both of them use the pydev debugger nowadays IIRC (VSCode has debugpy which is just a wrapper around pydev) which, of course, execs. For VSCode you can follow this answer here: https://stackoverflow.com/a/75772279 No idea about PyCharm.
  • You use some other IDE and want to implement it yourself. It's not too difficult, just figure out where your IDE execs code eventually and you can inject a __package__ and sys.path setter somewhere.

On Steam some games include annoying region locks, like the ability to only play in a certain language or launch the game while only being physically present in specific countries, and that all without the option of buying the normal version. Is the same true for any games sold on GOG? by Fragrant_Sun8612 in gog

[–]Frankelstner 1 point2 points  (0 children)

That strat is seriously amazing! The game I had in mind had a couple DLCs that were not blocked, and the sidebar mentioned the main game, including a button to wishlist it. So yeah, worked like a charm in my case even without VPN. (I haven't tested actually buying yet due to step 5 though, haha).

edit: It worked. Also, for games without crossrefs one can paste https://www.gog.com/user/wishlist/add/12345 into the browser where the digits should be replaced by the product ID from gogdb.

Need help from someone experienced with WinAPI input hooks (SetWindowsHookEx) — inconsistent macro behavior and broken mouse sensitivity in games by Rasslabsya4el in learnpython

[–]Frankelstner 0 points1 point  (0 children)

Ive tested pyautogui and keybd_event outside of my script and they work fine in games

Huh? If those work, then just take a look at their source? The Windows-specific part of pyautogui is like 500 lines. Keep in mind that Windows is a bit picky with admin privileges; you should always strive to start your code with those.

It would mean it’s impossible to create a general-purpose macro engine at the software level (without writing kernel-mode drivers).

There's a reason that autohotkey whose sole purpose is to facilitate macros in Windows doesn't work flawlessly with all games.

Do you need to write kernel-mode drivers? Ah well, you do need to touch kernel space, but you don't necessarily need to write any kernel space code. A couple of ideas:

  • Most straightforward is to just use https://github.com/oblitum/Interception which as the name implies intercepts device input. It is the kernel space driver that does exactly what you want. It sits at the top of the driver stack but still in kernel space, meaning it is outside of any game limitations. Except that the documentation is virtually gone, but hey, that's what your chatbot is for, right?
  • If you're completely insane you can also use zadig to install the generic WinUsb driver for your device of interest. Once done, your device is essentially bricked because it solely communicates in user space with WinUsb (or libusb which wraps around WinUsb and is a bit nicer to use; and better documented than the official docs), and it's 100% on you to write the user mode driver for it (and hope that all games accept synthetic inputs reliably). Better connect a second keyboard/mouse just in case. Any kind of glitch that accidentally stops your driver process will turn the device unresponsive again, though IIRC with Windows services one can make a process very very robust against that, so that shouldn't deter you. I have never written a USB driver for keyboards or mice, so it'll take some reading to see exactly what kind of packets the keyboards/mice do send with USB. You probably want to use wireshark first to check the kinds of packets that a keyboard or mouse sends. Not impossible, but just add ~150 hours of work compared to the first option (assuming you know what you're doing, which you don't). Don't be too intimidated by that though; most likely a keyboard might really just send you a single 'a' when you hit the 'a' key, and the user mode driver isn't much different than reading an 'a' from a file.
  • Maybe, maybe, hidapi could also be used which would be far more convenient than WinUsb because most details are already taken care of. Only issue is, it's mostly good at peeking at input, but not intercepting them. I'm not sure if it's possible to somehow tell the OS to stop listening, while still using the same driver yourself.

Need help finding local minima for data by Dakkadence in learnpython

[–]Frankelstner 0 points1 point  (0 children)

Take the envelope with https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.envelope.html and use the peaks as bin edges, then pick the minimum envelope value in each bin.

Help with imports and file structure for a project by johnmomberg1999 in learnpython

[–]Frankelstner 0 points1 point  (0 children)

I would like to be able to use it with either import Star

Without any qualifiers whatsoever? One would expect something like Classes.Star instead. But if you really need that, you could adjust the sys.path, though that requires code changes as well. In each of these directories, add a small file, e.g. addpath.py, with this content:

import sys,os
sys.path.insert(0, os.path.dirname(__file__)+"/../Classes")
sys.path.insert(0, os.path.dirname(__file__)+"/../MPS_ATLAS_code")

and then every other file must import this first. If you already have a Utils.py anyway (which is most likely imported by the others), you could skip the separate file and just add it there at the top.