Game Design, Programming and running a one-man games business…

Boxed myself into some design problems I really need to fix.

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.

ARGGGH.

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? :(

 


16 thoughts on Boxed myself into some design problems I really need to fix.

  1. First I’d stop handling all items as if they take the same space. If you order 16 wing mirrors, they’ll show up in one bundle, not 16 individual items, taking 16 slots. Take 2 out for the current car.

    Second, you already have supply stockpiles in the game. If something is blocking a slot and not needed for the current car model, it should go back to a stockpile. Because that’s what would be happening in real factories, or at least that’s what I’d expect to happen there. Maybe reserve a space in every new supply stockpile for any returning items and add an option to adjust this.

    1. Most modern manufacturing usually uses JIT (Just In Time) systems now, which means it only orders what it needs and when it needs it, so there is not a lot ordered for stock these days. Orders are usually scheduled in relation to stock requirements meaning batches can be ordered keeping prices down.

      Hope this helps.

      1. But JIT also requires that there’s no change in the queue and there are no changes to the production line. Both things are happening in the game.

        This reminds me of how memory and cache management of CPUs work: You have to look ahead and guess what’s required next, or else you have a lot of cache misses and the process has to wait for IO. Maybe the cheap workaround for this would be a fixed input slot for the next car. Or a rearrangement line, because that’s what a CPU would do with blocked processes.

    2. It is indeed way more sensible to have items take up different amounts of space, but in code and game terms this will become a bit of a nightmare. right now you can see a wing mirror and go ‘thats a wing mirror’ rather than ‘thats some number up to an including 16 wingmirrors, but i can’t tell right now’ :(

  2. Ironically I believe real car company had this same issue. The one solution I know they used is Just-In-time Manufacturing. The system I am most familiar with is Porsche aka VW Group.
    But others use it as well. Toyota and BMW are two I know off. http://mlawards.gilcommunity.com/winners/2011-winners/porsche-ag.

    So maybe add few things into the game for this. This could be a research chain. There could also be cost off sets in the game for this. Right know the different car type is done via axels.

    Perhaps some new objects are required. Say a planning and production office. Where a production schedule is made with an indication of what resources to make that model. Then the player has the schedule it out. In this case, it makes sense for efficiency to group like productions together. Perhaps all luxury items go on one resource where another makes other types.

    On top of the planning and production office, we need logistic perhaps as an office and warehouse. This would be where items with long lead times (IE longer production times) could be set how many to keep on hand and where. Also how many to keep at the local resource.

    A real world example. My company, which builds gauges for the metals industry. We just had a new customer in that process metals for a company, who customer makes parts for BMW. That company has four hours from the time BMW places an order to get the part to the factory. That, in turn, requires our customer to rearrange their production schedule to accommodate their customer.

    So I could see many research step unlocks for this, but also a higher cost penalty for the parts. Maybe even an on going logistic cost to lower the time penalties.

    Also, it seems an ERP system is mandatory a good Just in time system. So that could also be something to add, maybe as Computer banks and research.

    http://www.toyota-global.com/company/vision_philosophy/toyota_production_system/just-in-time.html

    https://en.wikipedia.org/wiki/Just-in-time_manufacturing

    http://whatis.techtarget.com/definition/just-in-time-manufacturing-JIT-manufacturing

    https://www.ibm.com/support/knowledgecenter/SSYKE2_7.0.0/com.ibm.java.win.70.doc/diag/understanding/jit_overview.html

    http://www.inboundlogistics.com/cms/article/the-evolution-of-inbound-logistics-the-ford-and-toyota-legacy-origin-of-the-species/

  3. I work In auto supply chain, very few components are built on site any more and most are imported in

    We get a 4hr broadcast of what will be on line, and the exact order, we are referred to as in sequence. Once the car has left “the tower” which is the paint line(s) and they know for certain what the build will be the car it is added to the line queue, given a seq number 0-9999 and we build the assembly to match the sequence and supply in sequence.

    The required configuration is always correct assuming you sequence correctly, though I suspect it only works if final trim is a linear line which doesn’t seem possible,

    in the real world when they set a factory up they decide the takt time and no station is allowed above that time, if a station is too long they split it out. I think a good example of this in game is window fits you don’t have one station fitting four Windows it takes to long, you have four stations

    It’s actually something I would like to see as it annoys me having to have messy multiple line, when it comes to trim and final I just want one nice snaking line

    1. Its always interesting to hear about real world examples of this. The thing is, from a game POV, people enjoy the flexibility of having either multiple lines in one factory, or the option to branch and re-join, but as I’ve seen, it causes logistical hell :D

  4. Im all in for palettized items.
    Maybe as a research/upgrade thing.

    Normaly you would not transfer single items to a production line but allways full paletts of items. So you define how many of the item have room in a pallet and just order enouth pallets for the actual car and the next one. So it uses up much less space on the close to production storage.
    Maybe the parts producers can have a upgrade to produce paletts of items instead of single ones.
    Also importers could be upgraded to import paletts instead of single items.

    This would solve another problem a big factory has, which is slow import and big wait times for the parts to arrive.
    Instead of importing 20 wing-mirrors, just import 1 palett of 20 mirrors in one step.
    Or 5 doors, 10 wheels, 1 car-body, 4 seats..

  5. How about being able to say on a conveyor turn-table, what type of car goes what way? that could help streamline some of the process

  6. My vote would be for Options C and E together.

    Can I just say that I’m absolutely loving this game. Ita beautiful, complex and simple at the same time. Please keep up the good work and persist through these challenges!!

  7. 1. It should detect which car design are coming. Just look backwards until either a conveyor junction or another assembly slot is coming. Changes in the queue or production line caused by player changes results to 2.
    2. If there are components on the assembly stockpile that are wrong or not needed, they should be transferred to a central stockpile, which has enough space.

  8. I work for a major US steel processor. I happened across this game and have some intrigue from an engineering/planning perspective. I’m curious if you would be willing to consider the possibility of re-skinning this to different factory environments? Thanks

  9. Slight tangent, but if the car conveyor could split in a controlled way, you could set up sections of the factory that only cars of a specific model are sent to, or ones with a specific feature. It’s not a solution to the whole problem, but then you could say “cars that want an aluminium body go that way” rather than having both body types in one slot.

Comments are currently closed.