Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Scrapping exploits with productivity #441

Closed
Deadlock989 opened this issue Jun 27, 2024 · 1 comment
Closed

Scrapping exploits with productivity #441

Deadlock989 opened this issue Jun 27, 2024 · 1 comment
Labels
fixed for next version Fixed for the next release of the mod
Milestone

Comments

@Deadlock989
Copy link
Owner

Deadlock989 commented Jun 27, 2024

Describe the issue
As discovered by glancing at this third party mod's discussion, but the issue has never been reported here. I had been wondering why people were scrapping analysis packs (e.g. #426) and I suppose now I know why.

The basic issue is that an advanced assembler with 4x productivity III modules in it gets a +40% output bonus. Average scrap return is 75%, but 75% of 140% is 105%, so any scrappable item that can be produced with productivity modules can effectively be duped - not always entirely at no material cost, but sometimes. Fortunately there are not many items affected because IR3 has tried to be pretty strict with productivity, usually only allowing it at the root of recipe chains (which is usually also the root for scrap calculation), but an exception was made for analysis packs, and there also appear to be a couple of oversights in the component list. Temporarily banning productivity-enabled recipes from the scrapping algorithm produces this list of affected scrapping processes:

image

  • So analysis packs are the main exploit, collectively allowing you to produce every scrappable resource out of thin air.
  • Productivity appears to be enabled for stone bricks - internally they are a "stone ingot" and ingots produced from mined ores (in this case, stone) have productivity enabled by default, although stone is a special case because the scrap product is the original ore. Productivity is disabled for scrap smelting specifically because of this kind of exploit. In earlier versions, the scrap product was gravel, which was annoying and prevented proper recycling (hence the change back to stone) but it did avoid the productivity exploit. So I feel as though this was an oversight.
  • Concrete-related items are also a problem, but this time the exploit is compounded by productivity being allowed on both concrete tiles and the liquid-concrete-from-scrap recipe, the latter of which definitely wasn't intended (scrap smelting/melting recipes don't allow it, but concrete scrap was a later addition). As for concrete blocks, they correctly don't support productivity, which further suggests that stone bricks shouldn't either (no other assembler-craftable "very basic component" has it).

I'm going to sleep on what action to take but it basically boils down to one of a few choices:

  1. Just ban productivity-enabled recipes from being scrappable. This doesn't feel like a problem to me for analysis packs (there is no reason other than exploits to scrap them, since they can always be used up in infinite science), but it is a problem for things like concrete, which were specifically designed to be recyclable (e.g. converting basic concrete to advanced concrete via scrapping), so it's probably not a good general solution.
  2. Take productivity off anything within scrapping chains, including analysis packs. Doing this to analysis packs specifically would amount to a massive nerf for thousands of saved games that aren't exploiting this, so, not really an option.
  3. Nerf the scrap output for recipes with productivity enabled. It would have to drop to at least 71.4% average return in order to not be exploitable. This one seems arbitrary and unintuitive. Also, the game engine's limitations mean that this level of fine detail is extremely limited: you have very precise proportional control for crafts that return 1 item result, and decent control when it returns a large number of items, but very little control when it returns a small number of results larger than 1.

Additionally:

  • Fix the missing productivity exception for concrete fluid from scrap. Leave it on for concrete fluid from gravel/silica.
  • Consider removing productivity from stone bricks and concrete tiles.

Factorio version, IR version
1.1.107, 3.1.27

Other mods installed
n/a

@Deadlock989 Deadlock989 added this to the IR 3.1.28 milestone Jun 27, 2024
@Deadlock989 Deadlock989 added the to do Something that needs fixing or at least investigation label Jun 27, 2024
@Deadlock989
Copy link
Owner Author

Decisions:

  • Productivity disallowed for stone brick, concrete tile and refined concrete tile recipes; yes, it's a nerf, but all of these recipes get two or three opportunities for productivity bonuses earlier in the chain (mining drills; mining productivity research; liquid concrete)
  • Also disallowed for the liquid concrete from scrap recipe (still allowed for the primary liquid concrete recipe)
  • Analysis packs can no longer be scrapped; lesser of two evils (only alternative was removing productivity); at least it makes the "can't scrap explosive packs" issue consistent 🤷🏻‍♂️

Regarding the nerf to concrete tile production, I considered increasing the number of module slots in advanced mixers to partially compensate (assemblers can go up to 4 slots, but furnaces, crushers, and mixers only go up to 2). Decided against it because it would be weird to do it for mixers and not crushers, and giving advanced crushers two more slots as well would be a colossal buff.

@Deadlock989 Deadlock989 added fixed for next version Fixed for the next release of the mod and removed to do Something that needs fixing or at least investigation labels Jun 28, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
fixed for next version Fixed for the next release of the mod
Projects
None yet
Development

No branches or pull requests

1 participant