Monday 28th: Ok so took a week off for Christmas. Seemed appropriate given both the holiday and my recent milestone. I feel bad for having taken time off so close to my last break, but I'm not going to torture myself over it because I think it's still normal hours. Started by assigning each object in the Object Menu properly, which is pretty tedious but I'm pretty sure doing it this way cuts down on loading time for the player. First bug is to do with the new way I am saving the 'Transform' of a Human. I fear that this may be one of those updates that will break people's saves. Before uploading, I will make sure I protect against this in the future as much as possible. It's such a big update, I'm just going to go ahead and start a new file. Surprisingly, the very first tutorial stage is working fine. First problem is that the Building menu isn't working because there is no 'Sprite' assigned. So, I'll need to add 'Sprites' to each Building. A few bugs here and there, some simple, some difficult. I think it will be a few days before this build could be considered playable. One big problem is that 'Station.LoadHuman' is newly triggered by the Transport. This means that it will mess with the Feeding Trough when Food enters, and if there is a Human who is just going there to eat they will be interrupted. So I wonder, why do things like 'Grinder' and 'Chopper' need to be Stations? Well, mainly for the Display, so that the player can see who is in there. But other than that, the reserving of the machine and blocking of transports should be handled by the Processor and reserved by CurrentSource. So, we shouldn't trigger Stations when moving Items/Humans into them. We should trigger the Processor, which can then update the Station for the feedback. So, do I even need a 'NextStation' on Outpoints anymore? I think not. It may help to cache 'NextProcessor' though. This is a tricky puzzle. Trying to visualize how it all connects together. What if I send in a Human from the Solid inpoint in the case of the Essence Extractor? Will it attempt to LoadHuman? SOLUTION: I think the solution here is to add some more information to the 'Inpoint'. Now, Container, Transport and Station will be stored on the Inpoint. This means, if I don't attach a Station, because maybe this particular Inpoint doesn't attach to a Station, I can leave it as null and it won't attempt to load a Human into a Container or into a Station via a Container input. (And vica versa, attempting to load Items via a Station Inpoint will not insert them into the container but instead will fail). Now I just have to sort out each Inpoint in the Editor (sigh). Ok that's that for now. Let's press play and see what else is fundamentally broken. Now I'm thinking about the best place to check if the next Transport/Container/Station is free. Should I ask before sending the thing, or ask when it reaches the end? If Humans are automatically ejected from Conveyors, shouldn't Items also be? First of all, the answer to the last question is Yes. It's another small layer of difficulty, but consistency is important. As to the first question, it should be before we move the object along the transport. So now I want to be able to attempt a move on the previous Transport/Container whenever I pick up an Item or Human from a Container or Transport. Adding a Transport already prompts the transports behind it to attempt a move, but not any other way. The old way was to have them attempt it every second or so, but I'm better than that. I need to do it when I grab from a Building. Essentially it looks like I have to add more information to the Outpoints now (or ask for its parent's parent's components). Bit of a headache and some pacing around the room and talking to myself (and at my fiance) out loud and my task is clear now. First thing: Do for Outpoints what I just did for Inpoints, attaching Container, Station and Transports as appropriate. Now, when I fill a Processor and then add a Pipe, it doesn't empty because it is triggered on completing a Food. I do have it set to try again on 'ConnectTransports', but doesn't appear to be working. I think it's to do with the order of execution; it's trying to eject the item before the outpoint is set up. Tuesday 29th: Did a stream, so you have a very detailed account of the start of my day. Essentially I confidently got through the piping issues that began yesterday, while explaining the code to the stream for my own benefit of understanding. Next up is to properly gut and fix the Building Panel script, which is a whole new task, so taking a little nap first. Started by just going through it to understand it for myself, and then to tidying. Thinking about the Item Filter, I could save myself a lot of time right now if we go for a single Item filter. So if you want to filter multiple things, you need multiple filters. This is normal for a game like this. However, with Human Factory, it might be worth having single filters with multiple filters applicable. Perhaps it's not worth doing it the hard way if I see no big reason to. I can't think of any circumstances in which I would really miss having multiple filters in one object. Organized Container Panel stuff and removed the code to reset the position. The Human Filter will be a separate window and accessed by a Button on the Station Panel when applicable. Just folding up all that code for now. [Changed this to a Toggle, that it won't open a separate window but simply change the function of the 'Station' panel until toggled back. Info about Exports should be accessed from the HR Panel, not the Building Panel, but it would be handy to have a button there that could link the player directly to that page as a convenience. Making a note of that in the comments. For the Item Filter, it should have collapsable menus per category so it's easy to find each item with just a couple clicks. Brutishly changing and sorting the Building Panel script. Now to see to the errors I've created in doing so. Then I can start fixing the UI one by one as I see them in the game. So see you tomorrow! Wednesday 30th: Sorted out all the red error messages to compile the script. Going to fix each building as it comes up. First 2 things straight away: The Unique Panel should open for all Buildings with some basic info. The Container Buttons are appearing too large on the Container Panel. Did those. Having a think about the layout. A couple of design points: The 'Unique/Default' panel which displays informations and functions unique to Buildings is probably slightly bigger than it needs to be. Also, not sure what is the best location for the Human Filter Panel; I was thinking of making it another tab on the Station Panel. Maybe these problems can solve each other by making the Human Filter folded into the Unique/Default panel because players won't be using that most of the time. Also since it's a scroll view, it could just come after the other parts. .. Really though, I'd like it to have its own panel.. Whatever I decide for this, I feel better spending some time thinking about it before going ahead. In the end I went for giving it its own panel underneath. Then in the future when we have a proper designer, or I can focus on it in a pure vacuum, we can improve this again. This looks well enough and is easy to develop with. Last thing to fix is the shuffling of the Container Panels when they are used. Pretty easily solved I think. A bit tricky because 'Grab' is a co-routine that waits 0.5 seconds before the action is actually completed. So, I should put it in 'Grab'. However, from 'Controller.Grab', I have no way of knowing exactly which inbox to use (without writing a full plate of spaghetti). Chosen Solution: Have it Shuffle in the Button where we still remember the Container Panel, but have it happen after 1 second and see if that looks good. Maybe 0.75?... .. Nope, the button will be deleted by the time the coroutine finishes. I could add it as a variable 'transform ContainerPanel' to the 'Grab' function, which would only be used in this case. Or, I could have the co-routine run from the Building Panel and called from the Btn. I think I'll go with the latter to start with. Ok this works and it feels good. However, whenever 'Container.Do' is called it gets reset. Easy to fix, just put that part in its own function. Ok, Building panel works exactly as intended in the case of the Feeding Trough and the Food Processor. [Besides a quick fix to the sub menu in Human Filter to select the type of filter]. Few little bugs fixed as well as finally reminding the Processor to attempt to LoadSource if an Item is grabbed from it. All good with everything I've tried in the game so far. Pretty happy with that for the day. Rounding it off by roadmapping the next few days/weeks. Thursday 31st: Today I'll be happy if I can just get the Shop running nice and smooth. It's completely broken at the moment since I've made major changes, so I'm just going to run it, follow the errors and go from there. Before getting to the shop: Adjusted the scale of the content of the 'HumanFilterTypeOptions' so the scroll view works properly. Need to sort out what happens when an Item or Human reaches the end of a Pipe or Conveyor that has no output. They should be dumped on the floor, but only if there is space. At the moment I'm using Raycast to check for empty space and it's not working. Instead of fixing that, going to make the switch to using Hitboxes now. This may mean making a small hitbox in front of each Outpoint, which is a bit fiddly so I need to at least try to think of something better [can't]... Fortunately this would only apply to Transports, so maybe it ought not attach to the Outpoint but the Transport. (I'll spare you the rest of my thought process for today at least). Going for a small hitbox in from of each Transport with the sole purpose of checking for a bit of empty space. I don't know if empty non-physics hitboxes will harm the frame rate. Ok I think I made adequate code to make this work. Now to test it in each event. First though, some household chores since we have company this evening. Items ejecting properly, but I need to do a splash effect to make sure they don't just stack perfectly on top of each other (and launch into the sky). Had a 'Splash' script in my pocket already. Just need to modify it a bit for more direct bursts. Made one called 'Squirt'. Before I refine 'Squirt' more, I've noticed I need to make sure to attempt to move a Transport's Cargo if its hitbox becomes clear. I'm thinking on Grab, check all 'Hitboxes' named 'EmptyChecker', and if the Item I'm grabbing is in one of those Hitboxes, then tell the Transport to attempt to move again. [I thought correct]. [Had to attach the EmptyChecker to each Outpoint instead of Transport, for cases of multiple outpoints on a Transport. Very tedious... I expect some errors down the line with this but we'll deal with them as they come up]. Ok all that seems to be working nicely. We'll see when we get to the same with humans and conveyors, but it's all laid out and easy for me to work on now. Ok that took longer than expected. Now for the Shop.
[ 2021-01-05 16:16:27 CET ] [ Original post ]
- Human Factory Linux [257 M]
Raise and feed Humans.
Build all the necessary items to make the Humans feel at home. Make sure they are fed and put to work. As you learn more about the Humans, you can learn to better accomodate them.
Process Human byproducts.
Human waste can be deconstructed into pure matter and used for building. Many parts can be used for cloning, allowing for potentially infinite expansion. Watch as they churn their own milk for you to sell.
Butcher the Humans
Take their skin, their flesh, their brains. Build ever more elaborate and beautiful factory lines. Remember, Human meat tastes best when cut from a living soul!
Trade with the other cosmic space deities. Analyze and gain new technologies. Become the greatest great one in the multiverse.
- Processor: 1.7+ GHz or betterMemory: 1 GB RAM
- Memory: 1 GB RAM
- Graphics: Radeon HD5450 or better; 256 MB or higher
- Storage: 1 GB available space
[ 6133 ]
[ 2120 ]