August 06, 2017 | Filed under: game design | production line0016
There are a number of things wrong with the nitty-gritty fine detail of Production Line’s design. I don’t mean easily adjusted stuff like ‘this costs too much’ or ‘that happens too quickly’, but actual design issues that may require me to change the way some of the mechanics work. Here is an explanation and some background:
Production Line is a car game where cars move along a production line from one ‘slot’ to another, and new components such as doors, engines, wheels etc get added at each slot. Different cars may be different designs, meaning they get a different series of components added. For example all cars get wing-mirrors added, but some get heated wing-mirrors, some get heated+folding wing-mirrors, and so on. Where I have gone wrong is this ‘fitting complex components’ mechanic.
Essentially, the problem comes from the relative simplicity of when I first started work on the game. For example, fitting door panels was just a thing that happened, taking X minutes to do. Then I added a new feature ‘car alarm’ which I decided could be fitted at the door panel slot. This slightly slowed down that slot. (For cars with alarms). then came lane-collision avoidance tech, which again involved extra components at the ‘fit doors’ slot. Then came keyless entry…and so on. As a result, something that was once simple (fit door) became really complex, and really slow, causing a bottleneck not only due to the sheer penalty time for all those features, but also waiting for all the myriad of components (sensors, alarms etc) to arrive for each door, meaning the slot was often ‘waiting for resources’. This also felt unrealistic. Surely the doors get fitted with all this stuff already assembled?
Because I’m clever I fixed this.
Now you have a system where some upgrades (folding/heated wing-mirrors is one) can only be installed if you make them yourself. As a result, you have a slot in the game that will manufacture wing-mirrors, and you can then upgrade THAT slot, and it will attach extra ‘features’ to each wing-mirror. The wing-mirror then gets requested by the fitting slot, attached to the car and the final car now has the features it wanted, fitted no slower than the normal wing-mirror.
A combination of method A and method B of adding features keeps a nice balance between bottlenecks and free-flowing of the line, encourages the player to experiment with local production, and adds to the complexity, maybe even the fun of the game?
Unfortunately it leads to big problems!
Imagine a situation where there are two car designs, Budget and Luxury, and production alternates so the line sees B,L,B,L etc. B has basic wing mirrors, luxury has everything… A local production slot ‘factory’ is upgraded, and thus churning out a load of heated & folded wing-mirrors. This is the process by which it all screws up:
The fitting slot encounters a BUDGET car. It fits some basic wing-mirrors, which because its closer to an importer than the factory, it imports. It also fills up the pare 14 slots with new basic wing-mirrors.
The fitting slot now encounters a LUXURY car. It now needs wing-mirrors that are heated and folding. Should it trash 2 wing-mirrors and order them from the factory? if so, does the player get the trashed items refunded? What about numbers…does it order just 2? or 14. it cannot be 100% certain that the end car (due to complex junctions) will be a Budget or Luxury. It has no idea. Does it order half and half? what if there are four designs? or eight and they all have different combinations, and production ratios? How many do I order? Also…back at the production slot, should I be just making a bunch of fully-loaded wing-mirrors? or some ratio? how do I set this? is it automatic? does the player decide?
Plus…because some components now have upgrades, how the hell is the supply stockpile GUI even working any more? when I say this stockpile should be full of wing-mirrors…which type? does it care? should the player be able to control this? how?
Why did I start making video games? what the fuck am I doing with my life? What made me think I know how to do this? ARGGGHHH.
Obviously this can be solved somehow, but I need to do it properly and not flail around coding random hacks, which is basically how I ended up here. How on earth am I going to fix this mess? Here are some solutions, not all to the same exact part of the problem, and not mutually exclusive:
Solution A: Downgrade components where required.
In other words, when we fit a wing-mirror to a budget car, we effectively snip the wires, and it acts just like a cheap wing mirror. We fucked up here in some ways, and spent the money to make an expensive component that got wasted. This is effectively very simple to implement, as some code can handle this at the fitting stage (stripping inappropriate features before adding them to the car). This is potentially very frustrating to the player, as if they want to produced everything locally, they are effectively wasting money (and resources) on every cheap car they produce. This is not efficient, and efficiency is the key to the game :(
Solution B: Scrap the idea of embedded features in components.
This means that all the component fitting is done *at the assembly line*. So factory slots now just make wing-mirrors, and the upgrades move to the fitting slot. This simplifies the games design from a tutorial POV very much, but it re-introduces big bottleneck, is very unrealistic, and involves a lot of change which will fuck up save games. Plus it doesn’t solve the core problem anyway, we still may have the wrong resources at the fitting stage.
Solution C: Allow manual configuration of assembly-line stockpiles.
Right now, the player has no control over what components a fitting-slot orders. It decides what to order when a new car arrives, and it then ‘over-orders’ on the assumption that the following car will be the same design. Because the player knows that all those aluminium stocks for an aluminium body shell are not needed for 90% of the cars, he/she could specify what to keep in stock instead, giving the player micro-management. The downside is this will not work AT ALL if you go BBBBBLLBBBBBLL, and thus the local ‘caching’ demands change. Plus its rife with the possibility of bugs, and confusion.
Solution D: Allow automatic ‘flushing’ of unused resources in a stockpile.
If I order 5 chunks of aluminium for a body-shell, and then take the effort to order another 11 to fill my stockpile, but the next car doesn’t use aluminium, I should immediately flush (probably refund) all those spare aluminium chunks the minute I realize this. This would eliminate a current ‘blocking’ problem, but mean that if my cars go BLBLBLBL (where L uses aluminium), I am constantly wrong-ordering and flushing. In a sense, this is for the player to spot and fix right?
Solution E: Express composite resources as their own resource.
Life might get simpler if I allow the player to refer to ‘folding wing-mirror’ ‘heated wing-mirror’ and ‘folding,heated,wing-mirror’ rather than just ‘wing-mirror’ in terms of supply stockpiles etc. This only solves a minor issue, regarding supply stockpiles, and vastly complicates the supply stockpile resource picker list (and others for that matter0. However this would theoretically allow the player to import them ready-made rather than produce stuff locally, which gives the player more flexibility.
I’m in a design mess here. It *will* get better, probably through a process of far better tutorial & player feedback combined with some combination of the changes listed above. I’m interested to know how annoying all this mess is for actual players right now. Have you encountered any of this? does it bother you? do you think I’m getting too fixated? Is this just something you enjoy working around? How bad is it? :(