Not a whole lot has changed since the last update. The current status of Human Factory is: Waiting for collaboration from a 3d artist and/or funding for the project. As mentioned before, there is always the chance that I will be able to fill in all the missing gaps myself, but for now don't expect any updates this quarter. It's very frustrating because the game is basically there in terms of mechanics and content variety, I just need help to get it over that final hurdle. I will post here first if anything changes.
[ 2022-03-09 10:30:53 CET ] [ Original post ]
Greetings fellow Humans, Another update on the current state of the game: We're about to release the other project, Grid Slayer, so I'm now a free agent again. Since the last update I've completely overhauled the progression system (as described in the last update) and am happy with the result. Looks like Human Factory will stay in limbo a bit longer. We need better 3d graphics, and I can either bring someone in for that or 'git gud' at it myself. Both of those are big challenges. I'm even thinking about switching to 2d and reprogramming half the code so that I can do it justice without external support. Ideally, it would be great if I could come back to Human Factory with a 3d artist as originally intended. What you see in the game so far is all made by yours truly alone, and I'll finish it like that if I have to. Plans for this quarter: Between doing localization and bug fixing for Grid Slayer I've been making a prototype for another new game and learning, with some success, how to do pixel art and animation. In the next couple of weeks I think I will do some more work on that. As for Human Factory, it stays in limbo for the next couple of weeks at least. Maybe I will lose patience and practice some 3d, maybe Grid Slayer will be a huge success and I can hire a 3d artist for Human Factory. I'd really appreciate hearing the player's thoughts to help guide my next decision. Cheers, Otis
[ 2022-01-27 11:04:50 CET ] [ Original post ]
Currently Human Factory should be running smoothly as a very simple sandbox factory game with very simple graphics and progression. I knew this would be a huge project for one person, but even then I underestimated the difficulty in making this particular game. Not just from the technical but also the creative point of view. I have a very clear idea on how to proceed. We need better graphics, and we need a proper progression system. For the graphic side, we really need to bring someone in for that, and that's a challenge with our resources. This has been a bit of a choke point for us, since neither my wife nor I are competent 3d artists, and that's the entire team at the moment. For the gameplay side, I'm very confident in my plan to make this work. Having built the core mechanics of the game, we just need to tie it all together. I'm very clear on how to proceed with that. Without giving too much away, you will progress the story, explore the map, interact with tentacled space monsters and unlock technology all from the game itself. Essentially the game world IS the technology tree. For this I just need time, and it has been really helpful for me to step away from this project for a short while. So between adding the totally new progression system and overhauling the graphics: it will take time. For the last few months I've been working on another game called Grid Slayer, which is much more realistic in its ambitions. It's already looking, sounding and playing great and we're on track to release it by the end of this year. I hope the few of you who have invested in Human Factory will be patient with me as I finish this other game. I will be back with a higher power level and a new hair colour and maybe even some new special moves. If all goes to plan, I should be able to bring some people in to help with Human Factory. So as it stands, I don't expect any updates to this game until the first quarter of next year. When I do, we will start to see the new progression system/map shape up and in the best case scenario a complete graphical overhaul. So again, thanks for your patience. I'm always here if you have any questions or comments.
[ 2021-09-14 13:12:51 CET ] [ Original post ]
Been a while since I posted an update here. What is the current state of Human Factory? - A robust and very simple sandbox. - All 1.0 buildings, items and mechanics implemented. - Lots of placeholder assets. What's next? - Improve the assets. - Start building the Narrative/Story. - Polish for 1.0 release. Timeline? I have 2 projects I am working on right now, Human Factory and another much smaller and less ambitious title which is yet to be announced. Currently I'm working on the other title and making rapid progress. I'll be able to announce that soon and with that will come the devlog so you can see exactly what I've been up to while Human Factory is on break. I can't make any promises with the timeline of Human Factory. We have achieved big milestones in the last 6 months, now I just need to turn all these systems and mechanics into a 'game'. I've gone into some detail about what's coming up for the Story/Progress/Narrative that I think will 'git' this game 'gud' in the devlog, so feel free to read spoilers there. I could of course just finish up the assets and pretty much release the game as is as a sandbox, but I think this game deserves more. I'll be back to the factory soon. As always I'll keep you posted here.
[ 2021-07-05 12:23:51 CET ] [ Original post ]
Tuesday 8th: Still thinking about the narrative. Not really getting anywhere. I'm even thinking of scrapping it entirely. It's difficult because there's a lot of other stuff on my mind at the moment but sometimes that's not such a bad thing. I've come up with ways to wrap up each story as they are, but at the moment it feels really tacked on and doesn't have much to do with the gameplay. So we're going outside the box and getting the hammer out. What's missing from this game that all the other games have? Exploration. I could waffle on and on about how I came to this conclusion, but when it comes to the story, this is it. It doesn't make much sense, but it really does in terms of game narrative. Now I know why so many games have such bizarre narratives. Without revealing too much, the long term decision for the story uses a lot of the same elements but makes them dynamic. Instead of having this separate window and narrative going on with the clients and their dialogue and selling blueprints, this will all be done in game on the map. There will be various walled off organic sections where the player can build. In and between these sections will be these 'clients' who will disappear and often drop a blueprint or reward as well as clearing the way. These 'clients' will function similarly to the quests such as 'feed it 10 msm' and may have some dialogue. Resource nodes like the Forest and Mine will spawn naturally here and cannot be built. They will often be occupied by another Space God and will have to be convinced to move. Some 'clients' will not disappear but will instead keep rewarding the player if fed, so you're directly feeding the monsters. This will entirely replace the Export Box. I'm really happy with this idea to take Human Factory's quality up a big notch. This will be a fair amount of work though, so I want to make sure all the existing stuff works first. Then we can work on turning Human Factory from a Sandbox to a Game. So that handles the item on my list 'sort out the story' for now. What it means right now is essentially ignoring it because it's not worth putting too much work into this dead-end story. Back to actually working on the game... programmed the disappearing of Arms and Legs just like with the Head for then they are removed. In this case, with the possibility of showing 0, 1 or 2 Arms/Legs. Next is to really look at buffs and then I'm on to aesthetics before getting techy again. I have this simplified form that would do just fine. However, the interface for the Buffs should have room for lots of detail and flexibility. So, I'm going to start by adding more detail to the class 'Buff' so I can give better feedback to the player and automate more about the effects of each unique Buff. Capped the low end of HP as per someone's recomendation. Wrote the effect of Genies to force parents to pass on certain stats. Wrote the effect of Hacks on application, making sure for Hacks and Genies to only allow it from an Injector, not Eating or Gasing. Now I have to write out the Buff for each Item that has one (before we were just making a new one each time based on the name). I will also need to effect the stats on the Buff for Make Item. This will take a while. Wednesday 9th: Think I'm going to keep 'cocktails' in the game in the end. Maybe I'll cut it later. In this case, I just have to remake the placeholder building. Thinking more in the design frame of mind. Maybe it's crazy and it's too drastic a change, but I'm being sufficiently restrained I think. Just still thinking about the new narrative with the organic biomes and progress gates. Also in the design of how some of the machines should look and work now; namely the Food Processor which has been redesigned as like a weird tentacle that eats power and shits food. So yeah, unless some force of nature or wisdom stops me, I'm going to go ahead and gut the entire dialogue/story element from the game as it exists. This is so I can really simplify what will now be called 'sandbox mode' so I can test all of that and upload a build when it's stable, then go on to this new form of narrative progress. Wrote out the effects of each Cocktail which I hadn't done before. They're a bit weird and probably terribly balanced, but we'll fine tune that/remove entirely depending on how it plays. So in theory, which means subject to hours of stressful testing and fixing, everything works. We have our current version of the game just with placeholder assets. So my next step is to gut the story and add the simplified way to unlock buildings. Then make sure all that works, then I can go in and do some assets. First, let's backup the project. Ok, gutted all story, quests and everything related out of the game. For some reason I find this really satisfying, like dead weight is being lifted. Like popping a spot. Made it so all buildings are unlocked by default. First press of play. Unfortunately the game won't load with an old save file. So, I've made it a fresh one and unfortunately everyone's saves are now dead. Thursday 10th: Surprisingly, everything pretty much runs as planned. All Quests/Dialogue is ignored, the game just begins and you have everything unlocked. I'll need to do a proper test to make sure and there will undoubtedly be lots of UI bugs. Getting kind of sick of starting new games and making Factories, especially with this uninspired narrative we've had so far. Thinking very deeply about how to proceed. I think the best thing is to go back to Another Rogue for now. I spent some time thinking about what I'll be doing exactly when I come back and came to this conclusion: Just play the game from scratch with the current 'sandbox' mode and build everything. Then it will be much more clear. I will have a blank slate to write narrative onto and probably do the assets first. We'll see. So, back to Another Rogue. See you in that devlog. Friday 11th: On Friday I had 2 of my wisdom teeth pulled out, so nothing much achieved this weekend.
[ 2021-06-14 09:32:44 CET ] [ Original post ]
Tuesday 1st: ... Switching back to Human Factory today. Got myself a little list from the last playthrough, some in game things I want to achieve for my base to optimize it, and then I think trying to finish the remaining content before working on graphics again. Human Factory: Now after several years of game development in Unity I think I know how to sort the animation in the best way. Tidied up the Human Animation graphs. This should deal with a problem where culled animations would not update because there was no connection between certain states. Made maximum mood the same as the Human's Quality. Was a bug where I think Humans were being summoned through the HumanGate multiple times if there was blockage. Just made it so they check the humanoutbox is empty before being summoned. Having trouble finding a good way to stop humans trying to target items in Cargo. Made Babies start with less fullness. The idea is to make it die or take damage if noone feeds it. We'll see how that plays out. ... Ok so now I have to figure out this cargo thing. Also, there is a weird bug where a few seconds in I apparently the navmesh resets or something? Made a bool for 'iscargo' and made sure to turn it on and off. I also had to set it up for saving. Seems good. Now for this weird navmesh thing. First is to investigate. Seems to be tied to the HumanGate bug. Not really sure I understand but it seems to be fixed. However no jumping for joy yet because now it appears like containers are not ejecting their cargo automatically. Also the animation is a bit buggy now. I want to connect each Animation to 'AnyState', but only exclude itself. So it should be able to go from any state to itself. Fortunately this was an easy to find toggle :D. And finally the eject cargo thing is fixed. Was an error I made when editing the container script. Next is to play and advance my progress in-game. Wednesday 2nd: Added info on Items to show what recipes they can be used in. Spent some time thinking about the details of how Cooking should go. Made a very minor change to the tree. Thinking deeply about this game and the factory genre in general. Personally, I have 1000s of hours in Factory games. However, lately I have very little interest in pursuing the updates for Satisfactory, Factorio and Oxygen Not Included. The main issue with this genre is every time you find an optimization for your factory, it's generally a lot of work to implement. It's often tempting just to start from scratch, and I guess that's where a lot of the fun is in these games. I'm wondering if Human Factory may need to be a little more than just a Factory game. It's already kind of interesting, but I'm really starting to give more weight to the idea that Human Factory is more of a 'ranching/breeding' game. So, instead of refining my factory in game today, I'm going to go blitz mode over the next couple of days and all all remaining content with placeholder assets. At least Cooking. What I want is a complete game for myself to play and work on so my patience can go much further. Anime music on, focus engaged, let's start with the code. Cheeser is easy. Just copy the script from the Grinder to convert one item to another. Sausage Maker is even easier, as I just need to label the Processor as a 'Fabricator' and set the type and recipe for Sausage. Burgerizer is just like the Cheeser, so easy peasy. Delimbinator was slightly more tricky but still on the simple side (simple after 3 years of banging my head against a wall of code ;) ). Kind of copied some code over from the Decapitator and edited it to work for multiple parts. Butcher was slightly interesting. Like the Grinder, it can use either Items or a Human. I needed to make a new saved stat on Humans called 'Steaks' which shows how many Steaks you can cut from their torso before consuming the Human. Cooker is also easy as it's a Fabricator, the time consuming part is making all the recipes. Manual Butcher is actually easier than I thought, as all I have to do is make a version that has 'manual' toggled on and proper waypoints. So a question is, if this is going so fast, why didn't I do it earlier? Well I guess it's because I've been laying the tracks all this time but also making sure the tracks are safe before I run the train through. I was going to do more testing today, but I am actually confident everything is working so I'm finally continuing now with what works. Of course that is not to mention theory which requires me to play a lot before ploughing ahead with content. Anyway, it feels good. I've come a long way in 3 years. Next stage is adding all the new machines and items to the lists so they are referenced properly. Like filling in forms. Done. Still more to do here but I'm moved to design the genetic process in finer detail. Figuring out the recipes and how it will work. Balanced it so that each Organ has 2 non-food recipes attached to it between Clothes, Drugs and Hacks. Essentially, Mines will very rarely produce Rare Gems and the Forest Rare Flowers. Mines are used to make Hacks to improve the genetics of a Human. Flowers are used to make Spirits which guarantee they will pass on a certain stat. The machine for Genetics also require no programming, just need to make sure I get the recipes and labels right. In theory, I've just finished the programming for all the machines that are planned for 1.0 of Human Factory. Added placeholders for each of the remaining machines. Added the Genetics stuff in code. Next is to add all the new Meals. Spending a bit of time thinking about if first. Essentially I feel like this is the completely open ended part of the game. From a gameplay perspective, we really only need a few meals to make it work. However I think I'm just going to make whatever recipes come to mind and be generous and varied in the bonuses they provide. So I'm going ahead with the original plan but a bit more simplified, cutting out the not-yet-existing 'Wheat' and associated recipes. I don't think I really need the 'Hangover' effect, not yet at least, so I got rid of it. Should be fairly simple to add 'meal' buffs. Made placeholders for all the new Meals and wrote their recipe and vague value. Thursday 3rd: Finishing up adding all the placeholders for Items and basic stats. Added Rare Gem and Flower to the Forest and Mines and writing the recipes for the Genetics. Ok so another deep thought session on the progress and narrative. So since concept, playing the game has taught me that there is no need to add things just for the sake of variety (we sort of have that covered in the cooking side). So a lot of the empty gaps I had in my head for machines I might want to add, I think they are best off as empty. In fact, I have actually made some significant cuts. There were going to be 'cocktails' as a way to process drugs into something enjoyable for the Human. That has been cut. Whiskers the Cat has unfortunately been cut because there aren't enough different machines in Genetics to warrant a whole Client. We can put that in Vegod's progress. Arkanos the Magical Dragon has also been cut, with his Magic buildings and spells being given to Ivan. Both dialogues/stories I really liked but unfortunately they don't quite fit in the game. So that means McCthulu and Gorgonlola can handle the Cooking machines (Gorgonlola has a husband called Gorgonramsay???) The other thing that is cut but I may yet add after 1.0 is Education, so improving the AI of children and have them focus on improving their stats before entering the workforce. There is of course also Mutations, but I want to approach the theory of that with a clear head and a clear runway. So this is a significant milestone for the game. We are set with what we have... Almost. So here's my list: - Refine Buffs and sort the buffs and effects of New meals and Genetics. The Buffs system could definitely be a lot better, I at least need to refamiliarize myself with the code before completing the simple process of writing the new Buff effects. - Refine the Story/Narrative. Review all of the dialogue and progress to completion. This takes a clear mind. - Code the feedback for when Humans are missing limbs (similar to how it's done with the head). At this point I will have a clear runway to focus on nothing but graphics to completion. Play and fix and get the whole thing right with that set of content. Then I can review the next steps but in theory we would then start transitioning to 1.0 release. Pretty satisfying to be at this point. Added all the Buildings and Items to the Object Menus. Going to take it easy today and let all these thoughts sink in. Quick switch to Another Rogue to add some more art Assets from Maly, some coding to make that work. Sunday 6th: Sorted out the 4 Clients and their 4 Quests each. Each of them now has a 3rd quest which unlocks the final tier of their Buildings. Then the 4th Quest is the final test to wrap up their quest and unlock unique rewards. Thinking about the dialogue. Trying not to force it. If you got no ideas, just get straight to the point and add the flare later.
[ 2021-06-14 09:26:30 CET ] [ Original post ]
Someone reported a bug with the current build and I just played it and hit some big errors. Reverting to the old build and working on a fix now.
[ 2021-05-31 14:29:13 CET ] [ Original post ]
Fixes to the way hair/skin/clothes appear during butchery. Mood value now appears properly. 'Love Glove' was appearing and shouldn't have. Expect the next content update in the next month or two.
[ 2021-05-30 19:14:09 CET ] [ Original post ]
Monday 17th: Milker works. Birthing Station works, but both the parent and the child do 'decidenextmove' automatically on birth. So I moved those functions around a bit and it works. Nappomatic and Pacifier work. Nice! Now a problem: Humans don't seem to come off conveyor belts anymore. Because I recently told transports to move cargo to the centre if there is no outpoint connection. Instead of going crazy and finding a fix in code spaghetti, I'm going to add a machine called like a 'drop point' to eject Humans. Ran into quite a few weird and annoying problems as I added this building, but it's done. Cut off the quest to start the Magic buildings for now. Tuesday 18th: Ok so today the goal is just to play for a few hours until satisfied and then make that build. Humans weren't changing the Babies. Fixed that. Pretty much re-did it from scratch using the updated framework used for feeding. Currently Humans come and change the Baby by effectively absorbing its waste. However, if I simply told the Humans not to do that but instead then the babies would still never poo because they would be old enough to use the toilet before ever pooing on the floor (assuming they can find a free one quickly). This kind of works so I may end up deleting the changing script entirely. I'm at a point as a developer where I think I'm finally overcoming the big hump of learning to code. Now, instead of focusing on logistical problems, the focus and challenge becomes the gameplay. This is great, but can also be very exhausting for a game like this. I can only play through so many times in a short period before my brain switches off. Essentially what this game needs more of is feedback. We need clear sights and sounds for everything that's happening. For now I think the build is ready. Going to see another wedding venue this afternoon and then see if I can playtest some more and aim to upload the build tomorrow. Got rid of changing nappies. It was causing bugs and it's not really necessary. I can add it later but it don't think it will be missed. Wednesday 19th: Uploaded a build. Left the game on for a while. Hit a bug. It's not game breaking but it's annoying. So, running in Unity until hopefully it happens again and I can catch the error code. Hopefully I'll find it again before anyone else does. Can't replicate the bug. Best thing to do is just to leave the game running while I do something else. Found another bug, don't think it's related, must be very rare. A human got stuck going for a piece of clothing that was on a conveyor belt. Cut that code entirely, they can use Wardrobes. I thought it might happen for Food as well, but I think the problem was more down to the fact that I had forgotten to write the code for when they reach the clothes. Ideally I want to check if they are a cargo before attempting to target them, like with Humans I can check their Activity, but I don't have that framework for Items. Should be fine to leave as is for now in the interest of getting this build out. Switching back to Another Rogue tomorrow, the other game I'm working on which is a little less ambitious. Will be back to Human Factory soon and as always checking my Steam notifications every moment for bug reports.
[ 2021-05-24 16:16:03 CET ] [ Original post ]
Monday 10th: Got a lot to say about the new Resident Evil. It's pretty good but I would wait for sale if you're not sure. It's definitely Resident Evil 4 again which is great, but I don't know if that's enough. Anyway that, plus more Temtem, was my weekend. Starting today with some testing with some random fixes and building up my base. I'm embracing the Spaghetti as I work Drugs and Forest into my base. So far so good. I'm already seeing several ways to improve the base which will basically require a full rebuild of certain sections. While the clicking and dragging is good for most things, once everything starts getting connected up it's more difficult to do. That is par for the course for Factory games and why people enjoy them, but is very time consuming for me as a developer. It also gets quite tedious. With nearly everything running very smoothly, my task today is to finally be able to test and fix each building that currently exists in the game. Starting with the most complicated I think, is Buildings with multiple access points. So the Effigy can have up to 4 Humans using it. I had already done some of the work here before my break. Now it's very clear the next step is to separate 'Station.Entrance' into a list 'Station.Entrances'. When figuring out which entrance to move to, they will search for the index in the Entrances list that matches their position in the Occupier list. This is slightly more complicated for calculating paths before going, and I've kept it simple by making them calculate the route to the first access point. That means if they can access point 2 but not point 1, they will assume they cannot reach the Station. Maybe this is a bug, but I don't expect too many players to be annoyed about it because I doubt they will try to use 1 effigy between several rooms. Fair bit of setup to make that work. Lots of bugs when I pressed play due to little errors but with great satisfaction I can see it now works. This is a fairly big milestone. Chair tested and fixed. Need to add an animation so added that to my todo list. More random fixes here and there. Was a problem with the Box not triggering the previous transport when space is made. Took a while to figure out. Did some animation for sitting in a chair and eating in a chair and also figured out how the Couch will work. A few kinks here and there but we'll see how it goes. Tuesday 11th: Started by sorting out some issues with drugs and buffs. Simplified things like the duration and made the effects a bit more predictable and immediate. I can fine tune the effects of quality later, but for now it's simple addition: 25 potency + quality and 5 seconds for gas vent and food, double that for injections. Working through the remaining buildings and dealing with any bugs that come up. Couch ends up being more trouble in the end. I could use a list or store a second 'centre' so that we can track the sitter to spot they should sit. Or I could make a new animation that is a copy of sitting but with displaced movement. I think I'll go with the former since I think it's more robust in the long run. The annoying thing is I can't think of any other buildings this would be worth doing it for, so maybe I'll just add a temporary one. Finished work on the couch. May revisit it later as I couldn't find a way to make it a continuous building, so it looks a little weird if they keep using it. If I change it it will probably be by using like a 'recreation' slider. Wednesday 12th: Got a bit of testing and fixing done, very pleased with the progress in the game. Unfortunately I've developed a bit of a TemTem problem so I'm working on that. Thursday 13th: So besides a few very minor bugs I have listed, the only remaining machines are the Birthing Station, Milker, Nappomatic and Pacifier. There are some Magic machines but I am happy to lock them off until the next update. Also a bit of setup, such as updated thumbnails, once everything else is settled. Wrote out a revised roadmap. Always a good exercise and should come in handy with the imminent update. Started by making my 'immaculate conception' spell, which causes any Human to become pregnant with what would be a perfect clone of themselves and sets the pregnancy straight to 40. This will probably not make it in the main game but will remain a cheat for testing purposes. I had tested and fixed up the Birthing Station before my break, but I'm very pleased to see that it still works on first test except for the animation. The animation is tricky because my current code won't animate the Human towards the 'centre' of the machine if it didn't come in on a conveyor belt. It actually made me think about how awkward it is to have a machine that is both a conveyor machine and manual. Alternatively, I could switch off its manual functionality, and make it so the player would have to set that up themselves by setting up a Human Gate set to attract anyone who is at a certain level of Pregnancy. This gives the player more control, and fits into the philosophy of this being a game rather than a convenience simulator. Added Pregnancy as an option on the Human Filter. This meant adding the condition on the script 'checkhuman' and adding the button in the UI, that's all. Made Pregnancy count up rather than down. Made it so Birthing Station and Milker are no longer accessed manually by Humans. Players will have to set that functionality up using the Human Gate. Wow, all working. Very happy. Next up is the Milker. Again, removing the manual functionality. Then to add Milk as an option on Human Filters. However... Currently the stat is called 'Lactating Time' and it's, well I don't know why I did it like that. I think it was to make it easier to handle lactating post partem [Also so that they could always breastfeed a baby and Hunger would be subtracted instead... Too convoluted.]. I'm going to simplify this and make it just like Blood, with a counter ticking and an int called simply 'Milk'. This will go up while Pregnant and, if not harvested, will be usable for feeding Babies as a preference to other foods. Maybe I'll give them an extra Milk when the baby is born for post partem feeding. I'm thinking one pregnancy should yield about 3 Milk, with it being an expensive and powerful resource. This is why I spend so much time playing the game without using cheats to get through the content. It really helps me have a proper sense of understanding of the game and helps me make these kinds of decisions confidently. Changed 'LactatingTime' to 'MilkGrowCounter' and 'Milk'. From here, it's easy to track the compile errors to find all the instances where I will need to change the code. Now it works exactly like Blood but only when pregnant. Milk grows 1 every 29 seconds out of the 90 second pregnancy and another one on delivery. Added 'Milk' as an option to the Human Filter. Friday 14th: Went to see wedding venues. Stressful. Sunday 16th: Sorted a problem with Human animations on load. Went through my 'scan environment' code because I felt it was acting weirdly. Need more info so I'll examine as I play. Made popups for Power gains from the Fuel Burner. Clothes still appeared on the Human after being shaved. Fixed that and made sure hats are removed on headless Humans. Just had to call my new 'UpdateClothes' code. Switched off the keyboard interacting with some UI elements when it shouldn't. Will fix these as I find them. Added Milk to inspectable Human values. That's all the bugs I had on my list. Next is to play the game organically and thoroughly test these machines. Hopefully I can upload the next patch in the next couple of days.
[ 2021-05-24 16:14:22 CET ] [ Original post ]
Fixed bug where Humans could get stuck going for an item on a conveyor. If you find any bugs please let me know!
[ 2021-05-19 11:29:23 CET ] [ Original post ]
This significant update includes: - Huge Optimization. - Bug fixes. - Gameplay tweaks that should make early game and breeding Humans much easier. - More in game feedback about what is happening under the hood. Now I can finally get to adding more features and content, as well as improving models and animations. Please let me know if you have any issues. I am here as always.
[ 2021-05-19 08:53:51 CET ] [ Original post ]
Update soon. Could be this week. Monday 3rd: Ok after a lot of investigation I think the problem was simpler than I thought. Long story short it was to do with the agent being switched off and that causing it to be unable to path to anything, which was messing with the Idle script which resets if it doesn't find a path. Two ways to fix that. 1, switch on the Agent before Idling. 2. Instead of resetting if nowhere is found to idly wander to, how about they just go straight to 'Idle'. More testing and fixing and making my list, thinking about gameplay. I'm learning that the main challenge as a single developer is not just to produce all the code and content; as difficult as that is my real challenge is to have the time and patience to play through properly so I can actually 'direct' the game. Ideally, that's all I would be doing. Tuesday 4th: I could go ahead and upload what I have, but I think it's kinder to the player to do more testing and fixing first. If I can get it done soon, I essentially want to make the game as smooth and perfect as possible before adding the cooking and genetics and other content. Cleared the list of tasks from yesterday. It's pretty exhausting playing the game, let alone fixing every little thing. So, today I'm just focusing on testing and making a TO-DO list for tomorrow. Lots of testing and fixing and I've got myself another fat list of things to do tomorrow. Playtest and fix all existing content. Wednesday 5th: Going in straight away with my todo list. I'll write them here so you have an idea of what kind of thing I'm fixing. Fixed the Clothes script to work with my new optimized system. Made sure Hair is updated so it goes grey properly. Sorted bug where picking an item off a conveyor would not prompt the previous conveyor to move. Reduced impact of pregnancy on waist length by half. Made it so cargo on Conveyors rotates smoothly. It also moves towards the centre when blocked instead of just stopping, which creates an interesting kind of 'bump' animation by accident. All in all, a vast improvement that is so simple and easy to implement that I think it was right to have taken a break from this project as I'm seeing it much clearer now. The only issue here now is that they will sometimes make 270 degree turns in the wrong direction instead of 90 degree turns, and I'm not really sure how to fix that so I'm pinning it to the bottom of the list for now. Re-added the animation for using a Fabricator. Some of my notes are to do with smoothing out highlighting and fixing bugs for the different types of highlighting. Put those on the shelf to try and deal with all at once; I should be able to produce a much better highlighting system. Stopped Humans producing Waste when dead. Not sure what's more realistic but this is easier gameplay-wise. Minor bug on Decapitator gaining 'Progress2' forever so it looked weird in UI. Made it so right clicking a building shows it in the Human Resources Panel. Before my break I separated the Shirt Container and the Torso Container in the heirarchy. This messed with the animation. I think the best thing is to put it back in instead of copy-pasting all the animation frames. This meant some code editing to make sure the Shirt Container is not deleted when we reset the Human's torso and searching for the right location in the heirarchy. Fixed a bug on clothes colours, just a typo causing shoes to be same colour as shirt. Right clicking to show Building info was broken. Needed to check all windows were closed before allowing it. There was a bug where, occasionally, the Human was able to finish a task on a Fabricator and then leave before the Item is made. This would often cause a chain reaction of problems. This meant the 'Maker' returned null. I fixed it so that 'CurrentHuman' is updated every frame on the Fabricator, and instead that is used to make the Item. It's possible that bugs could occur if the player loads in exactly as a Human finishes making something and leaves the station, but that's a risk I'm willing to take for now. Made it so chest deformations occur in the Update method with a move-towards to make it smoother. This was an impromptu decision and took longer than it should but it looks nice. Whereas before my break, so many random little things were broken. Now, everything looks great and smooth. Tomorrow my plan is to address a number of bugs when it comes to highlighting. I think the best approach here, while it is not perfect, is just to do a raycast from each object. I might have over-estimated the cost of that and otherwise it's a lot of fiddly coding especially in a game that is not fully developed yet. So, going to switch to this and use for all future games at least while in development (or I get a better idea). Thursday 6th: Imported some of the things Maly gave me for Another Rogue so put those in. Had a bit of trouble converting things from quads to cards and handling layering and learning TMPro (fonts, where the order layer is etc). Looks much nicer but there is more to be done and I am almost done with this round of Human Factory polish/upgrades. Ok so I made the changes to the highlighting system. It turns out it does have rather a big impact simply because of the number of Buildings there are in the scene at any time. So, after a couple hours of work, completely reverting that using ctrl z. This is a double edged sword on my morale. On the one hand, the work I just did is for nothing. On the other hand, that painful mass of work I did that time actually really paid off in terms of frames. But we still have those bugs with highlighting to deal with, so I need to examine that code. I do feel little bit lost in the controller code, so my next task is to go into that in detail. As far as testing the rest of the existing Buildings goes; Drugs/Resources are very basic and I don't expect any bugs. For the Reproduction Buildings I might need to get busy with the code again. Fixed a bug where transport pointers wouldn't switch off when cancelling tool. Fixed the minor bugs with highlighting and showing everything to do with automation wires. Wasn't too bad to figure out in the end and it's now running smoothly at very low frame cost.
[ 2021-05-13 10:43:16 CET ] [ Original post ]
I've been away for a few weeks.
First things first: When is the next update?
2-3 weeks I think.
Where have you been?
Taking a break from the highly ambitious Human Factory to work on a much simpler project. I have made a devlog for that and it is ongoing. I'll post more when we have something in case anyone here is interested.
Why did you take a break?
I am a single developer and Human Factory, while an incredible learning experience, was a bit of a foolish project for me to take on by myself. I decided to have a go at another project over a weekend and I had so much fun with it I decided to give a week, then a month to it.
What next for Human Factory?
This was a crazy ambitious project for a fairly green single developer with no budget, but hey we're already over half way done so let's finish it.
Summary of this week:
Now, coming back to Human Factory, I've made some great progress in the last week. The break was worth it, as sometimes it's easier to fix things when you walk away from it for a while. The frame rate has doubled, old nemesis bugs have been squashed like I'm Goku returning from the Hyperbolic Time Chamber.
What's in the next update?:
As I've stated before, optimization and polish. Not just in aesthetics but in gameplay. Much more robust AI, with a smoother difficulty curve. If anyone is eager to play the next update, I'll post it now. But I think I can get this ready for you within the next 2-3 weeks. Then finally we can start adding the new content like Cooking and Genetics before rounding up to release.
So, it's been an interesting couple of months for me. See you soon with an update!
Monday 27th:
So now the game runs from start to finish. I almost got a full playtest today except for a weird bug where apparently my castle has too many vertices. Also found a few little bugs which I listed.
I could keep adding mechanics, enemies, statuses, etc, but I need the assets department to catch up.
Right now we just need Unit sprites, a bunch of sound effects and music and a better UI before we can think about putting a demo out. I also want to play a bit with lighting and do some tutorials to see if I can learn some nice tricks.
If I'm going to put out a demo or anything for Another Rogue, I want to make damn sure people know I haven't finished with Human Factory yet. So, this week starting tomorrow I'm going all in on the Human Factory. Spent some time setting up for that.
Tuesday 27th;
Back to Human Factory today.
Started by fixing some weird bugs which stopped feeding from working, and while I thought about overhauling the code I found it wasn't difficult to fix.
A few other little bugs to find and fix and it's going fine.
Added the Mood floating text and made it just text for now. Nice achievement.
Tomorrow I'm focusing on some Animation as well as fixing some UI bugs and a couple other random notes.
Thursday I'm going to hit that optimization I've had on the list for a while.
Then Friday continue playing and fixing and hopefully we'll be ready to upload a new patch soon.
Wednesday 28th:
Starting today by sorting out some animations. I was going to do a thing where the animation would handle the movement within each Station or Processor, but in the end I think it's better to handle that in script. It means fewer animation files to be made.
Also some fixes to the Button animations in the UI.
We now have smoother animation overall.
As intended with my little break, coming back to the project is nice. After some initial refamiliarizing with the project, I'm finding it really easy to fix all the little problems that were plaguing me before.
With all known issues sorted, tomorrow I'm going to finally knock that bit of optimization I wanted to do off the list; splitting the 'UpdateAppearance' script on the Human so we only update what is needed each time.
Thursday 29th:
Very quickly got that optimization done. This should be a big improvement to frame rate because we're no longer reapplying materials or re-instantiating things when I don't need to. Instead of 'UpdateAppearance', we only update the part that has changed. So while the Size of the Human and the Shape of its torso should change very often, materials only need to be applied on load, start and if skinned. Hair and beard changes only when grown or changes. Everything only when necessary. I am likely to run into some bugs where things don't update, but it should be very easy to bug fix that. I think this should also deal with any issues of things not coming out properly.
I have a couple other optimization notes here with tidying/improving Automation and object highlighting when Items are in hand or not. I think I'm going to shelve those notes in favour of testing this build and hopefully getting an update out sooner rather than later.
Now to press play and fix. Seeing a few little bugs straight away. Made a list of things to work on tomorrow.
The frame rate is vastly improved. I'm yet to see a proper stress test but so far so good. Very nice.
Started knocking a few things off that list. There was an issue with the skin colour of the torso changing each time its updated. Humans were calling their own name instead of the person who changed their mood.
I have a few things left on the list. Tomorrow the goal will be to playtest and fix as much as possible. Then by Monday I'd like to have a new Human Factory update out which will nicely accompany the Another Rogue announcement.
Friday 30th:
More playtesting a fixing, with a fairly long list of things I want to do before releasing a build.
Came accross a terrifying bug where Unity would crash completely. It seems to be after I build some Stations outside of the range of the Humans and takes about a minute to occur. No leads yet on how to fix it. [Fixed today]
On the plus side, the presence of the garbage collector has been almost completely eliminated from the profiler.
[ 2021-05-03 16:53:44 CET ] [ Original post ]
Hello you genocidal monsters,
Human Factory is in a pretty stable state as it is, so please let me know if you encounter any bugs.
We are about half way there with the number of machines, items and in-game mechanics.
The next updates will be all about graphics, starting with Animation, as we try to get the game in a much more presentable state. The aim is to make Human Factory, with its current set of content, extremely fun just to play and build and press buttons and watch the Humans interact.
No devlog last week and there won't be one this week as I'm working on something to pay the bills.
Expect the next patch in a couple of months or so.
[ 2021-03-16 12:40:26 CET ] [ Original post ]
Monday 1st: Put some thought into this Occupiers thing over the weekend. Essentially I want to keep everything the same as it was before, but Stations should have an additional 'HumanOutbox' which will work just like the Container Outbox. The first thing is making it so the Station is no longer concerned with having anything to do with Transports. This will be handled by the Processor, and any Station (first being the Birthing Station) that can be accessed manually but exited with Transports, the Station.Go will merely trigger the Processor to start. Ok maybe I don't need this 'HumanOutbox'. Tried putting the code together with the idea that when the Processor finishes with a Human, it does 'DischargeHuman' which attempts to move the first Human in the Building.Station.Occupiers list. However I hit my first snag as I realize that I do in fact need 'HumanOutbox' as a separate list because otherwise triggering previous building will cause it to eject the Human when perhaps I don't want to. I could say don't do it if the Processor is 'Working' or bring back the 'Blocked' bool, but I think this is best. Ok I think that works pretty nicely now. Sorted saving and loading and everything for this new HumanOutbox for the Processor. The Station is now completely unconcerned with Transports from the perspective of the Station script. I see no reason why this won't work, though of course it's a big change so I'll be nervous until I see it working a lot. Next on my list that I want to try and achieve today: - Make Stations use Human Counters rather than its own UseCounter. (Difficult) - Set MaxOccupiers for each Station (Easy but tedious) - Make sure this new setup works with old saves, which I don't think it will. But I want to make sure it does or at least that it doesn't bug out and maybe the Humans can just DecideNextMove if they hit a null in the save. (???) - Test and fix. Then tomorrow I want to implement, test and fix the multiple access points and multiple users on verious stations. Hopefully this week I can get that done quickly and get out the Birthing Station, Nappomatic, Couch, Milker and Pacifier and supporting features and have Babies all working properly. Then next week is Arkanos and Magic stuff. I wish I had a bigger team and could get more graphical assets out with each update which would probably really help with marketing. However my tiny brain can only handle one thing at a time, and so I put it to logistics and when all that is done I can focus more on aesthetics. UseCounter to Human Counters. First thing to get my arse moving is to simply delete Station.UseCounter, then the error list can point me in the right direction (saving my brain a bit of stress). Actually this turned out to be really straighforward. Again, we'll see what it looks like when I test it. Set the MaxOccupiers for each Building. At the moment they all have 1 except for the Effigy which has 4 and the Couch which will have 2-3. Pressing play caused an explosion of bugs. Working through them though. Ok, got through all the bugs. Except for Humans who were busy on a station, they are stuck doing nothing. I tried a few ways to fix this, but the best thing I think is just to inform players in the Patch notes that they might have to grab and place a few Humans to fix them. Ok that's smashed my goals for the day. Next on my list is to make a chair work with multiple points of entry and then move on to the Birthing Station and Couch etc. After some thought, adding 4 access points for the Chair is not the most elegant solution. The most elegant solution would be to make it so Humans can walk into it and through it, and I can deal with pathing around it for aesthetic purposes later. Animation can be kept simple. The only challenge I see is having it so they can walk into/through it but the player can still click on it. In other news, Breathedge is pretty damn great until you realize how limited in scope it is. Then it's just annoying and there isn't enough promise to keep me playing. Skillup absolutely nailed it in his review so I have nothing more to add really. Makes me glad that Subnautica: Below Zero is basically finished apparently so I've started that up again and am loving it to bits. Keeping my brain working overtime by playing some Cube Escape from Rusty Lake, will probably continue with that series. Twin Peaks is also really cool. All puzzles and no puzzles makes puzzles a puzzle. Going to leave it there for today and see where I'm at with getting a solution for the Chair tomorrow. This one is simple and elegant so if I don't have too many problems with Colliders and NavMesh then it should be fairly quick. Didn't get the Buildings done last week but I think it's still good progress and I should have them next week. ... Ok had a crack at just switching off the NavMeshObstacle and seeing how it looks/works. It's fine. Nice. That's off my mind and my list then. Now tomorrow I can focus on testing and fixing and getting these new Buildings sorted. Tuesday 2nd: Yesterday was immensely productive and I rounded off the day with a big session of Subnautica. Great fun. Seems finished so I don't know what they'll add between now and full release. Next is to test the Birthing Station. Given the changes I just made, this should work fine now. I also want to see if I can replicate the bug where I think a child occupied a Station and got it stuck. Then I can get stuck into testing my other Reproduction Buildings. Lots of bug fixes later, seems to be working mostly fine. Ran into a lot of issues with Occupations but those are fixed. There are issues with the Human Gate because I stopped handling Transports through Stations. I think Human Gate should have a Processor and work much like the Birthing Station where you get on manually and you can get off on foot or on a transport. Fix, problem, fix, problem, fix and so on. Ok I ran into a bit of a wall with this. All is going fine, except now there seem to be some problems when Humans go on the butchery line. I actually ended up crashing Unity. So there are obviously some major problems with my code. I think there's a loop somewhere (A calls B and then B calls A). I want to do some refinements to the Processor code anyway, so hopefully I'll find it in there. The crash is confirmed to only occur when two Humans try to go into the same Station. (Well, the good news is that the Birthing Station works. A bit demoralized by having to go back to the Occupiers but I'm sure it's something simple.) It's rough because I can't use the errors or the debugger to get straight to the problem. Ok I THINK I might have fixed it by not only checking that the Occupiers list is empty, but also the Processor.HumanOutbox is empty when checking for space into a Station. It still makes me nervous because I'm not sure why it wouldn't work but hey, if it's fixed I'm happy. Ok the Birthing Station is working. However as I was celebrating that, the game crashed again, so I guess I didn't fix it. Etc... Ok everything is working now, along with a functioning Birthing Station. Still nervous that the game could crash at any time, along with my sanity, but this is an achievement. (Animation is all over the place at the moment. Will try to fix at least some of that before releasing another build). Shuffling the Couch to the bottom of the list because it's the first that uses multiple Occupants and has to put them in different positions. And more problems and more fixes. Wednesday 3rd: Started by doing basic checks to make sure the Milker, Nappomatic and Pacifier will work. Next is to test. Added Spells to help test and fix Babies. This week my goal is to complete all these Reproduction buildings and supporting code. Then next week I want to end having done the same for all the Magic buildings. Then I can either work on aesthetics and get an update out quicker or move on to Food production. Today, Subnautica. Thursday 4th: Nappifier and Pacifier work, and I removed the requirement for a reagent in them to keep things simple for now. Friday 5th: Made it so that Babies would poo on the floor at 50 waste so that there is a need for the Nappomatic. The reason for the Pacifier is so that the baby doesn't cry which upsets the nearby Humans. I have it on my list to improve all the Mood modifiers and how it's displayed and everything, so I'm going to brush past this for now. That completes my goals for the week. Pretty light on the devlog and pretty light on tasks, spending a lot of time thinking and playing other games. Put together my list of the next steps. Shelving the tier 3 Arkanos machines for now in favour of finally getting back to aesthetics. My List: - Make Couch and Effigy (new feature: Stations with multiple access points and users in different positions). - Improve Mood system and create UI for immediate feedback. - Improve Relationship system and do the same. - Get into Maya and do some modelling. - Get into Animating so that everything looks and feels better. - Some Optimizations. - Upload big update. - Add Arkanos Tier 3 Buildings. - Add Food industry. - Add Skills. - Add Genetics industry. Then it will be much easier to see what needs improving next.
[ 2021-03-10 11:09:45 CET ] [ Original post ]
Monday 22nd: Ok so I took a week off. Fortunately only had to fix a couple bugs that came up. Besides a couple things I'm going to start with today, I think we can say this build is very stable and can stay up for a while as it is. Played lots of They Are Billions. Kind of lost my patience on the last level. Also played a bunch of Buddy Simulator 1984 and it's cool looking in on the window on the ground floor of watching its mysteries get uncovered. I may continue my investigation but I may just look up the answers as they come because, of course, I need to make Human Factory. Today I just want to slowly sink back into the project and at least get an idea of how the rest of the week will go. Capped minimum Fullness to 0 so they don't 'implode'. (Thanks to Marutzo). Sorted Humans reacting to things when Dead (Thanks to Marutzo). There's a 'GetNearbyHumans' function with the bool 'ExcludeDead', which I had forgotten to actually use when true. Also removed 'Printer' from the text. Can't believe I forgot to do that. You'd think a programmer would be smart enough to do a quick search of the word 'printer' after removing it from the game. Fixed placing Humans directly on Incubator (Thanks to Elf on the Shelf). While I was at it, fixed it for empty Wardrobes as well. Couldn't find any other times where placing a Human on a machine breaks it. There was another bug about the Exporter sometimes showing exports when it's not actually doing that? I'll have to encounter that, or the error in code, myself. And that covers all the bugs that were reported since the last build. Cool. I'm getting no issues or complaints about optimization, so I'm going through my list and shuffling everything to do with optimization to a separate list at the bottom. Found that some Items can have a negative Quality value? And then Zero? Turns out it was because with this file, Human's conditions were 0, so it's fixed with any new Humans and so I'm the only one who will encounter this error. Next I have a pesky recurring bug where selected buildings can become invisible... Turned out it was when the selection got interrupted by a Human or Item. Fixed. Found another really annoying bug where it would cancel the selection if the mouse goes over a button, which is really annoying. Fixed. You can now put items on top of each other? Ok have to fix that again. Also, I think selecting a wall first puts the selection off centre. This is what I mean when I say game dev/bug fixing is like fighting a Hydra. Fixed the offcenter selection thing. Just made sure to round it. Sorted the overlapping thing. The Hydra had a few more heads, but they too were slain until the Hydra retreated into its cave. I think selections are pretty stable now. For the rest of this week, my goal is to add a bunch of Buildings. I have exactly 10, all Vegod (with some moving to Tier 2). Tuesday 23rd: Today's goal is to finish as many Buildings as possible out of the ones that currently exist. This week my goal is to complete 10 of these Buildings which are associated with Vegod (Furniture and Reproduction). I'm actually doing this organically within the game by waiting for some Humans to Breed. Before getting to any of that, the Hydra returned in the form of the Camera. Quite a few bugs I wasn't aware of here. Fixed them and that warrants uploading a build at some point today. Item Splitter not working? How did I miss that?? When did it stop working??? Fixed that after some struggle. Ok so I haven't done any buildings yet and I'm half way through the day. If I have 3.5 days to do 10 Buildings, that's roughly 3 a day. I'll take a short break and try to do 2 of them by the end of the day. Sorted out some major problems and got as far as breeding to unlock Vegod's final tier. No new Buildings today I think. Wednesday 24th: Starting today by doing the last few tasks and then uploading the build. Ok so the first machine on Vegod's tier 3 is the Birthing Station. I'm going to watch and wait until another Human is concieved and then save it so I can begin testing from there. Finding a lot of bugs and things to fix by just watching them here. Putting them all on a list but focusing on the birthing station for now. Removed warning from tier 3 except for Vegod and Arkanos. Fixed Item colliders being off when coming out of a container. Hiding face features when a Human is headless. Mojo now increases faster for Humans in Sexy Clothes. Fixed a bug on deleting gas vents. Don't know why this needs to be an IENumerator with a 1 second delay anymore but I won't change that just now. Trigger previous building didn't work one time and I don't know why. Just tested and it didn't happen again so we'll see. A building got stuck being occupied by a user again. It happened with a newborn so I think it might be something to do with that, but I don't know what. Mood modifiers need a big run of inspection and fixes. That requires full attention. So the next thing is to test and fix my newborn and Birthing Station and keep my eyes open. I can go through some of the other Buildings while I do this. After some trouble, got the Chair working. There is more work to be done here to make sure it can be accessed from all sides. This will be a fair bit of work but I got it working as long as there is plenty of space in front of it. Got my next set of tasks laid out neatly in front of me. Thursday 25th: Found an issue with DNA and a couple other things not updating properly. Was working fine for me but it seems related to the bug someone reported. They also reported getting nothing from the Tailor. Which is funny because I seem to be getting 2 basic clothes per craft on the tailor. Very strange and I have no idea why. Loaded a save where it had lots of bugs because of things happening before they're quite ready. Fixed an issue with loading HeldItem of Humans and I think fixed quite a few things by pausing time until loading is complete. This producing items twice is turning out to be a real puzzle. So I can put a debug where the script to make it is called, I can also but a debug on the script to make it where the thing is made. On the second one, when you click on it it shows you where it was called from, so I can confirm. For some reason, the second debug always happens twice and tells me its coming from the same place as the first debug. Very confusing. On the plus side, I have a Human ready to give birth and all the machines ready for testing. I thought it might be something to do with the Container or something triggering it, but according to the debug.log it's coming from the Update method when Progress1 >= MaxProgress1. Proper baffled. AHHH. It was because I had placeholder Barman clothes using Basic Clothes and the game was finding 2 items that matched the recipe and so did it twice. Table working fine. This one is easy. I have it on my list later to make Chairs search for nearby Tables and give a Mood bonus if it finds one. Bad news is the same Humans didn't breed this time, I guess there is some random chance to it given the random nature of their wandering patterns. Funny how, in this case, a baby was never born because his parents chose different random locations to wander to in their spare time. So now to sit and wait for a baby to be born so I can test my reproduction machines. Thinking of simplifying the Birthing Station. They could probably come out of the same exit, with it being up to the Player to split them up. This will work much nicer with the new system I want to implement with lists of Occupiers instead of single Occupiers on Stations. That's going to be a big one. Had a go at cleaning up the animations. Failed, so returned to old way. Still, I understand a bit more about how it works now. Sorted the Mine out. Just had to switch it on basically. Ok so now the next thing for me is to do this big fundamental change to Stations. This could be difficult, could be easy, but will require my full attention. Taking a short break first. Friday 26th: Ok so it's unlikely I'll meet my goal of 10 Buildings this week. I have, however, fixed a lot of bugs and I think I've long term solved the problem I was having with handling some of the more awkward Stations. So today my only goal is to implement this new system where Occupier is replaced by a list of Occupiers so we can have multiple users on a Station. The new Occupier system. First step is changing it in Station and Buildingsave. Then I can go through each red warning and modify the script accordingly. For example the first one that came up was in Human.ClearTarget();. And instead of 'if station.occupier == me then station.occupier = null', we do 'if station.occupiers.contains(me) then station.occupiers.remove(me).' More like that. I need to determine 'MaxOccupiers'. I'll need to write this for each Building. The Station script itself is the most tricky. Station.Go initiates things, and I set that up to ask for the Specific Human its doing. Then in the update we tick down the timer and do the thing. For example the Treadmill lowers Human Energy and raises Power every frame until the Station's UseTime runs out. For this I'm going to use a 'Foreach Occupier in Occupiers'. So if I did that for the Effigy, it could successfully handle 4 cultists generating Mana at the same time with only this change. However, they would all reset the use at the same time. So 'UseCounter' should not exist on the Station but we should use the Human's Counter. So on 'Go', we set the Human's Counter to the UseTime of the machine and use that as our timer. So with the Effigy, each Human would come and do their 4 seconds independently of each other. Other machines which will use this multiple Occupant feature: - Birthing Station. In this case, we would add both Humans that come out to the list of occupants and the list must be empty before we do anything else. Simple. - Couch. This will be like the Effigy, simply offering a small Mood boost. - I could do it for the Forest and Mines potentially, but otherwise that's it for now. - I could make a machine that would do different things to 2 Humans or combine them or something, but that would be handled in the processor anyway with the Station merely telling the Processor to start. Ok so that's all the error reports fixed except for an instance where the Occupier is ejected from a Food Container to go straight to a Chair. So technically it should work the exact same way right now. I feel like I can make vast improvements here. I'm going to make the Station.Occupiers work in a much similar way to Container Outboxes. So when we're done with a Human, we add them to a list, and the machine is considered blocked until that list is empty. Got pretty bogged down with that change to Occupancies. Thinking of the simplest way to make it work and to be honest just giving myself a headache. See you next week.
[ 2021-03-01 16:45:16 CET ] [ Original post ]
Patch notes: - Fixed potential issue with DNA values of items. - Fixed bug with the Tailors. - You can now complete Vegod's Tier 3 quest, but be aware these Buildings are all subject to lots of bugs. - Chair should be safe to use. Placing a Table near a Chair will increase the Mood bonus for using it (5 for using Chair, 10 if a Table is nearby). It's still a bit buggy, make sure there is free space in front of it. This will be improved shortly with multiple access points. - Table is now safe to use. - Mines now work. Ore is currently only useful for selling and Coal is a great source of Power. Working on the rest of Vegod's tier 3 Buildings and fixing any bugs we find as I go. Thanks to all who have been reporting bugs and speeding up the progress of the game! Besides the tier 3 Vegod buildings everything should be working fine so please let me know if it isn't.
[ 2021-02-25 14:34:36 CET ] [ Original post ]
Patch notes: - Massive bug fixes to the Camera. This Building is now completely safe to use. - Massive fixes to Item Filter. - Hats and Shoes no longer spawn on top of themselves continuously. - Gas Vent range display adjusted. - Min Fullness now capped at -10. - Saving/Loading nutrition and taste values of items now works properly. - Cleaned a few more bugs that I'm surprised you guys were putting up with for a week. Game has actually been more buggy since the big update! Should be much better now. More fixes to come in the next few days as I implement the current late game buildings.
[ 2021-02-24 10:39:50 CET ] [ Original post ]
- All community reported bugs reported have been fixed or addressed. If you find any bugs, please tell me. - Selecting and moving multiple buildings has been thoroughly bug fixed. More improvements on that in the future. Note: Creative mode is highly buggy because it contains Buildings that shouldn't really be in the game yet. Next couple of patches will add about 10-20 Buildings to the main game. See you soon!
[ 2021-02-22 15:13:20 CET ] [ Original post ]
Monday 8th:
So today I have a migraine, and of course it's my own fault. Spent the day doing some tidying and had a long, less rare these days chat with my Dad. The antalgin for the migraine has just kicked in and now I just have pure, lovely but completely debilitating dopemine running through my body (the effect of having a migraine and then not having one).
Essentially I just want to make the current build as clean as possible before I upload it. Going to do the optimization fixes (highlighting and 'UpdateAppearance') and then test the game again from start to the current finish. I'll also spend some time trying to actively find bugs and recording some gameplay.
Not planning on getting much done today, but I'm going to at least engage with the problem a bit. Writing helps:
So currently the 'Highlighting' is handled by the 'Building' script in the update method. It's if/else spaghetti. Definitely not good. Each is casting a ray, and is contextual to having the mouse over/having a relevant tool equipped and so on. Ideally, I want to move all of this out of the update method, with highlighters switching on or off when their state changes.
So, when I mouse onto a new object, we should Highlight it and unHighlight the previous object. Also highlight it when I select it using the Canvas Selector, and unhighlight it when deselected.
We start in 'Controller' where we cast our ray. Switching the Highlighter on would be easy 'hit.gameObject.GetComponent
[ 2021-02-22 14:39:39 CET ] [ Original post ]
What's New?: This is a major update because the game has changed quite a lot. Massive improvements to optimization, way fewer bugs and some new content. New content includes some machines, but also Humans will now breed under the right conditions. Caution: Unfortunately your save files are very unlikely to work with this update. However, the game is so different now you would probably have to redesign your Human Factory anyway. New update means new potential for bugs. So, please, if you find them then report them and I should be able to fix them with hotfixes. What's next?: This update lays the foundation for rapid progress and new content, which I can release as and when it's ready. My priorities for the next update are: - Hotfix as I go. - Add all remaining base machines and items with placeholder art. - Improve animations and cosmetics. The best is yet to come! Cheers, Otis
[ 2021-02-14 12:53:06 CET ] [ Original post ]
What's New?: This is a major update because the game has changed quite a lot. Massive improvements to optimization, way fewer bugs and some new content. New content includes some machines, but also Humans will now breed under the right conditions. Caution: Unfortunately your save files are very unlikely to work with this update. However, the game is so different now you would probably have to redesign your Human Factory anyway. New update means new potential for bugs. So, please, if you find them then report them and I should be able to fix them with hotfixes. What's next?: This update lays the foundation for rapid progress and new content, which I can release as and when it's ready. My priorities for the next update are: - Hotfix as I go. - Add all remaining base machines and items with placeholder art. - Improve animations and cosmetics. The best is yet to come! Cheers, Otis
[ 2021-02-14 12:47:30 CET ] [ Original post ]
Monday 1st:
First is sorting the Telebox and Televat for the first time. They are all coded up, just need to sort the interface for connecting the Teleporters.
At some point I'm definitely going to overhaul a lot of the non-standard building mechanics like the 'Teleporter' wire. For now, I'm just going to pretty much copy and paste the Automation Wire code.
We have our first successful teleportation between two places! I feel like Jeff Goldblum in The Fly.
So this interface and the whole business of Highlighting Buildings is all wrong. Instead of adding more spaghetti to make it work for Teleconnectors, I'm going to skip that for now and keep moving on.
Did the last touch of shuffling aside the UI when using the Telewire. So that's that for now. Next up is the Human Splitter.
Human Splitter working! It was very easy because I just check for Transport.Subtype == "Human Filter", then do my CommonFunction.CheckHuman(...) which checks a Human against a Human Filter.
Did a stress test with multiple Humans and multiple items on conveyors. And... yes! Works great! I think I might be good at programming!
The only problem is a spike which bring the frame rate to sub 60 everr 35 frames, and more depending on how many Humans I have in the scene. I feel like this is something I can fix over time, and I think the main problem is in 'UpdateAppearance'.
One idea that immediately springs to mind is to not run 'update appearance' unless the player is looking at them, like animation culling. However, I would then want it to immediately do it when I look at them again if they have one queued up. The UpdateAppearance code itself could do with a lot of tweaks though, the first one likely coming from me deleting all the old cosmetics and re-instantiating them. I could probably just do that if a change has been made, or learn some new black magic to avoid having to instantiate/delete at all.
Adding a note to optimize both Highlighting of Buildings and UpdateAppearance. I'm sure a lot of the garbage in the GarbageCollector is made in 'UpdateAppearance'.
Next up is the Camera. Looks like I have the most complicated Buildings on the list first. I've technically done this one but it was one of the last things I did before this big overhaul.
Camera is working too! Another great day of progress. A few troubles here, as with the Telewire, with highlighting and making these components visible/invisible, but I will fix that all together.
UI for the Battery, again I'd already done this I just needed to make a few adjustments.
Injector working fine.
Leaving the Gas Vent for tomorrow because it's a tough one. Again, already done, but need to test and fix it and update to any new code.
Ignoring the Freezer for now. It will really apply to the new system I'm going to use for decay over time.
Clothinator working fine.
Mine will come later as I haven't made Coal yet. Essentially it's a copy paste of the Forest so I'm not expecting any problems. The challenge in incorporating this is more to do with balance, and it currently doesn't have much use.
Shuffling the Auto-Fabricator till later because it really is a pointless building at the moment.
Could pretty much get started on the trailer and do one more run of testing and then upload the build. Got myself a big list of things but none of them are particularly urgent. Need to level the waters a bit and have a clear mind towards what to do next.
Sorting out my chaotic list a bit. Bundled up all a bunch of bug fixes and things to test and do in my save file which I expect to take 2-3 days. In case you're curious:
Random Fixes.
- Sort MaxProgress on Blood Drainer.
- TriggerPrevious on ConnectingTransports.
- Sort connecting and disconnecting transports when moving multiple objects.
- Do 'TriggerPrevious' on EmptyChecker (need to tag all 'EmptyCheckers')
- Ignore Hitbox collisions of items when building transport from a transport.
- Fridge bugged if the first item in there is not food.
- Animate death.
- Add automation inpoint to Human Gate and implement Camera/Human Gate setup.
- Add 'Condition' to Items, 100/100 on creation.
- Update stats: ActualBeauty = Beauty * Condition / 100.
- Start making Forager clothes in base.
- Add Coal and add Mine to base.
- Make Babies poo at least once before childhood.
- Improve/Fix relationships.
- Tidy Delete Function.
Some of these are pretty chunky but I have no idea how long each will take.
After that I think it would be wise to optimize Highlighting (as it became fairly urgent to do so today) and cleaning up the Human UpdateAppearance which I think will drastically improve performance even more.
This is good because at any point in this list, if I find it's suddenly February 13th and the update is scheduled for tomorrow, I can pause, spend a shift purely on testing and fixing and upload the build on time.
Then Animations, Skills (new system and Buildings to go with it) and Vegod's Tier 3 Buildings, which would be a whole update in its own right.
Great Monday!
Tuesday 2nd:
Going through my list from yesterday. 1st done.
First tough one was fixing the connections when moving multiple objects. Took me a while to realize I had to set In.Out and Out.In to null before resetting them, but also In.Out.In and Out.In.Out. Yep. Works now.
This all takes place in the common function 'ConnectPorts'.
In the reviews I have someone mentioning that Copying and Pasting causes a lot of issues. The code here is very similar, so I wonder if fixing this has fixed that. Seems fine after a little test, so either it's fixed or I'll have to run into it naturally as I play.
I had already put 'trigger building' on the Empty Checker when a Human exits.
Don't need to 'Ignore Hitbox collisions of items when building transport from a transport.' because I already made it so items stay at the back of the transport and don't interrupt Building.
Humans checking for Food in Food containers was wrong. Fixed it.
Added code to animate the deaths of Humans. We'll see how it works as I play.
Human Gate already had Automation, was just hiding in the mesh and so I moved it.
Built my Camera next to Human Gate and attached the Automation. This way, the Human Gate will only Summon Humans if there are more than 10, therefore I should maintain a steady population.
Playing a bit and my camera Human Gate setup is working fine. However, my base is using way too much power and it's difficult to balance that. I think this would be greatly offset by adding Mines and Coal, but I might have to reduce the difficulty a bit here. It probably wouldn't be too difficult to figure out exactly how much Power is consumed by a Human in a full Butchery Line, vs how much Power the average Human produces during their life. I think it should be about balanced, with more power heavy setups using Teleporters and such being for players who really make an efficient base.
Anyway, that's more progress.
Making great progress today, things are easier than I thought they would be, all thanks to preparation and planning.
Next up is making a robust system for durability/perishability on items. At the moment I'm just kind of dragging down the numbers as the item perishes, but I should have a durability/100 kind of thing with each stat multiplied by durability/100. Fairly straight forward for me now having played so many games and learnt so much coding. Fairly meaty task though still and will probably be all from me for today.
Planned next few days. I think tomorrow I will do what I want to do with Relationships and the Delete code, tidying them up. Then Thursday I think I should be able to focus on optimizing the Human Update and Highlighting. Then I have Friday as a wild card to test and fix. This means I should be ready to think about uploading the build any time next week from Monday, so if I am ahead at that point I will research into making a separate 'beta' branch like I've seen in other games for newer less stable builds and I can upload it there right away as I test and make the trailer next week.
Now time for my afternoon nap before finishing the rest of my goals for the day.
For Item Condition/Durability (going with Condition), I actually need to remember all the original stats of the item when it is. So for example Value = Condition/100 * XValue. This means adding new variables to the Item to remember its original stats.
I realize I don't need to do this for saving, as all I really need to remember there is the original 'XValue'. Just need to make sure I am only saving and loading those.
Since the Item is set to inactive when in a Container after it is spawned, I hope it will update its condition and stats via its own script before it becomes inactive. In fact, I made sure of it by effectively pasting those lines of code in the loading script.
So that's that for Items. Now the same for Humans. With Humans I already have ActualStats, so I can just update those.
Made sure to use the correct stats when making Items from Humans.
Reset my population of Humans and set up the Wood to go to the Tailor so that we will start making Foraging clothes.
Made the Mine and Coal and built a Mine into my base.
Made Babies start with 45 waste over 40 in the hope they will Poo once before they reach childhood.
Wednesday 3rd:
I was thinking of overhauling the Relationships (Name, ID, Rapport) but actually I think it's fine. It's working well and I don't see any ways to fix it.
So, how do I go about making it so that Parents and Children have a bias toward each other?
Well, I guess it would make best sense to do this at birth, and just give them a bunch of rapport to start with. It would be nice to identify these for later to help with dialogue options, so maybe Relationship should also have a 'Tag', like 'Mother', or 'Child'.
Not doing the tag thing for now, as that would come with a much bigger plan to improve dialogue and Human interactions. Instead I just need to add the relationships on conceiving the Baby, with both parents adding the Baby and the Baby adding both parents.
While I'm here, I figured it would make sense for mating to cause an increase in rapport (which encourages monogomy) as well as feeding.
So that's pretty much what I wanted to do with Relationships today.
Next on my list is improving the Delete function. Again, it doesn't feel very urgent, but I need to fix the issue where WallFrames do not disappear when deleting objects.
The code here doesn't seem great, but it's not too heavy on processing and doesn't get called too often so it's not a priority to uproot and fix that now. Just needed to add some code to check for a 'Wall Link' when deleting an object and set it to inactive.
I was going to overhaul the delete function a bit, especially now that I'm copy pasting from 'DeleteBuilding' to 'DeleteBuildings', they should use the same code. However, I'd like to approach a bunch of these controls wholistically at some point.
Ok, that's all I had for today, and it's 1pm. I actually lost 'Test and Fix Gas Vent' on the list somewhere, so I'll do that now.
Pretty much works right out the box, as this is one of the more recent new Buildings from before the overhaul. 1 issue is that they end up getting the effect more than once depending on how many floor tiles they are overlapping with.
Ran into some bug with Forager Clothes due to sometimes being referred to as Foraging Clothes.
Ok so:
- Cam Zone not saving/loading.
- Need to improve camera controls a bit, first thing being I shouldn't unequip the tool when I finish a click-drag, but only when the tool is cancelled normally.
- Smart Splitters should have the option of inverting.
- Gas vent loads in an awkward position (probably due to old code where it would try to attach to a Wall or something, same issue may exist with the Camera).
Hope to do this by the end of the day. Then tomorrow I can focus purely on these tricky highlighting and optimization issues. I'll probably be able to test and fix Vegod Tier 3 before Feb 14th.
2 down, 2 to go.
Gas Vent was loading awkwardly because it has a NavMeshAgent to help it figure out its range. Made sure to have it off by default, and only switch it on and off before and after 'GetRange'.
So I think Smart Splitters should have a little button above the Item Splitter options that switches it so that the filtered Item will go through the middle and the rest through the side. This means adding the UI, programming the Button to flip it, adding the flip toggle, code saving and loading it, and write wherever an item filter is questioned we ask if it is flipped and change the toggle. Bit of a meaty task and a new feature I just came up with today, but I'm in great time.
Going with a Toggle just because it's easiest to make and fits easiest in the UI.
Ok, got that done. Not too bothered to test it right now.
Another great day so far today!
Human Condition wasn't saving and loading properly. Just neglected to finish when I did it. Fixed.
Thursday 4th:
Taking an impromptu day off. Going to play some games and let my brain reset a bit. Got this optimization to do and as long as it's done by the weekend that's an immensely productive week.
Grabbed They Are Billions on sale. Surprisingly good. Very satisfying and seems like its filling a gap in the market by being an extremely competent and well balanced Warcraft/Starcraft clone. And, of course, the unit caps almost right out of the window, giving great freedom. So, yeah, more of that today. It's 'research'.
Did a backup of Human Factory, since I haven't done one in a while. Whenever I realize I haven't done it in a while, I get the fear of God in me for a while until I do it. I've never experienced losing too much in one go, but I've seen the horror in the eyes of those who have.
...
[Following text not related to making Human Factory]
Ok so it's Monday now and I lost almost my entire weekend to They Are Billions. For a number of reasons this game is scratching some hard itches for me.
Essentially it's Age of Empires but with Zombies. The city building feels a lot more like Caesar type games. You can imagine Age of Empires with the housing limit switched off and made more flexible, so the limits of your colony and troop count are based on how much territory you can defend.
The number of zombies coming at you can certainly be unfair, but at the same time, your creativity in strategies is often rewarded. Can I send out one of the fast cheap units to try and kyte the Zombies in a circle? Yes! But of course this can cause the hordes to clump up, meaning disaster if your efforts fail.
I could write a long review talking about all the interesting things about this game and why it is perfect for my playstyle and what I like from this type of game, but my job is to make games, not analyze them.
Anyway, losing a day and a half of work and an entire weekend to a game is not new for me and not something I'm going to beat myself up about. I'm a gamer with true, disturbing, life defining levels of 'gamer cred' and if I'm going to make a career out of this, I don't see why that should change. What is it that inspires a man to spend literally 24 hours on the same level?
To accompany all that playtime I learnt a lot, mainly from Night Mind, about ARGs and some really creative things. Very cool.
[ 2021-02-09 10:04:13 CET ] [ Original post ]
Monday 25th:
Added a 'TargetRange' to Humans and sorted for saving and loading. This way, I can adjust it so that they don't have to go walk into the target Human.
Also, I made it so 'MakeHumanWait' occurs on 'MakePath', since it doesn't really need to occur anywhere else.
Tough start to the day with bugs happening and I couldn't figure out why. Turns out it was because I forgot to check if the child of the Human is Hungry and underrage before breastfeeding it.
Ok, got it working. Only thing now for all of this is to smooth out the animations, which does involve some code. For example, when a Human reaches a Baby to feed it, at the moment it just does it instantly but I need to add another stage where it waits for an animation to complete. Putting it on a list for later, along with a thorough look at the 'Delete' scripts, which should fix a minor bug where the Transport Frame on the Walls remains after deleting the object. For now, I want to get things functionally working.
Still a few things to fix here, fixed a ton of things by making sure to reset the 'Counter' of Humans when they are set to 'Waiting', so that they don't instantly give up on Waiting. Also, 'return;' after DecideNextMove() so they don't instantly arrive at their next destination sometimes. I guess these should have been obvious but for me it takes a while. Now it's looking good though. Mating too. Wonderful.
Ok, running into tons of problems with multiple Humans stacking up on the line and the human gate.
Seems to be mainly to do with the Human Gate. And actually I think the problem is with 'TriggerPreviousBuildings'. Really need to clean up what happens between Transports and Stations and what happens when things are Blocked etc. It hurts my head and enrages me just to think about it.
.... So the when the Human was dying on the Blood Drainer, 'ClearTarget' was clearing the Occupier for the Human Gate because that was still their Target (Target is reset on DecideNextMove). Made sure to clear Target upon reaching a Station, since DecideNextMove doesn't happen here.
These new coding methods I'm employing are more efficient, easier to debug once the solution is discovered and better optimized. However, it can be harder to find out what the problem is sometimes. It's definitely hard mode, like riding a bike without stabilizers.
Really stressful day but it ended with all Humans interacting properly and stacking up on the butchery line. I have some minor but chunky tasks on the list but tomorrow I'm going to see if I can plough ahead with the content and get an idea of how close I am to the next Build.
Tuesday 26th:
Starting with a few fixes. Game crashed at midnight because the colour value was NaN. So I called her and asked her why she was the colours in my game. She said 'it's because you're giving Unity a null value, you can fix it by just getting rid of a keyframe here'.
Got a huge grin on my face as I realize this is the day I start ploughing through the content. Really happy with being able to shift click to just move pieces of my factory without effecting the floor.
More fixing here and there, but on the whole everything is working very smoothly, and with 6-10 Humans and a full Butchery line in action, the game still runs at a super high frame rate! Very pleased.
I feel like I went through the fire a little bit with very stressful coding work, but took a break, span around and kept at it and by the end of the day it was pretty good. Now the progress today is much more satisfying.
Now to have a look at the price for each Building and adjust them a bit. Making everything a bit more expensive because **** you.
Realized I could use 'TriggerPreviousBuildings' and 'TriggerBuilding' on 'OnTriggerExit' on my EmptyChecker Collider. Also on Grabbing the Human. This was to fix an issue where Humans would get stuck on an exit if blocked.
Ok, a whole ton of fixes and successes as my base exponentially expands.
Last thing I ran into was a problem with death and dying. Long story short I have to fundamentally change this setup. So far they are not staying dead because they are getting caught on 'SavedHP' which is not < 0 and so they start regenerating HP. If it was working, it would surely cause problems because they would be running 'Kill' in the update every frame while below 0 HP. Shouldn't even be assigning to savedHP here as that's for the invincibility potion, but the savedMood still applies. So, yeah, complete overhaul. I'm going to make a function on the Human called 'Damage(float dmg)' which will damage the Human and kill them if it goes below 0, so that HP loss and death are tied together and don't have to appear in the update. Then it's here in the same script that I can save mood. (Saving Mood is important because it effects the Quality of certain items produced from that Human). This is opposed to simply lowing the HP from the Processor.
Finished the day by making it so the Human explodes when fed too much!
Absolutely immensely positive week for Human Factory so far.
Wednesday 27th:
Continuing the trend of yesterday, ploughing through content getting it fixed nice and quickly. Leaving the more complicated buildings for later.
I've made everything quite expensive, so it's taking a while to build everything. I could cheat, but I'm actually having fun watching that number go up and buying things as they become available.
Had quite a few problems with the Forest, mainly because a navmesh was being generated inside the object which was causing problems. Fixed.
Lots of progress, lots of building, lots of fixing. I had a difficult enough time just thinking about how I wanted to design my base.
Hit a bit of a wall with Nav Mesh Modifiers being generated inside Buildings now. A while ago, when I had to update the navmesh stuff in Unity, instead of replacing the NavMeshModifiers on each Building I just got rid of them and it was working fine. But it seems now I see the problem with it, and will have to go through each object and add the NavMeshModifer/Obstacle.
Ok I didn't really have to do it for all Buildings, I just did the ones where the Human enters and may be a bit tall (Forest, Toilet, Shower).
Looking great. Another very productive day. Update confirmed for February 14th at the latest!
Thursday 28th:
More good progress today, sorting out a bunch of bugs with the Fabricators.
Thinking about Recipes. The easiest thing from a gameplay perspective at this point would be to simply have an outcome for each thing that comes out of the Gutter and Skullverizer. I guess I could leave it up to the player.
Lots of base building today, pretty happy with it.
Fabricators (Drugs, Clothes, etc) are all working great, along with the Forest. Next is to debug clothes (some issues with Colour).
Friday 29th:
Clothes and clothing system all works well. Had some more issues with Colours but it's all good now. The biggest challenge there is actually deciding how I want to set up my base in game, so I'm just keeping it simple now and moving on to more things to test.
Made a list of all the remaining Buildings to save myself some energy as I go through. Going to go in and test all of these in the order of the list and get this done. There will be more Buildings that I have yet to set up the ability to unlock, but this is a good chunk to be getting on with.
So, before I start playing and building up my base again, I have this list of Buildings to test and fix. This will be my mini goal for the weekend:
- Telebox/Televat.
- Human Splitter.
- Camera.
- Injector.
- Gas Vent.
- Freezer.
- Mine.
- Clothinator.
- Auto-Fabricator.
Before I started the big overhaul of code and everything, the Televat was the one I stopped at. So it's nice to have come full circle now.
[ 2021-02-01 12:27:58 CET ] [ Original post ]
How many times have you played an automation game and wished you could just move a section of your production line to fit in a new station?
Don't cry, we know it sucks having to delete a perfectly functioning production line just to fit in something new...
...that's why we've made it you can move a whole portion of it! Weee!!! Check it out!
[ 2021-01-26 17:40:55 CET ] [ Original post ]
Monday 18th: Ok so last week was cool. Still demoralizing redoing basic mechanics of the game, but satisfying to see it work well and very happy to make brand new progress with Mating and Babies. Before jumping back into testing, there are some chunky things on the list. First: Set the 'HumansOut' Outpoint on each Processor. Need to go through each Building Processor and set the Outpoint used for Humans. Brainless work. Before getting onto the Item Filter UI and coding I did a bit of testing. It seems it's bugging here because when the Human dies (in this case from the Blood Drainer) we do 'Kill', which runs 'Clear Occupation' to clear any Buildings they were on their way to. This is so that, if the Human dies or is grabbed or whatever, they will unoccupy whatever Building they were going to. If they are currently on the Blood Drainer, when the Blood Drainer tries to eject them Occupier returns null because it was cleared on the kill script. Before, I had an exception where this wouldn't happen on Buildings with Processors, but that definitely won't work for everything. Solution: I don't need to check EVERY building a Human might be occupied to to clear it. It would always be related to their 'Target'. So I ought to re-write and improve this script. I need to only clear some Occupations on 'Kill'. If the Occupation is cleared by looking for the 'Target', rather than checking all Buildings, this won't occur because on Conveyors and Processors, the Human will have no 'Target'. This took me a while to figure out but this change would hit 2 birds with one stone. Pretty fun and interesting bit of puzzle solving which is hard to explain. 'It just works'. So: 'ClearOccupation' gets renamed to 'ClearTarget' (this also helps me find all instances of it by going through the red errors). Here, instead of looking for all Buildings, checking if I am the Occupier and if so, clearing it, we say 'if target != null' and then if it's a Human that means they were waiting for Me so they can DecideNextMove, and if it's a Station (its parent) then set that to null. This won't interrupt anything happening with stations that they entered via Conveyor or being placed, which are the ones that can kill them. If they die on a Conveyor they have no target and are occupying nothing. So this just works! What if they die while on a Manual Station, like the Treadmill or Toilet? For the Human Gate, it should just send them through normally with them appearing to die on the Conveyor or after walking through. For the Toilet, they would die immediately on exit. For the Treadmill, and any other Continuous Station, I just need to include 'HP < 0' to their list of things that make them stop when they complete a cycle. ClearTarget happens on Grabbing the Human, when it dies (HP < 0), at the beginning of DecideNextMove for good measure, and finally it will occur on a few Spells later down the line. Very nice, very clean. Happy to have that under the hat. Good start to the week. Testing and still acting a bit weird. No errors though. Detective hat on now. Had a really rough time figuring out a couple things. Found it in the end. Great! Got them smoothly going accross the conveyor line and all the machines on it. Stacks up nicely as well. Next, before I do the Item Filter UI (which I will do first thing tomorrow I think) I can see that the Chopper isn't quite working. Doesn't know when to stop. So, next is to fix that. I think the problem is that the Size of the Human, which ticks down with each Chop and ejects at 0, is being updated in the Human's 'SlowUpdate'. It still works in the event of the Human running out of Parts, so that's great news. So what does the Human's SlowUpdate do? Every second, it updates their 'Actual' stats, reducing them for teenagers and adding the bonus. It also updates their Speed. Also, the part causing the problem, updating the size based on the Age of the Human. So, maybe I should use something other than 'Size'? I could easily just set the Human's Size to set the Chopper's MaxProgress and then aim for that. But then Players could pick them up and put them through again. I could disable the Human (works for the Grinder), but then problems may arise if I change the animation. I could turn off the Collider so there is no way of parting the Human from the Chopper once it has started, which would solve the problem of the first solution [... doing this]. Did the same for the Grinder while I was at it, just to cover myself if I change the model/animation and have to discover this all over again. Ok Success with this too! Everything from the Human Gate to the Blood Drainer to the Chopper is working! Now, the next thing to build in the base is definitely the Item Filter so I can start grinding my Offal. So, nowhere to go but there for the moment, then I can consider expanding my base! Tuesday 19th: Ok, Item Filter today. Big change here is that it's actually simpler than before, with only one Item being filtered per Item Filter. Using a string for 'Filtered Item' is great, very easy to save and load and everything. The Item List will be generated in the Unique Panel. Ok nice, got it working! UI very simple and easy to use. Saving and loading nicely. I noticed a couple issues: one of the Humans managed to get off the Conveyor somehow? Also, I think there's one Item that comes out of the Chopper that is returning null, so I put a debug on it so I can maybe find out which one it is. One thing at a time... The null item from the Chopper was an empty Item in the HumanParts List on the Human which was blank because the prefab had 2 empty spaces. Fixed it by removing them on the prefab but also made sure to clear it when it is first created on the Human script. Next is to add Human and None as options to the Item Filter. Cool, did that, plus a few other things to make sure it all works at the Transport's end. Currently switching to the correct Outpoint based on the Cargo and Item Filter happens in my wonderful 'OutCargo' script, and on 'FlipOutpoint', which occurs to make sure Transports with multiple outs cycle between them, I made it so it doesn't happen if there is an active Item Filter on the Transport. Getting really stuck on a silly issue where the item coming through the Chopper is set as inactive until it reaches the next Transport. No idea why. Looking at all instances of setting the item as inactive in Transport, Processor, CommonFunctions, Container, everywhere I can think of, and no idea where it might be triggering. Seems in the code to 'MakePart', the part where is says 'If we're adding to a Container, do that and set the object as Inactive to make it invisible', that happens just after Container.Do, which is where the code to set the Object as Active is stored if we are going to a Conveyor. Anyway, it's fixed. One step forward and two steps back, I call it dancing. We're making progress. Also, as a testament to all my work, I have a fairly big base and for whatever reason, the 'Garbage Collector' has quietened right down. Running at >250 fps! Veeery smooth. Ok, Item Filter is done! Fixed a little issue where a blank Building would appear in the centre after selecting it from the Build menu and before mousing off the Button. I want to simplify the Decapitator. At the moment, it puts out the Head and the rest of the Human on the same Outpoint. This is just asking for bugs. Should be a lot simple to do it like the other Buildings, with a Container and Outpoint separate for the Head. This means throwing out the design I have for it and using a placeholder. This also adds to the need to jump into Maya before I release this update. It's 4:30 so I'll make this my goal for today and then I have a clear runway tomorrow to test and fix through more of the content. Ok, did the new Decapitator, even did some animation so it works better as a placeholder. The code was mostly done, I don't know when I did it but it was all ready, just had to set up the Outpoints properly in the Editor. Ok, clear runway for tomorrow. Next on the list is 'Test and Fix'. Wednesday 20th: Went to meet a lovely jeweller to make our wedding bands. Now, back to making my factory farm for humans. Fixed my way through a few things and now next is some bugs with the Incubator. Found some immediate fixes for the Incubator and finished working on my base a bit for a better testing environment. Found another bug, the 'Remember Source' on loading Processors is bad. Need to change a fair bit here. Essentially, it looks for an Item with the matching ID. I did make a 'Processor.CurrentHuman' but I'm not using it in the end. Problem is errors could occur if a Human and Item has the same ID. So I figured, why not make it so they never have the same ID? Ok, so fixed a bunch of files and now everything on this end should be straight forward and simple. Incubator is now working fine after a few fixes. More fixes. Got a little list of cosmetic fixes to start tomorrow with. Human script ramps the Garbage Collector right up, so I know where to look when it comes to improving performance. Then it's on to more testing and fixing. Nice. Not a hugely productive day today, but not bad. Thursday 21st: Stopped sound and animation on Stations when a Human is removed from one. Fixed a minor bug on the Grinder progress bar. Checked all instances of 'UpdateAppearance' for the Human to see if there were any redundant ones. There weren't. Next one is a meaty task. When I changed the ID system today, I noticed I could clean up my script a bit by using my 'CommonFunctions.MakeItem' in a few more places. I can locate these places by searching for nextid += 1, since this should really only happen in one place using the Common Function. First one I locate is for the Fabricator. This is a tricky one to start with because it does have a unique piece of script in that it takes the Human who made it into account when effecting the quality. So I have to think a bit about how to do this. Clothes was another tricky one. Redid the calculation for Quality, with a list of floats being created and the average drawn between them. So, if Obj1 is a Human, we add its quality to the list. Same for Item in Obj1 and 2, and finally if Maker != null (the Human making the Item), a specific skill of theirs is added to the list. For example, if the Building is Forest, add their ActualDexterity. Food and Clothing also sorted. Ok that's done. The effect of this is just slightly cleaner and easier to manage and debug code. One of those days where I'm too tired to work, play or do anything really, so I might as well work, but I end up working at a turtle's pace. Friday 22nd: Started by fixing a couple little things I found yesterday. I have them mating so I want to get that fully working again since my recent improvements. At the moment, it seems like they are aiming to Mate and getting their target Human to Wait, but then don't attempt to approach them, so they get stuck waiting. Need to find out what's causing that. Simplifying the hell out of the Human Mating stuff. I did this thing where they would set their TargetHuman's intent to 'Mate' and then wait to be summoned by them. However, I think would be easier to just check if they are busy, and if not, stop them then go to them and get straight to it. Ok, fixed up Humans targeting each other and getting each other to stop. This applies to Mating and Feeding/Breastfeeding Babies. Now to test it. Ok, they Mated! Could still be a bit buggy but seems to work. Sometimes the other Human seems to stop waiting for them sometimes but they do it anyway. I don't think I want that feature in this game just now. No-one seems to be feeding the Baby though. Ok getting it to work but then finding other problems. It's a bit of a mess this whole system. First step to fix this is to refine my 'GetNearbyHumans' script and use it wherever needed. This is a script with a bunch of bools like 'excludebusy', 'excludecantseeme', etc, and it returns a list of Humans that pass all these designated hurdles. Then, when I call it, I can put further hurdles on the list that are more specific. ...Ok, the work bled over into Saturday but I got it. That's all the instances of Humans targeting each other and making them wait tidied and accounted for. That means if I see any bugs occur, it will be easier to fix in future. Now, again, free runway for testing and fixing.
[ 2021-01-25 10:24:42 CET ] [ Original post ]
Monday 11th: Ok got a few medium sized things to address next before I can push ahead. Transport Panel. In the build currently on Steam, there was a little window just for Transports. This would show the item going through and give an idea of how far along it was. This is a purely cosmetic feature so for now, I'm going to put a pin on this until I can get a much firmer grasp on the UI. There are certainly more important things. 'HeldBaby'. Remember I decided on this when I was figuring out the outpoints for the 'Birthing Machine'. I think Humans should be able to pick up and carry babies, and this should be their default positions when they are born. I already have an Item variable for 'HeldItem', now I can do the same with 'HeldHuman'. Did the easy part first, essentially copying all instances of 'held item' in saving and loading and all of that. Now I have the function on the Human. After some thought, I don't think this is the right approach. Going to undo what I've done so far today and instead think about another way around the Birthing Machine (probably, after releasing the Mother, make the Baby its 'Occupier' and set its phase to 4. We'll cross that bridge when we come to it. Next two things on my list are smaller: Bug when placing a Human on a Feeding Trough (since their 'Intent' does not become 'Eat' when they are placed on by the player). Easy fix. Exporter doesn't attempt to Export when I place an Item in. This is probably for all similar Processors, so if I fix this it will fix all of them. I think I just need to find the right place to prompt the Processor to LoadSource(). Pipe for some reason isn't making it to the Exporter. Not working for the Feeding Trough anymore either, so it must be something recent I did. Simple coding error, just had to find it. Both of those things now fixed! Ok now to keep playing the game and see what I run into first. Now that I've started the McCthulu and Ivan quest lines, I should be able to see or at least unlock the next Buildings in the Shop Panel. Can't see them though, just white squares, so next I need to figure that out. Added a light to the back of the Sun light to act as the Moon light, so that the night time looks less grey and stupid and more like 'night time'. Just a blue light with shadows off. All known issues with the Shop fixed. Some other minor things. Pah, now they're not getting into Bed on approach? Why? 1 step forward, 2 steps back?? Was a big trouble, to do with targeting the Object vs targeting the 'Entrance'. Found it eventually and was an easy fix. Didn't get far after that when, after waking up from their sleep, Unity crashed! And again, and the game crashes at some point after a while. This has happened once before but I still don't know what causes it, so 3 times now means it's not Unity randomly crashing and I probably have a bit of death code somewhere in there. Some loop that's calling itself, or some impossible number being made. How will I find out what it is? No idea! 4th time now, might be the toilet. If it happens again around the toilet that might be a clue. Ok, this time, instead of crashing, my computer was able to actually render some huge explosion of Poo from the toilet after freezing for a while. So, I think that's where the problem lies. Before hammering my computer again, I'll see if I can see what the problem is just by looking at the code. How amusing. Yep, I forgot to write 'Waste -= 50' on 'PooOnFloor'. They were Pooing on the floor, then deciding next move, which in each case was to Poo on the floor again because their waste was still high. Also, as with the build currently on Steam, Humans shouldn't poo on the floor straight away after failing to find a toilet, so that's the next thing. Before, I did this with a 'PooCounter', which would cause them to wait 30 seconds before attempting to look for a toilet again, with them finally Pooing on Floor at 100 Waste. Now, with the new setup, it should be enough to just let them finish an idle cycle [walks to random spot, waits 3-6 seconds] before trying again. Big problems with the Bed I think might be to do with me not having saved the Stations properly. At least, I need to do that anyway so that's where I'll start. Need to save and Load the Station's Counters (progress in each stage of handling the Human). At least if I sort this out it will be easier and smoother to hone in on the problems. Tuesday 12th: Sorted out saving and loading the 3 different timers on each Station. Now to test and fix again, I have a clean road in front of me. Just waiting for that day when I suddenly break through and clear through all the content currently in the game. Could today be it? A bug free build. Ok, first bug is good news and bad news. Good news is that the Humans are engaging in Mating! The bad news is it's not quite working. I see a Human stuck in 'Waiting', which is only triggered when it's about to mate, but nobody is approaching them. So, I guess I'm bug fixing that now. Would be cool if the mating was super tight and I could upload the build by February 14th! Forgot to set the target before making the path when Human is looking for a bed they have already claimed. This might fix the mating bug too. Putting cosmetic and animation based bugs on a list for later. On the mating, I wasn't expecting to deal with this today, but we'll see what we can do. So, why isn't it working? For starters I forgot to put 'return' at the end of this part of the script so it continued on. After fixing that, they now go and run into each other. Now I just need to rewrite the code to conceive the baby and we will have functioning and very cleanly refined and easy to debug mating! Nice bonus to achieve today! First thing was to save the CurrentMate in case the player quits and reloads in the middle of Mating. Instead of saving the Human, I just made a 'HumanSave' of them. Wow, awesome, it looks like I can confirm that basic mating with be working well in the next update. I'm really pleased with how well its working and right now I just need to test and fix how the baby develops, with asking for food and pooing on the floor and whatnot. So the Baby actually reaches 3 years old, thus becoming able to feed and poop itself, before it ever actually needs to eat or poop. Quick fix is just to change the starting Fullness and Waste of the Baby, meaning it will require it at least once. I think that's enough to motivate the player to make use of the baby care mechanics. Fullness now starts at 55 and Waste at 40 for Organic Humans. Having a quick look at the code for the baby to beg for food/to poo first to see if anything sticks out before I run it for the first time ever. The Nappy changing won't happen because that's for when the Nappo-matic is built. I actually deleted the code I wrote for begging for food so that will take some time. Let's go. Did some of the ground work for Feeding the Baby before going to bed. Wednesday 13th: Finished programming the whole process for feeding Babies. Now to see if it will actually work. Having some trouble when the Human gets to the Feeding Trough to pick up food for the Baby. Getting through it but I think I might make some fairly big changes here. Making a common function for 'CheckContainerForItem' to tidy code and clarify. Containers held 'GameObjects' rather than 'Items'. Changed that and all the red lines that came with it. Processors now remember their 'SourceItem' and 'SourceHuman' components for optimization purposes. Big change to the way mating/summoning Humans will work. Instead of interrupting their current activity, it can change their intent, and make it so they finish what they are doing instead of interrupting their current activity. The person waiting for them should also wait (with a time limit). This means I can also make the Human choose their target based more on preference, like a Baby calling its mother. Doing a lot of cleanup. Refining Human's decision on whom to mate. Considering a future idea that some Humans will be monogamous while others are not. I think at this stage it would be best to ignore monogamy since it seems like the simpler option. These Humans are like monkeys and will shag the human they like the most whom they can reach. Until now they were just going for the nearest Human who meets their criteria. Sorted Mating so that when they decide to Mate, they will simply set Intentions and start waiting. Then, on 'DecideNextMove', if Intent is 'Mate' then they will seek out their Target Human and continue as normal. This should avoid a lot of potential bugs and make a lot more sense. Now to do the same for Humans feeding Babies. I just had a very entertaining line of thought. Considering how breastfeeding will work given the life of the Baby is so short. I'd really rather not have to balance out Milk production so there's some ready in the one occasion that the Baby gets hungry. So, instead of women storing a certain amount of milk, they should simply be lactating or not. When she feeds the baby or is on a Milk Pump, if she is lactating she will produce Milk and it will drain her Fullness. So what about milk production? Seems it will be a bit difficult to make it work, since the lactating period is so short it's barely worth it. However... what if there was a Drug you could make that could trick women into lactating indefinitely? What if you could breed women to produce more milk and for longer? Really excited to see what players come up with once this is all implemented. Did a bit of research on milking and milk cycles. Got a growing list of new ideas for improvements to the code and game and little things to fix. For now, I'm going to focus on the task at hand; feeding the babies. Made sure to time 'Waiting' so that it times out eventually and they reset. Ok coded that. We'll see how it works. Works! Animation needs a lot of smoothing out and I need to test it a bit more to see what happens with saving and loading and grabbing a Human during the process. But I'll fix those as I find them. That's actually a pretty big achievement! Now, what I need to do is put a bit of a cap on it so they don't breed quite so much, and get back to the basics. Very cool to have this harder stuff done now. Did some research on Garbage Collector and how to reduce it. Will do some of the suggestions at some point. What's next? Next up is lactating and breastfeeding. Should be fairly straight forward, especially with my new designs. Need to implement that. Also want to really encourage the Baby to prioritize the Mother and ignore if she is busy and simply wait for her. Then some of the cosmetic fixes I have in mind. Then I can either get back to testing and fixing the content so I can release the update, or I can get to this list of optimizations I want to make to the code. The former gets the update released quicker and the latter is probably more efficient in the long run. We'll see when we get there. Got rid of the 'Milk' stat on Humans and changed Lactating from a float to a bool. Also modified the Milker to work with the changes. Now all I have to do is modify the code for when a lactating woman is feeding a Baby. A few little things to fix as I go, like making sure Humans don't attempt to mate with Humans who are under 18. Luckily I caught it before I ever had to see it happen. Thursday 14th: First task today is to make it so Lactating women will breastfeed hungry Babies instead of getting them Food from a Container. Pretty simple. We'll see how it works as I play. I thought about making the Baby wait for the Mother if she is at all within reach, but I think that sits comfortably on the low priority side. Next problem: When I load the game, the animations and sounds of Stations don't update until they are changed, and both the Human and the Treadmill remain static on load. I should be able to copy some of the code from 'Station' and put it into 'GM' where I load the game. Got on my list to make the Baby cry extra annoyingly when it fails to find a Human who can Feed it. I think this is a layer of complexity I don't really need at the moment, and when I make the Pacifier I will be prompted to think more deeply about it. Fuel Burner didn't have a 'SourceType' set so wasn't working at all, easy fix. Also added a 'TriggerPreviousBuildings' at the Processor for when it uses a Source. Having some really frustrating issues with the Baby waiting and things like that. It occurred to me that I've programmed Baby tending really badly. It's causing this complication, as well as not really being true to life. Currently the Baby seeks out a Human who can feed it and will summon them. But surely, Humans who see the Baby should try to feed it? Solution: It should be really easy for me to program a Human to seek out 'Hungry Babies' in the same way they would seek out a Treadmill or Bed. Then Babies can just focus on being Babies. I'm thinking about ways to fine tune this so that the Mother does most of the feeding if she is anywhere near. Perhaps Babies could have a designated 'carer' which will work like the ownership of Beds. Perhaps Mothers could seek out hungry babies at a lower threshold. Going with the latter for now and we'll see how it plays out, with lactating women feeding Babies at <75 and others at <25. Ok, should work. Now to test it. Ok so now I can either jump into some optimizations or go back to testing the game. Decided to hold off on optimizations for now. So I'm going to take a quick break and then get into some testing, again hoping for the day that all the code just finally fits in place and I can race through the content. Need to make it so Humans don't feed the same Baby at once. Going to use the Baby's 'TargetHuman' to reserve the Baby. The next thing is to stop the Babies from moving then they are waiting to be fed. Ok so while the Shop is loading all nicely, the buttons don't do anything, so that's the next thing to address. Also, a lot of things have suddenly stopped working :D Easy fix for the Blueprints in the Shop. Working nice and smooth. Yeah the Stations/Processor stuff is starting to feel a bit complicated. I'm thinking of doing a bit of an overhaul, with the Station acting mostly as simply a Container for Humans. Bare with me while I entertain that thought. I think I'm going to go for it. Not quite gutting everything from the Station, but making many changes nonetheless without losing the principle. Very happy with the new 'Station' script. Today has been a day spent mostly under the hood, just tidying and smoothing things out. Ok testing and fixing and everything is working super smooth. However, I need to re-do the sound and animation code for the Stations. Friday 15th: First thing to figure out today is why Unity now crashes when I put a Human in the Grinder. Found out it only happens when I prompt 'Container', which I don't need to do anyway, and when I prompt 'Processor' on placing the Human in the Grinder. I think there's some ambiguity now between Processor and Station. I made 'Working/Moving/Working(station)' all tied to the Building since I thought that would be more efficient. I don't know exactly how, but I think this is causing the issue. Entertaining the thought of doing some restructuring but will probably just undo that change which I think caused this. Took a while but I undid the change. Split Building.Working into Processor.Working, Station.Using and Transport.Moving. Hopefully that fixes this. So when I place the Human in the Station, when should I prompt the 'Station' side of it so I can place them on the Treadmill and Toilet and so on? If I prompt the Station, then in the case of the Grinder it will end up ejecting the Human because it thinks its finished. I need to delineate between Stations which are accessed by the Human and Stations which work using Transports (which in both cases need to accessed by manually placing a Human on them). So, I think a simple bool 'Manual Station' for the former which which prompt the Human to use the Station on Place if it is true. Consolidated the code to start the Station in the Station script to save on some copy-pasting. Ticked the 'Manual' box on the appropriate Stations. Seems to be working smoothly. Hit a very strange bug when I loaded with one Human Waiting as if they had been called to Mate or be Fed, and another at <0 Hp and <0 Fullness dying on the Bed, but with no Occupier. This was probably caused by Mating, but I couldn't figure it out. Put a debug.log on it so I'll know if it happens again. Other than that, all good with some minor fixes. This time, I got as far as building my Conveyors. Seems to be some errors here so with progress made, back to debugging. I think the main issue was with the Conveyor Builder when click dragging, and I think I'm fairly confident to debug/overhaul that. [little bug with Smart Splitter item display, easy fix] Ok next one to test is the new 'Human Gate' (replacing the Wall Flipper). Guaranteed bugs here. First one was tricky to find, was because I had a list of Inpoints with one null item. Now to get them using it. I'm actually thinking instead of this machine Summoning Humans and potentially interrupting their activities, the Human should go to it. So, on Decide Move, the first thing they will always prioritize is finding a Human Gate with a matching Human Filter. Programming the Human Gate: So I'm actually starting from scratch here but it's all in the noggin. Programming from the Human's end is very simple. On DecideNextMove, Before Pooing or Eating, but after Mating, Feeding Babies and Pooing on the Floor, the Human will check for Human Gates. Quite simply using my premade functions: TargetNearestBuilding(Name: Human Gate, Item: null, Needspace: false, Ownership: false); if (Target != null) { MakePath(); return; } Pretty cool huh? Now I just need to figure out what happens when it reaches the Human Gate. So the set path will happen as normal and since it's a Station, it will automatically aim the Human at the Entrance, and have the Human 'Use' it. So, I can set the Human Gate's 'UseTime' to about a second, set its Use Animation to 1 (Walk), it will automatically move to the centre and then set the Human's 'Target' to the exit. (Had to add the Exit). One problem with that: The Humans will now go to the Human Gate if there is no Filter on it. So, I need to make an exception just for Human Gates that if there are no Filters, they are by default not allowed. Fixed and the Humans are now going to it properly. Another fairly significant problem: when they get there, it doesn't work! Made some adjustments. Now they go through the Human Gate just fine. Except, I now need to program it so they go straight onto a Transport if there is one attached. Ok and it all works! Now, bugs when we try to eject a Human from the Blood Drainer. Let's see what that's about. [Easy fix, but more bugs later] So, I have those to bug fix, but again that was always expected. Everything up until then is working super smooth (except for that one bug I think to do with Mating, but I'll test that more thoroughly later). Also, I need to re-do the UI for the Item Filter, and that's a bit of a job. I want to improve this quite a lot, so that will be first thing. I'm just going to restrict the Item Filter to only filter out 1 item per filter.
[ 2021-01-18 12:43:33 CET ] [ Original post ]
For anyone who is keen to know about the next update: My estimate is early February. Massive improvements have been made and I'm just testing and fixing everything. Monday 4th: Hello 2021! First up today is the Shop. Before last testing, I made it so that it would automatically generate the shop list with all the client sprites and everything. Now to actually make that work. Positioning of the buttons is fine. Now need to test up until unlocking a Client so I can check all the buttons are being set up properly. The first hurdle is the Incubator, since that is the new 'Printer', we'll be using that to complete the 'Print a Human' quest. First was to add the Incubator at start and for this save file, tidying a bit of code while I'm at it. (Not sure we need to save 'UnlockedCategories' anymore, since I can do 'foreach unlocked building, if its type is not contained in 'UnlockedCategories', add it... something for later maybe). [Done] Now to add the interface for the Incubator so that the player can Print a Human for some Squid. Done. Of course now that I have a Human, I have to fix the mountain of bugs that appears when I try to do anything with them since all the changes. So, from Shop, to Incubator, to Humans now. My only goal today was to get the Shop working, so already it's a good one. Getting lots of 'Argument out of range' where probably I'm missing a '-1' in a few random generations. Dealing with those first. Dealt with a bunch of bugs on printing the Human. Now my big task tedious task is to set the 'empty checker' for each Outpoint on Buildings. Ok, now there are no errors, but the Human isn't doing much. I will make it my goal tomorrow to get at least one Human acting properly and doing basic things. Tuesday 5th: Today is all about getting the Human back up and running in its basic form. First problem is that the NavMeshSurfaceEditor is giving me errors and now showing me anything. I don't imagine this is my fault. First thing to try is to update everything. Having a lot of trouble with this. A lot. However, I do have on my agenda to update the NavMesh and better understand it for Teleporters and such later. So, pretty much overhauling the entire system. ... Ok I think I got it working again [by updating and reconfiguring a couple things in the editor], only the problem now is with the Human's script. There are no error messages, and if the Human has a place to go to it will go there. I think it's failing for reasons other than the NavMesh now. (Not quite done with the Nav Mesh). Ok it seems the NavMeshModifiers have reset, and are referencing a missing script. However, it looks like the geometry is modifying the navmesh as intended anyway. So, I'm just going to remove them all. Have to do it manually and I have to do fix each prefab individually. Double click Building prefeb in Project view, click where it says 'missing (mono script), remove component, ctrl-s, repeat. Also had to do it for the buildings in the main menu, but I could select multiple there. I get one error when pressing play in Unity, 'SerializedObjectNotCreatableException' on my NavMeshSurfaceEditor. I think I'm going to commit coding sin and ignore this for now until I can get some other things working. On being printed, the Human teleports and gets stuck in an idle animation and activity. Time to put on my detective cap and geek glasses to figure this out. I want Humans fully functional as they were before by the end of the week. Got my work cut out for me this week. Made myself a list which I want to complete by tomorrow, starting with a couple fairly unrelated things. Processor doesn't continue work when I load the game. I could add 'Working' to the buildingsave, but I wonder if I could be more elegant than that. I don't think 'if current source != null' is specific enough, may cause bugs. Maybe if progress is above 0 and currentsource != null? No, in the end I'll go with 'working' on the building save, because I can imagine some occasions where these may be the case but we are not 'working'. Incubator 'fill' (the pink stuff) was appearing above the UI and flickering. I think that's because its y scale was 0. I was right. Added 0.01 and it works. When I print a Human on the Incubator, it checks for space automatically through 'outcargo' script, but that is AFTER it has made the Human. Also, I suspect I may want to change the way Humans move through Processors on the Conveyor so that they don't stack on top of each other and so on. This is something that will come into focus as I get to the 'put lots of Humans on the butchery line' part of testing, as I want something that will work in all instances. It's where I expect the most bugs, but hopefully easy fixes. For now, I'll just check for space/port connection before allowing the player to use it. ... The current script for 'OutCargo' has an 'out bool Success', which determines whether there was space to move or eject the cargo. I think this is clunky now, and there should be a separate function for checking space. This could be very simple but I ought to do it with a fresh mind. First thing on the list for tomorrow. Broke down the task into smaller parts so it's easier to tackle. Decided to do this while it was still in my head and I'll make that my goal for the rest of the evening. Made my 'CheckForSpace' script. Now to remove those parts from 'OutCargo' without breaking anything. Done. Now, I've made a bunch of errors that, as I fix, I'll find all the instances of 'OutCargo', and I can modify them to check before attempting to out. I should probably wrap 'CheckForSpace' and 'OutCargo' into a single function to save on a few dozen lines. Brain is hurting a bit figuring out what exactly should happen when 'CheckForSpace' returns a fail. For a Station like 'Auto-Excreter'... It should be stop anything from happening until we get a 'TriggerPrevious'. So, how do I communicate that? By telling it to start 'Working' again? Telling it to 'LoadSource' to trigger the whole process? Or add a new bool 'Blocked', which becomes true on a failed OutCargo and is released on 'TriggerPrevious', and if it's true on TriggerPrevious then we tell it to 'Do'. Need to play out each scenario in my head. For the Station, this is never a problem, since Stations so far only ever refer to one outpoint. But for Processors, the outpoint is contextual to the machine and the thing it's making. To solve this, I'm making Processors remember the Outpoint concerning Humans and using that. There are a few exceptions which will make this less simple. The first is the Birthing Station, which has 2 potential Outpoints it might want to send its Humans through. Even if I have them both come out the same one, that's still confusing to me how it will play out when blocked. I may even get around this by having the Baby born in the Mother's arms, as a 'HeldItem' type of thing... Putting a pin on it. Ok that's actually the only exception. I think I am going to make the Baby her HeldItem. Ok, that's enough for today! Thursday 6th: The single conveyor isn't appearing as an option for some reason. First task today is to figure that out and fix it. Some random fixes. Ok so the first problem I see when printing a Human is that they get stuck in 'Idling' and walking on the spot when they reach their random wandertarget. I want to fundamentally change this to simplify things a bit. I'm going to make a transform on the Human called 'wandertarget', so it's an object instead of co-ordinates, and that is what gets moved and targeted. Then I can use the same script to handle what happens when they reach their 'wander target' (stand still for a while before deciding next move). Well that almost worked, except I'm an idiot because the Human will never reach their wander target if it's in their heirarchy and moving along with them. For now I'm just unparenting and then re-parenting the wandertarget. This will be dodgy for saving and loading, so I'm going to give a thought to that... Just made sure to unparent if, when we load the game, our Human's target is their wandertarget, plus a few other places using my 'targettype' (human/item/building/+wandertarget) string. OK! Got the Human wandering around and idling. They're also successfully targeting their nearest station to use it. But when they reach the Treadmill, they just keep running on the spot and 'Going to Waypoint'. So that's next. Bare in mind that [since the changes I've made in the last couple months] if I get this working for one machine, it generally works for a ton of others (now without having to copy paste anything). Working through the various problems here and trying to do it in an intelligent way. Now having trouble getting them to claim ownership of a bed. Took a while but I got there in the end. Long time to figure out what the problem was. Now, when they enter the bed, I get a couple errors, so that's next. Easy fix. Thursday 7th: Ok so Human is working and sleeping and all of that is going fine. Next bug is at the toilet, with them getting stuck on it after using. A few Stations will have this issue as the code has completely changed and I need to change some things in the editor and double check the code as I go. Also just before getting on to the toilet, I need to get the animation going properly because at the moment its completely broken, so that's first thing today. Kind of frustrated with the way stations work. Feel like it could be a lot better given how much bug fixing I'm having to do. More fixes... Got them eating, sleeping and working. Nice! Still need to clean up the animation a bit but it's working functionally. I have a list of little cosmetic and other fixes to get through before I can start working through the game until I find more bugs again. As with a lot of people today, I am very distracted by everything going on. Not going to end up the most productive day. Ok Animation is looking smooth now. Sound still all over the place. Got a couple things off the list working. Friday 8th: Ok got myself a list of things to work through today and I want to finish that plus make some progress into the game. We'll see how it goes. Fixed eyes coming in mismatching and sometimes the dead eyes. Failing to Print a Human now tells you why you failed. This will be handy for new players. Seems that grabbing an Item from a Container no longer prompts the Transports behind it to move again. (Actually it was more to do with it going directly from Container to Container). Fixed. Sorted out the sound for the objects we're using so far. Using my new system it's very streamlined. Final thing on the list was to sort out the chest and waist sizes because they were looking funky (changes since I got rid of genetics for this). I think the problem actually seems to be more to do with the deformation of the chest, possibly since an update or something. In this case, I'm just going to remove this feature for now and I can redo it later if needed with better finesse. Need to make a Transport Panel but that can wait til next week. This would show the object in the transport on the Building Panel in real time, purely cosmetic. The other thing is 'HeldBaby', but that's complicated and not needed for a while so putting it on the later list. Now, to continue the game and see what bugs I run into first. Some trouble with Humans going to Stations that are already occupied. Think I fixed it, we'll see if it happens again. Humans were babbling as if mad due to an error in the code. Sounds about right. Yep, still problems with overlapping on Stations. Think I fixed them now. We're running at >200 fps with 4 Humans on screen. Main stopping point besides animation and rendering is the frequent 'garbage collector' which brings it down to about 160 briefly each second. I think that's my fault and I can get around that, but not with my current expertise. Need to cache things and write better code. For now, let's keep testing and fixing! Going to be a lot of minor bugs as I fix small errors and sort things in the Editor. I'd say this is a good milestone to end the week on. Hopefully by the end of next week I'll be much further along with momentum. Hopefully I won't be despairing as much about the fate of mankind. Got some more fixed with the Grinder, things that won't need fixing for future objects. Realized how cruel it was to have pipes spill their contents on the floor in front of them. Made that only work for humans. Ok I think that's good for the week. I achieved my goal of getting the basics up and running. I hope that next week, with momentum, I can at least touch the point where I have all currently existing objects functioning together in game. Then, once that is all polished, I can release an update and get to work on more cosmetics and more content. I will be very happy the day that I'm making content again, as opposed to fixing things I made at the beginning of the project!
[ 2021-01-11 12:33:04 CET ] [ Original post ]
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 ]
Monday 14th: So the first thing I am doing today, as the final part of fixing the compile errors, is to improve the 'HumanSave' class and make it shorter. This is so that I can see all of the components in the brackets when I attempt to make a new save. I'm doing this by subdividing the values into different classes. For example, I just made one for 'HeadSave' which might have some utility when I improve Heads later. Also another one to handle position and rotation, crunching 6 items into one (TransformSave) on the actual HumanSave. This is a really minor task but hey it's on the list and I don't question the list. This should be a default for any project to be honest. Next one I'm making is 'Genetics' to cover all things that are inherited and not changed throughout life. This can stay on the Human as well as the Save and may be useful later. Getting rid of the part that randomizes Torso sizes. If it's there, it should be based on other stats like Strength and/or I should use premade models. Really just sorting out the HumanSave class and making sure it's all nice and perfect. Actually got rid of 'HeadSave' and rolled it into 'Genetics', because the Item remembers the Human anyway. Some stats exist in both 'Genetics' and on the HumanSave, because these are ones that can be changed during lifetime. A few other changes as well as I go. Just making this as clean and easy to understand as possible. Lots of stuff to clean here. Not going to list it all. Just ignoring time constraints and taking the long road instead of the easy road each time. As I go, I'm getting more ideas for improvements and changes, and adding them to the list. I may be here a while, but I think this will help me make rapid progress in the future. Ok managed to clear all errors again. Now I have a few bigger things to whack off the list before I get to more Hydra heads. Ticked all appropriate 'Buff' and 'Edible' item bools in the editor. Same of 'Stations' and 'FoodContainer' bool. Turned 'Dead' into a 'Buff' and changed the way it works a bit so I don't have to ask for it so often. Using 'savedmood' and 'savedhp' which I made earlier. Got rid of the Bar being a FoodContainer as well idea. I think it's fine to let players just make that themselves. Added a string 'Intent' to deal with ambiguities when a Human reaches a target. For example, when I reach a piece of food, am I intending to Eat or Feed someone? If I reach my Bed, am I intending to sleep or Mate? If I reach a person, fight or flirt? This is part of smoothing out what happens in the code when a Human reaches its Target. Adding loads of new things to the list as I deal with the error messages in the script editor, and see improvements to be made. Taking some of these things on my list and shuffling them to later with some edits. Did a bit more and got some of the easy things off the list. I think that's enough for today, just tidying up the list to make it easy for me to process tomorrow. Got a bunch more little things that are difficult but don't require much brain power, a bunch of things to finish off the Station and then a bunch of tricky things. Tuesday 15th: Ok so today just going through the list as I made it. Hopefully I'll still have my sanity at the other end. I occasionally copy it here into the devlog so I'll do it here again to give a better idea of my process. - Reuse the same float to do rolls when doing the genetics for a Human. - Get rid of 'HeadSave' class. - Make GameObjects in Buildings 'Buildings'. Do the same for Items. - Turn Quality Stats into floats and have them deteriorate when dead. There should be a separate stat to handle a corpse's freshness. - Make 'HumanParts' a list of strings instead of a list of GameObjects. Same with Organs. Check for them appropriately in Chopper, Skullverizer etc. - Cancel throwing poo for now. - Make Idle Humans pick a random direction and walk that way. (it's already in there somewhere!) - Make sure to 'DecideNextMove' for Humans when placing them and ejecting. - Use 'HP > 0' on Decide next move. Check for and replace/remove looking for 'Dead' buff. - Make Human's 'Lines' a reusable script. - Use Station.LoadHuman when placing them with a tentacle. - Set usetimes for each Station. - Make Buildings contain an Animator State for the Humans inside to be referred to by the Processor and Building. - Make teleporters use power based on distance. - Sort all Station Inpoints in the Editor. - Sort animations on Stations (Load, Mount, Use, Finish). - Homogenize the way Sound is played on Stations. - Add Dismount phase to Stations and make sure they get to their outpoint. - Redo 'Mad' - Have certain items perishable and make them lose quality depending on that rating. - Use 'GetNearbyHumans' for 'ShowTentacle', and make sure there is an option to check if the Humans can see (not sleeping/dead or looking this way). - Redo Wall Flipper. They should not be something that fits on a wall, but a station with a wall on it. Also fixing Buttons to make them a lot better. Tons of edits to be made to lines of code, most of them very simple and tedious. I seem to remember Hercules killed the Hydra by just constantly striking off heads and hoping for the best? Ok I got the first chunk done. Now onto Stations. It's 12:30 and I now have to completely shift gears in my brain from rapid Hydra slaying to careful Gorgon hunting. That means taking a nap first, or at least a few minutes to meditate. Hands are already tired. Cleaned up and fixed a lot of things in the Station and now I'm happy with it. Some trickiness with some Stations being 'Continuous', meaning they repeat if the Human is still up for working. And some Stations having multiple outcomes based on 'Intent', meaning I won't want them to 'DecideNextMove' but just leave the Station and carry on. So that's 2 out of 3 of the lists I made yesteray. Also got myself a new list of things: - Stop Printer from Printing Food. Make it only print Humans. - Improve Btns. Homogenize animation and tidy. - Clean and fix 'Grab' and 'Place' scripts. - Remove 'Log'. Can bring it back if it's useful. - Label 'Bed', 'Effigy' and 'Treadmill' as 'Continuous' Before I go on to part 3 of 4 of my to-do list, it's 3pm so I'm going to take another little break. Seems my brain wants to sprint today so I have to pace it. Having a think about the Wall Flipper. I was thinking about making it a 2x1x2, with the floor tiles on either side reserved and probably with a circular slice so it can rotate on the Y axis. Much easier to animate. Now, actually, I'm wondering if I need it at all. Getting Humans through Walls has not been a problem since Conveyors go through Walls and create a tunnel automatically. So, if I wanted to introduce this function, I could simply have a Lure attached to a Conveyor Belt. I'm thinking of like a Conveyor with a Lure hanging above it. Or maybe the big Door, 1x3x1, is best, with space above the Door to put a sign. Going to go with the 1x3x1 because I think it looks the best. That means making a placeholder in Unity. Going to leave it there for the day for now. Wednesday 17th: Let it be on record that I know a lot of the things on the list yesterday were stupid, I dealt with them as I saw them. First task today is to redo 'Mad'. Reprogrammed Mad. Was very easy. Made Items lose Quality and other stats over time based on their perishability rating. We'll have to test how this works in real time to get the numbers right. Added a bool 'excludesleepers' to the 'GetNearbyHumans' function, and set it appropriately for each instance. This won't be true when summoning a Human, but will be true when deciding who to talk to and who sees the tentacle when it appears. Buttons tidied. Planned out a new tutorial. Decided to get rid of the Printer entirely and give the Incubator an alternate function. Cleaned and tidied 'Grab' and 'Place'. Didn't see anything I wanted to change. Got rid of 'Log'. Just felt like it was unnecessary and could otherwise be done better. Labelled the appropriate Stations as 'Continuous'. Making a common function for 'OutCargo' which can be used by Transports and other Buildings to pass any Item out. This simplifies things a lot. I wish I had these practices when I started programming this. Makes me excited to code the next game. My main worry is that I haven't really thought about what it will be like when the pipes are blocked. I want to try and make it so it stops and doesn't take up any processing until it's freed up again. Making many improvements to the 'OutCargo' code as I merge 2 scripts together. Fixed an ambiguity where some Stations have Processors where I want to be able to have the Humans mount it by choice. In these cases, I made a bool called 'ManualProcessor'. On LoadHuman in the Station, if ManualProcessor is true then we activate the Processor and ignore the rest of the Station script. Made this to help me figure out improvements for the Container: - When should Containers attempt to export an Item? - At Start. - When an item is added to the Outbox... by 'Place'. by 'OutCargo'. by 'MakeItem'. - When NextStation/NextTransport/NextContainer successfully 'OutCargo's. - When the Outpoint is connected (ConnectTransport). - What should happen when a Container Fails? - Nothing. It will try again when it is triggered. The tricky one is 'When NextStation/NextTransport/NextContainer successfully 'OutCargo's.'. The rest are easy. It's not so easy to check for which Container is connected to any given Building, only the other way around. A Building knows what is connected to its outpoints, but until now it doesn't really need to know what is connected to it. I could ask all Buildings who is connected to the target, but that seems a bit processor heavy. I could say, on 'OutCargo', if the source Building's Inpoint's parent Building has a Container, update it. So for Transports: if (building.Transport.CurrentInpoint.In != null) { if (building.Transport.CurrentInpoint.In.Building.Container != null) { building.Transport.CurrentInpoint.In.Building.Container.Do(); } } While I'm doing this, I'll do the same for Transports (moving = true), Stations (LoadHuman) and Processors (LoadSource). Now, what happens when a Station attempts to Eject a Human, but fails? It should pause, and we should only LoadHuman from this location if it is in this paused state. Buildings don't actually remember their Inpoints except for the Transport. It's tedious but I'll need to fix that. Should be a list of Inpoints, which it would be best to link up manually. Then that's who we ask if anyone wants to move their cargos. Attached all the Inpoints in the Unity Editor. Bit tedious but not too bad. Added an appropriate perishability rating to all Items. Cleaned out unnecessary stuff from the Transport script so that there is less happening in the Update and instead Moving will be made true only when needed. Now my list looks like this: - Redo Wall Flipper. They should not be something that fits on a wall, but a station with a wall on it. - Remove Printer. Give the 'Incubator' at start and give it option to print Humans for Squid instead of DNA. - Redo Tutorial. Hopefully will finish this by the end of the week. Then I can either start on the UI or something else or start testing and fixing. I'm expecting a lot of bugs but, with the way I'm coding it now, they will be easy to find and fix. Calling it a day. Thursday 17th: First task today is to get rid of the Wall Flipper and replace it with what I'm calling a 'Human Gate' which will have the same function. Not going to use any code or prefab from the Wall Flipper. Going in fresh. Wrote the new code for 'Summon Human' which should work for both Humans and Stations. And yes, all the work I've been doing over the past couple weeks was worthwhile, because I was able to do this in 3 lines: human.ClearOccupation (Clears the current Human's activity and cancels whatever they were doing). human.Target = obj (Sets the target as the designated GameObject). human.MakePath() (Sets the Human on its way with its new activity, with everything else handled within this script). Then, the Human will be on its way and when it reaches the Station, the 'LoadHuman' script then automatically will process it through the Human Gate. So I actually don't need to add any more code to complete the Human Gate. In Station, the script automatically processes the Human. Phase 0 is standby, Phase 1 is mounting the Human, Phase 2 is 'Use' where ongoing effects like with the Treadmill and Effigy occur, Phase 3 is dismounting and then the Human is ejected out the other side. In the case of the Wall Flipper, once a Human has been loaded thats its only function. So that's that!? Very cool. Actually there was one thing (at least). Needed to add 'excludeunreachable' option for 'GetNearbyHumans', so that the Human Gate and other Humans can only search for Humans who can actually reach them. I'll probably need more of these as I go, like 'Is human alive?' and 'Is human too busy to talk?'. [Did all that]. Made the placeholder mesh for the Human Gate. That completes the Human gate for now! Removed all trace of the 'Printer'. I will do the new UI Button for the Incubator when I get to that, since all of that code may be redundant at the moment so I don't want to add to it. New item on the list: Cameras should not appear on Walls. Make them attached to the ceiling (visual touch only) so player can put them anywhere and we can simplify the code. I think that's a bridge I'll cross when I come to it because I really need to get back to testing and fixing. Deleting the code for building the camera/wallflipper (wall mounted Buildings) so it will definitely come up in testing. Next item on the list is Tutorial, but you know what, I think the best thing for now would be to just delete all trace of that and go in blind. I have an outline for the new tutorial so I'll put that down the list. Ok I'm finally there. Big achievement! Time to start pressing play and go from there. Before I do that, the first thing I need to do is attach as many objects in the editor as I can remember. I'll be surprised if I can get past the first few seconds of gameplay within a day of work. If I can get the current build working with all these improvements and changes, that's a huge achievement for this year.
[ 2021-01-05 11:39:20 CET ] [ Original post ]
Monday 7th:
Continuing my work on the Human script now. Changing the 'DecideNextMove' code quite a lot.
Made a function 'TargetNearestBuilding(name of the building)' to help clean up the Human code. The challenge here was making it work for all the different requirements that need to be checked for different buildings.
This is taking a while but I really feel like I'm getting a good handle on this and coding with much better practices. I'll be happy if I can finish this task this week.
Changed Pacifier, Frozen and some other things into Buffs instead of Bools. I think this is tidier.
Tuesday 8th:
Pretty sure I did some stuff on this day but it's all just veeery slowly going through and cleaning the Human code. Getting a bit messy in my head now and I think the best cure for that would be to start just trying to get everything to run.
Wednesday 9th:
Sorted out how ongoing activities end. Now, without the counter system, I think it's fair to say they do the activity for 4 seconds at least and then stop and 'DecideNextMove' if their needs change (Fullness > 50, Waste > 50, Energy < 25/Energy >= 100).
Next is cleaning up the 'Talking' script. Thinking about how it should work. At the moment it works by simply counting down 20-30 seconds and attempting to talk to someone nearby. I think I'll keep it like this, after some thought.
Made a better system for sensing whether a Human is too busy to talk or not.
Next thing melting my brain is thinking about a better way to do the Stations.
At the moment, everything is done at the Human's end, asking what their activity is. The activity is usually given by the Station with some exceptions.
I thought about making the Station handle all of it, but actually I think my system is fine.
Made sure that each Activity ends with calling 'DecideNextMove()'. Otherwise it should only happen when the Human is first made. It was quite easy by searching for and deleting all instances of 'Activity = Standby'.
Going through and tidying each activity, more thinking than typing.
A bit bothered by little things like how once the Human reaches the Toilet, their activity becomes Entering Toilet, which then triggers Pooing In Toilet. I feel like this is inelegant.
Going back to the idea of the Station handling everything that happens once the Human reaches the Station. I think Stations should have a 'mount time' by default which can be set to zero for things like Fabricators. Some things will occur in the 'Mount Time', some in the 'Use Time' and finally something on 'Finish'. Then they can have a counter which will be how long it takes to Use, which will do its thing on completion. This way I think I can actually remove it from the Human script which will make that a LOT cleaner.
This will be my task for tomorrow. It's a weighty one.
Thursday 10th:
Woke up early today but didn't get started on the game until about 2pm. We set a date for the wedding though!
Very happy with this idea to move all this 'Activities' to be handled by the Station rather than the Human. If nothing else but just to share the line count so I can mentally process a script.
My original idea of at least getting the Human script cleaned started as a small goal intended to undershoot the target and help me relax. Turns out I may struggle to get it done. I'll do some over the weekend if I need to.
Essentially just going through each line in the Human script and re-interpreting it on the Station.
Made it so 'MakeHumanPart' has the option of loading an Item right into the Outbox if not null.
Ok finished moving everything from the Human to the Station where relevant.
Tomorrow I have: Make the script compilable by fixing all errors, some random little tasks, more fixes to do for the Human script, more fixes to do for the Station script. Then we're almost finally back to testing. Definitely won't get all that done tomorrow.
Friday 11th:
Compile errors and a failed christmas shopping attempt which took most of my day.
[ 2020-12-18 11:52:50 CET ] [ Original post ]
Monday 30th: Ok back to work and my brain no longer feels so much like a swamp every time I try to engage with my to-do list. Step 1, got a tidying job for the Processor script which will make it look a lot tidier and reduce line count. So far I've been manually adding each new Building to the shop. That changes now. So it's pretty easy for me to generate the buttons, but I'm going to apply better practices now. My best method for generating the list is to do it by Client and Tier. Instead of a bunch of copy-pasting with small variables into if-statements, I'm going to do 'GenerateBluePrints (string client, int tier)'. Done. I'm expecting bugs but that's for later. Next is following up on the Telebox and Televat from Thursday. Need to do the controls for matching them to each other. I was thinking about making a similar interface and system to the Automation, but that's overly convoluted. That would mean making wires and things. I think it would be easier to make it accessible from a Button on the Building's interface. Click the Button, then the Building interface goes to the side while the player then clicks on the target Building. Then we can easily render a line from the Teleporter to the other. I suppose this way you could potentially teleport something somewhere and then teleport it back, but that's up to the player. So really, this is more like the Camera than the Automation Wires. Done. In this case, I haven't finished putting the UI together. I will either fix it when I get to that part in testing, or it's possible I will overhaul the UI before then. Did the raycast check for Ejecting a Human from a Transport or Processor. It will need testing and the main problem I anticipate is figuring out what happens if there is no available place to eject the Human (does the Processor reset? Does it try to 'Do' every frame?). Ok, I think that's quite enough new stuff before I start testing. This is very much like setting up a new home. What I've been doing lately is moving in all the boxes and stacking them up. Now, before I can fit any more boxes in, I have to sort these ones out. Had a good think about the UI. Made a lot of mental progress. Made a list of what actually needs to be done. Absolutely loving Noita and that's partly why I've been a bit slow since Thursday. Ate up all my weekend. Insanely cool game. My only issue is that it's a bit too difficult. The game doesn't respect your time. I don't know if adding a 'non-hardcore' mode would improve it. I will write a review on the Store Page when I finally finish it. Tuesday 1st: So the bulk of the work for Tables and Chairs is done. My first task today is to get Humans to look for and use these when selecting food. Ok, got this done. I kind of want to review the way this code works again. That clears the list. There's still a few things to add but really my aim right now is to clean and tidy and optimize. It's like I'm playing Factorio, I've just learnt a bunch of new things, and now it's time to fully optimize my base before I expand on it any further. I really can't express enough how similar making a game feels to playing Factorio. If you have a lot of hours in that game, you should really consider coding (especially if you're reading this!). Sorting out my larger to-do list now. Today I'm just going to focus on planning I think and then get back to Noita so I can stop using my own RAM on it. It's been an incredibly productive couple of weeks. Ironically, the game is completely broken right now and absolutely won't run. There are 3 'Industries' remaining: Genetics, Mining and Cooking. All except Genetics use pre-existing principles, and I'm pretty confident about how Genetics is going to work. I've really added a lot of stuff already without testing so far, so I think we'll do that before getting to these 3 things. Before getting into the code, it's time to zoom out a bit and look at the project as a whole. Which parts can be streamlined, which can be improved. Perhaps I can anticipate some bugs and altogether make the project cleaner and much easier to work with. On my list is: - Overhaul the drug system. It will now be a bit more robust and allow for multiple Buffs. This will come into effect with Cooking and Genetics too. - Tidy the Human script. - Tidy and streamline as much as possible. - Overhaul any systems that should need it. - On to the UI and the same there. All of these kind of bleed into each other. It's big brain work time. I think I'm going to take some time off before I start. It will probably bleed into testing too. Right now, all the basic elements to the game are in place, and it's time to really just tighten everything up before jumping into testing. Maybe I'll pop in and out if I get inspired or bored of other things but don't expect much from me this week. Saturday 5th: Managed to finish Noita on my first run of the day yesterday. Was amazing. Wasn't easy. Looking at the drug system and implementing the new 'Buff' system. A few questions to be asked, such as does the buff come from a 'Buff' on the food or can it just go by name? Went by name and made a Bool on the Items to check whether to apply it. The effects are made on application and over time on the Human script based on the name. As I do this, I'm fixing code as I see it. For example, for drugs like 'Painkiller', instead of asking for that each time we change the Mood of the Human, the Human will have a 'SavedMood' which the Drug will force the Human to if they have the Painkiller, and it will be set when the Buff is applied. Had a hard think about the Human code. At the moment they have a bunch of Counters, for example the Eat Counter. They won't try to look for food unless this is below zero, then it will reset. This stops them from looking for food every frame if they are hungry and don't find any. I'm a much better programmer now and I see I can improve this drastically. If they are hungry and don't find Food, they will Idle for a few seconds before trying to do anything again. I don't know why I did it so badly before but it's just the only way I knew how.
[ 2020-12-17 13:52:49 CET ] [ Original post ]
Monday 23rd: Started with some chores today. Had a very short career as a diy plumber. I was like 'If I can do factory games, I can figure out a sink'. Didn't figure it out, but made a minor improvement until Mario arrives. Added the Freezer, which Freezes Humans. Added the simple ice block graphic and animation for the frozen Humans. Also tidied up their code a bit and inserted the 'if frozen == false' bool before the things that would only happen while unfrozen. Definitely need to clean up the Human script to at least make it easier to navigate, so made a note of that. Next up is the Barber Station. This one is pretty complicated because I have to develop a whole system for Haircuts and I haven't thought about it much yet. Essentially players should be able to click on the machine and toggle a bunch of haircuts this machine can do. Then it will choose a random one that is possible from the list the player has chosen. This will change their Hair Style, in which I earlier set it up so it has a different state for each length of Hair. First I make the Building (basically a copy of the Birthing Station for now). Then I add all the new Hairstyles I made earlier to the Object Menu. Before I add the Hairstyles to the list, I realize that I want the genetic hairstyle to be different to the one given at a Hairdresser. I also want it to reset to that if the Human is Shaved. I think the best way to do this is for Humans to have a separate string called 'GeneticHair' which will be either Curly or Straight. No next I add that to the Human and Humansave. Then account for them in making a new Human (random or bred). Then saving and loading. Then Shaver. Next I add to the ObjectMenu 'Hairstyles' each new 'HairStyle' and the look for each length of hair. Sorted the code for the Hairdresser. Also made it so it collects excess Hair and exports it properly, which was a fun little challenge. I still have to do the UI so that the player can make the changes. Each Processor will have a list of Hairstyles and Beard styles which will need to be used by the Hairdresser and only the Hairdresser, and these of course will have to be saved and loaded. This is a pretty tough one to start at 3:50 pm so I'm going to put it on my list for first task tomorrow. Subdivided it into smaller tasks so I can work fast on it tomorrow. Handled scaling walk animation speed with Human speed. At the moment they are going to slide but I will fix that by adjusting the length of the animation rather than the speed of the agent. The numbers are tied together now so if it is matched in one instance it will be matched in all. Looked through and reorganized my to-do list a bit. It's kind of like a Hydra but I'm making tremendous progress. I'm a bit terrified of finally getting to test and fix this, and of course the graphics, but for now I'm just really enjoying attacking this list. Tomorrow is about finishing the Hairstyle stuff, Beards too, and then if there's time get started on having Humans use Tables and Chairs to eat. Then onto the huge list of small miscellanous things. Tuesday 24th: Made the Beards operate like Hairstyles, with each 'Beardstyle' having a name and a list of variations made in order to show growth of the beard. Organized all Hairstyles and associated GameObjects into their own menu, apart from the ObjectMenu script. Added 'Hairstyles' and 'Beardstyles' to Processors and sorted for saving and loading. Finished the Hairdresser by sorting out the UI and everything so that the player can toggle Hair and Beardstyles on and off. Works in theory, we'll see when I get to the testing phase. Next is sorting out Humans eating at Tables and Chairs when possible. Tables and Chairs is a fairly big one. It shouldn't be too difficult to say, when a Human takes food from a container, they can check for a nearby Table with an empty Chair. The reason it's a big one is because this is another Station that will have multiple Human positions. This means that as I go, I may make long overdue improvements to the 'Station' script that allows for any number of Occupants. Maybe it's easier if the Chair is the Station, and only functions in this way if attached to a Table? Actually that is probably a better idea. Either way, shuffling this one to tomorrow's list. Not super confident about doing this right now. Hairdresser stuff is done, and I'll round off the day with some of the other tasks on my list. Wednesday 25th: Ended up having a short day yesterday. Just needed a bit of a reset. Today started with some more local admin chores and a nice walk to and from. Added the Bar Extension. Next task on the list is to make it so I can replace Floor tiles with their upgraded versions. This is actually a bit more complicated than I thought because I would need more detail about the specifics of each 'build'. At the moment, we sort of go x1y0, x2y0, x3y0, x1y1, x2y1 etc until Y has reached the designated number. What I want to implement is a way to overide, ignore or replace tiles. The best thing might be to, instead of having Speed Tiles as a separate Building, but this could be done with the 'Paintbrush'. I think I'm going to go with this. (I did have a whole other plan but I scrapped that). So this can go on the later list. Programmed a forced birth for Humans when they are killed. Also made it so when the Baby is born too young, it dies. So yeah. This will probably bug out when this happens in machines, so I made a special note to test for that later. Sorted saving and loading graphics quality. Added a bonus to nutrition and mood when a Baby is breastfed by their Mother. Doing lots of tidying, commenting and folding into functions as I go. Made Nappies and Pacifiers appear, using the same code as for Clothes to keep the deformations. Also locked babies under 3 from getting clothes in the Clothinator. Tidied up the 'Counters' on the Human. Just put it in alphabetical order and made sure they were all being saved properly (and not the ones that don't need saving). Made it so the little arrows for Transports don't show if they are already connected when building Transports. Added an Invincibility Potion. Made it so 'Eject Human' checks for a Floor before placing someone down. Made 'Eject Human' a common function so I can access it from both Transports and Processors. The only other one is the Printer, and I think the best way to solve that is just to turn it into a Processor which will be accessed by the Buttons. Also I just realized my code isn't good enough for checking for an empty Floor. It doesn't account for being blocked by Buildings, and I just saw an image of players putting tons of buildings between Stations so the Humans can teleport. Also for Incubators and Printers, they should not attempt to produce a Human if there is no space in front or if the transport is blocked. For the other Buildings, I made a note to thoroughly test what happens with different things in front of the outpoint, ideally in most cases they will just reset and attempt to do their thing again. Shuffling this to the end of the list. Added Credits to the Options page on the Start Menu. Alphabetized and refamiliarized myself with the Human Activities code. Thursday 26th: Made it so Human Filters are a Transport rather than a Processor. Just a bit of tidying that's more difficult than most. Added the Televat and Telebox, which teleports Items over a distance. Programmed it to go to a target Building but I need to implement controls to make that happen. For this, I may as well use the same principles as I used with Automations, except it will be a lot simpler. ... Wrote out a list of Building and Items I'm going to need for the Cooking Industry. This is just a starter set, but essentially I want to make this area as complex and crazy as possible, and the recipes people make may depend on what their local resources are. The plan is to have near endless possibilities when it comes to food. Got a whole bunch of recipes already and I think I want to add loads. Until now I have been manually adding each new Building to the Shop's UI. I've stopped doing that recently because here the next thing on my list is to automate that. This is nothing new but there will be quite a lot of steps to make this work. ... Turned the Printer into a Processor to make the coding easier. Added Smoothie, Milk + Fruit. Really excited about playing Noita. Gave it a quick go last night. I actually had an idea like this once, but this is so much better than what I had imagined. Looking forward to patiently working through it and being as cheesy as possible, like a true Wizard. Those '...' in today's log is me saying 'this hurts my brain, I'll continue this tomorrow'. Rounded off the day by subdividing future tasks and doing some game design around the 'Paintbrush' system.
[ 2020-12-16 15:08:42 CET ] [ Original post ]
Greetings, Fellow Humans, Thanks for all the feedback and reviews and everyone wishlisting the game. I'm really happy because I think Human Factory has received a really fair and kind shake from the community so far. Yes, this release is buggy and the graphics are all over the place. This is certainly going to change. Thanks to everyone for seeing the potential that we have with this game and being patient with its flaws. I expect to have an update around Christmas/January. This is going to add quite a lot of stuff since we're only 3 weeks from release and I'm getting a lot done. Expect to see slightly better graphics and a ton of new Buildings and Items. Also Baby lifecycles and far more tools to help with breeding Organic Humans. There's actually a ton of new stuff already programmed and implemented into the game (not available to play right now), it's just going to be a matter of bug testing and of course improving the cosmetics. Check out the Devlog for great detail about my progress as I go, posted here on Steam. Making extremely rapid progress. I am one man, so the workflow from concept to implementation is very fast. The challenge is bugs and graphics. I am very easy to talk to here on Steam so if you have any questions ask here or in the forums. Human Factory is seeing great progress at the moment and I am excited to share what I'm working on with you guys as we transition into 2021! If you liked the game so far, I'm sure you will absolutely love what's coming. Special thanks to everyone who has bought the game. You are funding our progress. When you see the huge sprawling factories full of Humans being automatically slaughtered for profit, you'll be able to say 'I did this, I helped make this happen.' Thank you, from the bottoms of our hearts. steamhappy Cheers, Otis Miller
[ 2020-12-14 16:13:14 CET ] [ Original post ]
Friday 13th: Thinking deeply about the Human code. Essentially Humans have an 'Activity' and a 'Target', the conditions of which constantly helping them decide what to do next. I think the only problem with this is that it's messy, so perhaps I could start taking more steps to clean it up. It gets a bit awkward jumping around between 'find item', 'pick up item', 'bring item to my target' etc etc etc. 'Getting Food for Baby' and 'Going to feed Baby' kind of get mixed up in my head. We could try something I don't have a lot of experience with, which is co-routines. But I think this way is working fine and I don't want to break everything. I think I'm just going to do a bit of organizing in here. I'm thinking in terms of organizing code by function rather than trying to cut down on simple bools. For example, I prefer to ask more often per update 'if Dead == false' rather than putting all of them under that umbrella. Then, if/when there are problems, I can zone in on each thing separately. Think I'm going to start from scratch for the next base I build. Going to do as much as I can for a big update on December 23rd. Monday 16th: Added 'DropHeldItem' function for Humans. Used the 'Splash' I made before, so this is something that, at the beginning of the project would have taken me a day or so, now it took 10 minutes. Added a daycycle light which casts a shadow. I can't figure out proper baked rendering to look good, so I'm just going with real time. Had some trouble getting it to start on a specific frame (was to do with dividing an Int (hour) by another int (24) giving an int of 0). Looks pretty cool. Profiler tells me it will run at about 60 frames with this, so that's cool. I've turned it off for lower Quality settings. Simple but effective way to boost the graphics for the next run of marketing. Made it so dead eyes appear on Humans. Made it so Humans produce Milk when pregnant. The challenge is to make it so that the Mother still produces Milk while they have a child. I could make it realistic and difficult for the player so that Humans produce Milk through interaction with their child, but I think it will be better to put some kind of counter so that they keep producing milk for a set time after becoming pregnant. So this will be a float called 'Lactating' which is saved and goes up on pregnancy and goes down after. Taking a random guess, with the aim that there should be a bit of milk left over, and saying the lactation period should be 3 times the length of the pregnancy. Milk has a maximum of 2, so use it or lose it. Sorted out females Breastfeeding Babies. Essentially I'm using the same code as the feeding, except instead of getting an Item we go straight to the Baby and give them Milk, filling them up and pleasing them based on the Quality of the Human. I think a lot of this Human interaction code needs a proper looking at. Added Milk as an Item. (Added the Milk Pump, Birthing Station, Pacifier and Napp-omatic to my new Buildings todo list.) Tomorrow I have a ton of buildings and items to add, which for now I will use placeholder models. Tuesday 17th: First question today is about Cocktails and Bars. Had a think about how this should be done. For now we're just going to make the Cocktail Station, which will have inputs and outputs like any other machine. The Bar will be basically the same, only there will be no Output, but instead a Station so the Humans can drink from it, and the Inputs ought to be moved to the side. The key stat for making Cocktails will be Charisma. This is quite a funny feature. I want to avoid needless layers of complexity and this might fit into that category, but I think it's very Human and is a good way to get more out of the Drug system. Added the Cocktail Station. This is actually really simple, I just copy paste the Drug Lab, change a few names around, assign price, client and tier, etc, and there's actually no code to add because of the way my 'Fabricator' script works. I will do the Bar later as for now it can be easily done with a cocktail station and a fridge. Added Cocktails. Had quite a lot of fun naming them. Just 5 for now, 1 for each Drug. Before adding the effect of the Cocktail on eating, I'm going to take my 4-5 instances of Humans eating and wrap them up in a Function. Added the effects of a Cocktail. This took a fair bit of doing. Thinking that the length of a Cocktail hangover should be half that of a Drug hangover. What's the best way to code this without adding too many unecessary variables? Think I'm just going to leave it for now and address it when I zone in on balancing. The effect lasts longer for Cocktails, so the Drug/Hangover ratio is still better. So, we should now have Cocktails fully implemented into the game. Needs balancing, bug fixing and of course better cosmetics but that's not a bad achievement for the day so far. Added new Item 'Herb'. Changed the recipe for Precursor to use this instead of Fruit. Very simple. Ok that does it for Cocktails. Now onto a random idea I came up with recently, inspired by the film Dark Crystal. How about a machine that kills a Human and places its life into a Mana Crystal, turning it into an Essence Crystal. Then, another machine that consumes the Essence Crystal, transferring it into another Human, extending their lifespan. Pretty brutal, not really necessary right now, but as I said I'm just kind of working through this list and adding to it as I go, stream of conscious kind of way. [A better name for this item would be the Philosopher's Stone]. Made the Philosopher's Stone Item. Added 'Lifespan' to Humans to mark their maximum age. Made the code to extend a Human life using a Stone. Made it so you can place a Phil Stone on a Human to use it. Made it so you can feed a Human Food, Drugs or Cocktails using the Tentacle. Made it so that, if a Human is fed a Philosopher's Stone, they gain the effects of it. Now to make the Machines which extract and transfer the essence. Moving really fast this week, as expected. Focusing on logistics and getting all the ideas from my head to the code was a good idea. It may come back to bite me later but I'm getting loads done and enjoying myself. Backtracking a bit. Going to make the Philosopher's Stone only useful as an ingredient, which will be mixed with... Blood (maybe Milk, but Blood for now) to make Elixir, which will be what extends the life. A philosopher's stone on its own is just an empowered Mana Crystal. Added Elixir. Put the 'Use Elixir' code into the 'Eating' code, and added '|| x.name == Elixir.name' to instances of Humans looking for Food. (Also did this for Cocktails while I was at it). Added the 'Necronominizer', the Fabricator to build Magic Items including the Elixir. Very easy, just like the Cocktail Station. Added the 'Essence Extractor', the Building to make Philosopher's Stones. Programmed the Essence extractor. This one is a bit different. I'd say it's like the Injector, but after destroying the Item we make a Philosopher's Stone. It won't just try and use anything, it will search for a Mana Crystal. Wednesday 18th: Finished sorting out the Essence Extractor placeholder by sorting the Inpoints and Outpoints. Added Elder Battery, a Battery for Mana. Next task is the Speed Tiles. First need to think about it a bit. Should it be a separate object? Should it be part of the 'Paintbrush' mechanic? I think, until I have the Paintbrush sorted, I'll put this object in as a separate Object. How will it work? I start by looking at the 'Update Size and Speed' code I have on the Human, which is so far the only instance in which a Human's Speed is changed. Currently this happens on the 'Update Appearance' code and it tied to Size. Going to move this to the 'Slow Update' which happens once per second and so far handles 'Actual Stats'. That is where I will put the code. The code asks 'Are there any Speed Tiles near me? If so, my speed = speed * 1.5f.' Should work. Added the Pacifier short of coding it. I know that 'Pacified' is going to be a bool which stops the Baby crying and presents a dummy in its mouth, rather than an item or piece of clothing. The question I have is what should the materials to Pacify a Baby be? Should I keep it simple and have it use Squid like the Food Processor? I find that an inelegant solution. Perhaps it could use Wood, Ore, Mana Crystal, any or all non-organic objects. I think I'm going to make it work with Wood or Ore, so it will have to ask for those by name. This object is most similar to the Injector, since it passes an effect to a Human while consuming an Item. Finished making the Pacifier. The Pacifier uses Ore, which is not actually in the game at the moment. Added that so I can compile the code. Added the Nappomatic, which is almost completely identical to the Pacifier only it adds Nappies. What should the resource for Nappies be? Herbs? Skin? Hair? I think Herbs. Ok that deals with the easy Buildings. Got a few more complicated ones that require some thought and some new mechanics. Added the Bar[not really]. The processor side of this works exactly the same as the Cocktail Station, but the Station side is a bit more tricky. Thinking pretty deeply about the Bar. I feel like if I'm adding this, I ought to also have a kind of Bar that simply has a Pipe input and no Processor attached. That way the Player could sort of Build their Bar themselves. I just liked the idea of seeing a human in a bowtie making Cocktails while other Humans pick them up at the bar. In the end, I think I'm going to go back a bit and make the Cocktail Station redundant, with the Bar serving both functions. It can have an Output and a Human station, I just have to arrange things differently to the other Fabricators. I think I'm going to make an item called 'Bar Extension', which will be a 1x1x1 with Pipe Input and Output that can be used to extend the Bar or placed as the player likes. This will add Storage and allow/encourage the Player to build a Bar that actually looks more like a Bar. Bar continued: So one issue with the Bar is that it's the first object I've made which will have 2 Stations, one for the Barman and one for the drinker. So it won't be as simple as just designating the Bar's Outbox as a Food Container. Going to make this a start-of-the-day item as I think it needs better attention since I'm not fully confident or happy with the Station system. Was going to add a Manual Milker, but now it makes much more sense just to make the Milker accessible by a Human. This will make the Milker the first Building that uses both a Conveyor Input and a Station inpoint to accept Humans. Again, this will require a fresh mind, so after sorting a few things out and laying the groundwork, shuffling it down the list. Thursday 19th: Having multiple Stations actually is really easy. I've already kept things versatile enough. I just had to write an exception for Bars to look for a different transform... this will be revisited as more similar objects come up. [Ended up revisiting it within the hour] First thing I'm thinking of today as I add the code for Humans to drink from Bars and Bar Extensions, is how will a Human decide to eat a good balance of Meals and Cocktails? I don't want Humans to continuously drink Cocktails seeking nutrition. Possible solutions: Make the Human alternate between Solid and Liquid. Have a Thirst meter which causes Humans to prefer a Cocktail. Avoid Cocktails if under the effect of any Cocktail. Going with the third one. It's the most simple and accurate I think. This means that Humans will ignore Cocktails as a food source while they are under the influence of a cocktail or hung over. This is something I will definitely need to tweak through testing, but let me finish building my toys first. Added a second 'Waypoint' (just a transform to tell Humans were to go) to the Station script. Also, this way, instead of asking specifically for the 'Bar' and future exceptions, we can just ask if there is a second Waypoint assigned. The reason I did this is because I immediately thought of many multi-Waypoint-Stations I'll be making in the near future. That completes the Bar for now. I highly expect bugs. Now to finish the work on the Milker. Again, I was probably overthinking it yesterday. Just need to program the Humans to go and insert themselves into the Milker if there is nothing using its Inpoint. Big challenge was getting Humans to go to a Processor and load themselves in. Most of the heavily lifting had already been done, just some difficult surgery here to make this work. In the end it mostly came down to just a few lines of code 'if there is a processor attached to the station I am visiting, load me in' and in the Processor, making sure to do a distance check before loading any source (plus a couple of other little things). So that's the Milker for now. Birthing Station. If a Human is almost finished with their Pregnancy, they will try to seek out and use a Birthing Station. This Birthing Station will deliver the Baby, and may be connected with Conveyors to move the Baby around after. Realized I should make it so that more Buildings should eject Humans to an empty floor tile in front of them if there is no transport attached. Made a function and pasted it in a bunch of places. Put a note in my to-do list to give this whole script a bit of a clean. Now I can finish programming the Birthing Station. Went into town today to do some admin and a bit of shopping, so not a whole lot of work done today. I've started exercising more and I think if I spend 1 hour exercising I get 2 hours back in productive time. Friday 20th: It's been a long time since I've pressed play on the game. Undoubtedly there will be tons of bugs which I will have to carefully work through piece by piece. Next Item is the Body Freezer. This will Freeze a Human, pausing all of its functions including Age. Until I implement Hook Lines, which may stretch from the very beginning of the game, I'm going to make a Frozen Human like a cube of ice with the Human crouching inside. Now it's really time to clean and improve the Processor script. The line count is getting way out of hand and I can see a path to reduce it. It will take some time though. The problem here is that every time I make a new Building with a Processor (which is most of them) I have to write 2 scripts specific to this Building. LoadSource takes the Item that the Processor wants if it meets the conditions. And 'Do' decides what happens once the progress bar is filled. I can definitely improve LoadSource and cut down on I think about 7-800 lines of code (and more lines that will never have to be written). It felt for a while like each Building's method of loading a source was different, but really there's only about 5-6 types: Loading a Human, Loading an Item, Loading 2 Items, Loading a Human and an Item, Loading nothing. So, instead of having a about 50 lines of code for each Building, I can easily write 50 lines of code for each of these 5-6 conditions. Having a great time deleting big paragraphs of code since I've now refined it. Saturday 21st: Finished what I started on Friday with the Processor code. Very pleased with this improvement. It will speed up my progress even more. Sorted the Source Type for each Building Prefab in the Editor. Now I can get back to making more Buildings.
[ 2020-11-27 16:29:33 CET ] [ Original post ]
Monday 9th:
Fixed a couple bugs that came up with people. Had a lot of trouble with an automation saving/loading bug but got it in the end. Many thanks to the small community that is graciously finding bugs and reporting them to me.
Pressing play and fixing a few more things that came up.
Effigy is working fine. Basically a copy paste of the Treadmill so no surprises there.
Putting of all the graphical stuff for tomorrow. Really don't get excited about doing that. Animation for tentacle and a wave of objects in Maya. Instead, thinking about the trajectory of the game...
I've got a much clearer idea of what's left in the game and where to go with it. The original idea was to build up to 'soul extraction' technology. But I really can't see a place for that in the gameplay, so I'm shelving that idea. Also, there was the other idea of having rare resources required to build certain machines, but I don't want to convolute things just for the sake of it. These are cool ideas, but I don't really see a place for them in the gameplay and gameplay is king.
To really simplify the remaining parts of the game content:
- Food.
- Genetics.
- Decorations.
- Stretch goals.
Tuesday 10th:
Fixed Human hair shrinking properly under hats (I broke it with the recent change).
Fixed mistake with Human heads and their hair.
Changed the code that resets the scroll view in the HRPanel. Moved it from the Buttons into the HRPanel script. Might miss a few moments where it's necessary or do it where it's not, but I'll fix those as I see them.
Fixed bug someone reported about the Gas Vent basically breaking a save file. Vent will still cause problems but shouldn't break the game so easily.
New Hairstyle code is causing issues. For some reason the Hairstyle is reporting as null, even though it is being used fine in the very next lines of code.
{
if (Hairstyle == null) {
Debug.log ("null");
}
Debug.log (Hairstyle.Name);
}
So, how is it possible that I am getting both debug reports? If 'null' happens, the Hairstyle.Name should have no answer (should produce an error). It's like I'm saying 'Is there a coin in your hand?' 'No.' 'Is it heads or tails?' 'It's heads.' If there is no coin in their hand, how could it be either heads or tails?
I can even write this:
if (Hairstyle == null) {
Debug.log (Hairstyle.Name);
}
and it reports the name... Wtf? I've never seen this. If something is null, and you try to do something with it, it produces an error. That's usually how I find out what the problem is. This is a horrible feeling.
Ok so usually when I make a class like this and have a component with this class as a variable, it doesn't show up in the editor. This time it was and, when I looked at it, it appeared as null. So I think the issue was some kind of overlap between the editor's understanding of a Hairstyle and the script's(mine). Like, the Human component was looking for an object with a script called 'Hairstyle', of which there was none, but at the same time, it had the information within the class. Actually I'm not going to try and understand it. I think I fixed the issue by removing ': MonoBehaviour' from the 'Hairstyle' class.
Uploaded the Build since there are a few people who reported problems (with spells still locked out).
Animated the spell casting with a sound effect. Just enough to tell me and the player that you have successfully cast a spell. No particle effects or any change for different spells.
Part of the reason for doing this next was so that I could put together everything needed for the first big update. However, I realize that we are only a week out from release, and I can probably achieve a lot more before releasing a proper big update.
So I'm not going to do Maya yet (my id does a little victory dance). I'm going to plow ahead with the logistics and programming and see how much I can get done in a month. If my wild crazy hubristic predictions are correct (which they occasionally are), that will be rather a lot.
So, on to advanced tests with mating and making the remaining Buildings and Items currently planned for the game. This is the fun part. THEN I can do graphics.
Wednesday 11th:
First task today is to fully test and fix the gas vents. First dealing with the basic parts of the prefab like the colliders and components and attaching it all. Made the space within my own base to start testing this.
Lots of testing and fixing.
Got the Gas Vent to show its area of effect.
Positive test on the Gas Vent, testing instakill. Pretty dark stuff.
Fundamentally changing the code for the way Humans mate. Instead of waiting until they happen to talk to someone they like of the opposite sex who also feels the same way and they're both in the mood, I'm going to make it a bit easier. When a Human has high Mojo, they will actually seek out a mate from nearby accessible Humans whom they like, and then proposition them. This is a big change and will require lots of testing.
Removed the 'Arkanizer' as, for now at least, it won't be necessary. I have plenty ideas for Mana buildings already. Really, this feature set of the game has changed a lot since I started working on it.
I was going to add a Building called a Sacrificial Altar. Actually, I can't really see people using this. It's way too messy, and would require either the Sweeper Robots or a lot of clicking to use. I just don't really see it being a thing at the moment. What I DO see being a thing, is the 'Wall Eyes', which converts some of the suffering it sees into Mana.
Made the Wall Eye. Some bug fixes and improvements to code to streamline this.
Really happy with this building. It generates Mana based on a change in Mood in the nearest visible Human. This will encourage players to make some really interesting inventions.
Had to go through all the Hitboxes in the game and tag them 'Hitbox' which was pretty tedious. I guess in future I should use prefabs more often but that would be a ton of work to change now.
Made a TODO list to help speed me up whenever I make a new Building.
Added dialogue to Arkanos to explain the 'Love Glove'. This is a button you can toggle which will make Humans no longer react to your presence, but will cost a small amount of Mana every time you use your Tentacle.
Programmed the 'Love Glove'.
It's amazing how much faster I am at programming than I was when I started this project. Makes me want to start a new one. Still enjoying the exponential progress I'm making here though.
That's 2 fairly big new features in the game with the Love Glove and Wall Eye. Not bad for a day's work. Need to test it more thoroughly but I see no reason for any big problems. Going to do some more stuff and test it all piece by piece later.
Thursday 12th:
Really just programming in a stream of consciousness kind of way at the moment, working on whatever I feel like working on with not much rhyme or reason besides what makes sense to me at the time. Stopping quite often to write down ideas or nail down concepts, for example today I fleshed out the concept of 'Drinks' and 'Bars'.
Added a visual effect to the gas vent. Some particle effect coming from each 'floor tile' the gas effects. Not too difficult. Pretty happy with the way it looks, it's at least very clear.
Moving ahead with the presumption that there is going to be a complete graphical overhaul, so not spending too much time on any one thing.
Decided, since I feel like I'm so ahead of the roadmap, that I'm going to do all the logic in the game before I jump back into the graphical side.
Used the same animation for Mating for Worshipping right now (dancing).
I was going to make a new function which would be a universal display message. Decided for now just to update the tooltip for people struggling with Pipes and this is a cosmetic update I can sort out later.
Skipping having Beards show up on severed heads for the moment. Again, I feel like this is something that will come up in a big graphical update not so far down the road.
Really like the idea of Cocktails and Bars. I just feel it's not only a good game mechanic but it's something players will really enjoy from a cosmetic point of view. So, what is the recipe for a Cocktail? Drug + ???. It would make sense to use Fruit, but we already use Fruit in Drug Production, so it seems a bit tedious and redundant.
The short answer is Herbs. Make the Forest give Herbs as well, and that's what's used to make Drugs, while Fruit can be eaten or used to make Cocktails.
Thinking deeply about the game this week, I realized that one of the things that would keep the game really interesting is randomly placed resource nodes and more variety in nodes and what they produce. For example, a Forest could produce Green Herbs, Red Herbs, Wood and Fruit (with Humans in the correct Clothes finding more of a specific thing). However, there may also be a 'Mushroom Forest', which produces nothing but Mushrooms and Herbs.
Maybe it should be more refined than that, with Trees producing Wood and Herb Gardens producing Herbs etc. Why was my initial idea to have one resource node that gives multiple things, rather than many smaller nodes? Do I want it so that Trees must be regrown in order to cut them again (no)? Should I spend a week planning this out before going ahead and making a decision?
I think variety will be the fun thing here. Not too much, but just enough. I like the idea that the results you get from a Node could be a bit random. Right now I'm thinking I should stick with my initial idea with the different Nodes producing different stuff, and I think it gets better with just a tad more variety. So, you can also have Herb Gardens which will give exclusively Herbs.
I like the idea of players essentially building colonies around these Nodes and connecting them all up. Later down the line I think it would be kind to, for a high price, allow the player to build these nodes themselves.
Made it so that the Shower takes Red and White Mess from Humans.
Folded 'CheckIfRelated' code into a function to cut down on lines of code.
Added new Item 'Mana Crystal'.
Made a TODO list to speed up Item creation in the future.
Added the Crystallizer, the machine which converts Mana into Mana Crystals. This is most similar to the Food Processor so I used that as a base for the code and I also used the 3d model with some swapped materials as a placeholder.
Got a bunch of new things I want to make which are all kind of difficult and big and all come as a group: Wall Turrets, Sickness and Sweeper Bots.
Next bundle of things I have on my list is going into detail and programming the Babies. Before I start this, I should spend some time thinking and planning and laying out exactly what I'm doing here. (Also having a nap).
Sorted out restricting Human activities based on their age. This includes reducing the 'ActualStats' of Humans based on their age/16. So 12 year olds will work, but at 3/4 the capacity of an adult.
Plus a couple other things that got lost because this text file didn't save properly. Next thing on my list is to program a Baby to Summon a Human to change its Nappy or feed it.
Friday 13th:
Oh, Friday 13th!
First I need to think a bit about how feeding Babies should work. They will prioritize their mother, who will generate milk and go and -milk +baby's fullness. But what if they are separated from the mother, other Humans should be able to feed them.
I haven't currently got any setup for Humans carrying Items. It shouldn't be too difficult to say 'Finding Food for Baby' > 'Getting Food for Baby' > 'Bringing Food to Baby' > 'Feeding Baby' while the baby is 'Waiting to be fed'.
Thinking of other possible uses for Humans being able to carry an object around. I could think about having 'hauler' Humans, who would move Items from place to place.
Made it so Humans can carry Items. Sorted for saving and loading too. The Item will be inactive and there are currently no circumstances where it will appear again.
Programming 'Changing Nappy' first as it's a bit easier. Keeping it simple for now at least; the Human will simply add the Babies' waste to their own and this will instantly cause them to want to go to the toilet. No need to use the Items in this case. Let's nail the code for a Human Summoning and interacting with another Human.
First the Baby checks for the Mother, then the Father, then its nearest relative (cleaned up the 'Check if related' code), then simply the nearest Human. Making this a Function on the Human since I know I'll be using it more than once.
In this case, if no Human is found, the Baby will break the Nappy and resume projectile Pooing.
The Human approaches the Baby and after 4 seconds, it absorbs the Waste of the Baby. They will then go to the toilet as usual and we can imagine that they drop off the Poo while they do.
Made a common function for 'Look for Food' because now it is used twice. I think this is good practice.
Sorted out a bunch of things to make this work, cleaning code as I go.
Humans now, when summoned, go to find some food, then bring the food to the Baby and feed it. Lots of lines of code and I'll be very surprised if it all works smoothly.
This is quite a big achievement.
Bonus code: if a Baby is force fed solid food, it will die.
Sorted out a bug that was stopping Humans from growing.
Ok I've got a lot to test and fix now. But I still have more things on my list.
- Simple Day/Night cycle (maybe with more than one Sun).
- Dead Eyes on Dead Humans.
- Make Mothers produce Milk. (Also make Mothers use their Milk to feed Babies instead of finding Food elsewhere).
Then I have a whole bunch of Buildings to add which have just come to me recently. Going to do all of this and then see how I feel. Good way to end a Friday.
[ 2020-11-27 16:27:48 CET ] [ Original post ]
Monday 2nd: Released the game on Early Access. Was pretty today, very nervous about the release. Maly's friend Nahir encountered a bug where McCthulu wouldn't show up. I was so worried that this would happen to everyone, but luckily we were able to get McCthulu to appear in the same build most of the time. So, it is a bug, but it's not one that's going to break the game for everyone. Sorted the UI for Spells (no thumbnails yet). Tuesday 3rd: Fixed a bug where I accidentally asked for the 'Human' component in the Skullverizer, when it should be asking for a head. The way most clients are met is via the export box script. To make sure it only happens once, I ask if the Quantity of Blood/Skin/Skulls is == 1. The problem is making it work for people who have already exported some Skulls. So I have to think of something more clever. Someone reported a bug with the Grinder. For some reason it was putting things in the wrong container. Fixed easily. Fixed Eyebrows not matching. Fixed the 'Dead' bool not applying on load. Made it so the Wall Flipper can't summon dead Humans. Made a build and uploaded it to Steam because someone reported a bug I really didn't like. Added Arkanos and his Buildings to the Shop so I can generate some Mana and test these spells. Made a cheat to add Mana. Going through each Spell and testing it for the first time. All Mood effecting Spells work fine. Rend also works fine with a few fixes. Spent a bit of time sorting out a bunch of bugs and improvements. Now to test the Cupid's Shotgun spell, which makes 2 Humans mate each other. Spell works. This leads me on to testing the mating, which is a real scary project to tackle. So the first bug with this is that saving 'Current Mate' causes the game to crash. 'MakeHumanSave' saves the Human's Current Mate, as well as Baby, Mother and Father. These are all made by using 'MakeHumanSave' to attach a HumanSave to this HumanSave. So we have a loop which crashes the application. My first thought is to make an identical version of 'MakeHumanSave' which does not attempt to write any of the relationships. I spent some time thinking about whether this could cause problems, or if there's a more elegant solution. In the end, I'm going with this. It won't ever come up for Baby, because a Baby will never itself have a baby. Mothers and Fathers are already rendered as HumanSaves (as opposed to 'Human' components). So I just made a function called 'SaveMate' which is an exact copy of 'MakeHumanSave' but does not attempt to create a new mate. Fixing more bugs with pregnancy and mating. I mistyped 'haircolour' for 'hairstyle' at one point in the script and it took me a long time to figure out which line was causing trouble. Lots more debugging to fix mating. Got a lot of hours in today. Finally got the whole process of conception to birth working. Next I just need to get Babies to act like Babies. Wednesday 4th: Ok so we've finally made it to the milestone of making mating work. After dealing with the conception to pregnancy process with confidence, it's not so scary anymore. Going through my list and re-organizing. I want to push on with Mating and keep adding content with Placeholders, but I think I had best buy and use another month of Maya. First, got a list of tricky little things that don't fit into any particular update. I'll do those first and log them as I go. This includes a rather big one which is a big refinement on the canvas selecter. Ordering things in terms of updates, as now we're in Early Access I want to keep a regular flow of content. Also drafting all the way through the planned content so I can try and make it all in Maya. 1. Random bits. 2. Maya. (all known objects that can be done in a month) 3. Necronomicon: Do the remaining things to complete the first set of Spells, Clothing, Buildings and new Client for the Necronomicon update, make a trailer and release. 4. Mating. Thoroughly test and fix mating, adding several new objects to the game to make this happen including Pacifiers, Delivery Machines, etc. 5. Drugs. Just need to test it properly and make sure it all works. 6. Cooking. Sort out the entire industry of Cooking. This will be fairly time consuming but pretty straight forward and the biggest challenge will be balancing. 7. Genetics. Machines and Items to modify the way a child inherits from its parents. 8. Mining. This will be needed for Genetics so they'll be built in tandem. - This should cover all the basics of the gameplay. Then it's time to test and fix thoroughly as I improve on the cosmetic side of the game. 9. Voices. 10. UI. 11. Improved 3d objects. 12. The Paintbrush. A way to access alternate versions of each building for different looks and slightly different effects. For example, an astroturf floor or a Forest that looks like a Supermarket. - Testing fixing, and polishing the game. 13. Expand on gameplay content where necessary. 14. Finish the story. 15. Start wrapping up for full release/Start ramping up for stretch goals and further polish and cosmetic improvements (I need help from the players for this timeline). Wrote the dialogue for Whiskers, a new character who will be the source of all things genetics and sci fi movies. Really had fun writing his dialogue. Giving my brain a quick break and then coming back to try and get all the random bits out of the way. Made the 'Faded Old Hair' variant. Ok the first thing I want to knock off this list, which will make some of the other things easier, is basically re-doing all the Canvas selecting stuff. I have to give this some thought. In the end, it seems at the moment it's enough to just remove the snapping on the Selecter and Deleter canvas selections. Feels much better to use now. In doing so, I found a crucial bug where floors wouldn't delete properly, so I'm going to get a build out now since I think it's fairly stable (locking off Arkanos and Spells for now). Fixed a bunch of fairly major bugs over several builds uploaded. Makes me really stressed to have such big bugs but I suppose it's bound to happen. Thursday 5th: Fixed an issue with the Steam build. Took a while but in the end it was just a matter of getting the latest Steamworks.NET. I was going to do some restructuring of the building folders and things like that but actually I think that can wait until maybe a UI overhaul or something. The last little annoying thing that I ought to do is to make it so Human heads retain their cosmetics even after they are severed from the Human. This is quite tricky and time consuming. First big hurdle is in copying over the hairstyle. I could copy and paste my hair updating code from the Human and repurpose it, but that code is itself already really messy and I don't want to add more spaghetti. Instead, I'm thinking of better ways to do hair. I'm thinking Hairstyle should really be a list of hairstyles, with their position in the list corresponding to the length of the hair. Then instead of this big line of spaghetti code I have, I can do something like 'newHair = Instantiate (Hairstyle[Hair], Haircontainer);'. At the moment it writes a different script for each length of hair, and again for each case of 'Straight/Frizzy'. That was a fun puzzle and I've tidied up the code nicely, while making cosmetic changes to severed heads persist through saving and loading, as well as the added detail of head shape also being effected now. Added left handed camera controls per someone's request. Updated quest and tutorial to match.
[ 2020-11-20 18:34:21 CET ] [ Original post ]
Fixed a lot of bugs that people were reporting. - Building a Gas Vent should no longer break your game. - Building a second Automation Wire should no longer break your game. - Some other bits and pieces. There are likely to be some other bugs in this build, but those ones are fixed. Please let me know if(when) you find them and I will continue to fix them at high speed. Progress is going well. The next proper update is probably going to bring a huge pile of stuff.
[ 2020-11-10 17:27:04 CET ] [ Original post ]
- Major bug with the Delete tool should now be fixed.
- Canvas selecting and deleting no longer snaps.
- A few other random fixes.
[ 2020-11-04 18:47:41 CET ] [ Original post ]
Saturday 24th: Started doing some of the ground work to get the Religion industry up and running. Added Mana, sorted it for saving and loading. Added (in theory) the Cultist Clothes, Effigy and Arcanizer objects. Programmed the clothes, made the Humans use the Effigy. Programmed the Arcanizer, ahead of programming what a Spell actually is. Sorted saving the spell which I think will just be a String. Programmed the very simple spells in a common function 'CastSpell (string Spell, GameObject Target)'. Lie puts the Human Mood to 75. Euphoria at 150 and Reveal Truth at -150. Did a few more of the things to get this industry working. Did a few of the more complicated spells like Cupid's Shotgun. Doing them as they come to mind. If I haven't explained already, the reason I'm doing this now is because I think the Spells will be powerful debugging tools. Going into the Processor script and tidying it up as much as possible using common functions. This is pretty non-urgent stuff but hey it's saturday. I'll make a better plan on Monday. Programming 'Spells' class, which is going to be more than just a string in the end to make it easier to manage costs and later thumbnails. Sunday 25th: Doing more stuff as it comes to me in a stream of consciousness kind of way. Finally getting to splitting up the 'Object Menu' into separate scripts to make it easier to use and edit. Got rid of some strings, replacing them with a proper cached name. Mainly for tidiness. Not sure why I'm doing work on a Sunday. It's usually a bad idea. To be honest I'm having fun. I guess I have a sense of relief having released a stable build that I think is ready for Early Access, and now I feel confident to really dig into the code with no remorse and make some big improvements. Lots of cleaning up the code. Made a list of objects I need from Maya. Turns out I already made most of them, but still I listed the ones that had slipped through the net. Going to wait a little longer before cracking out the Maya again. Made placeholders for the new Buildings and Objects I made over the last couple of days, plus the Feeder. Drew a rough design for 'Arkanos' the Client who will handle magic. Wrote dialogue for Arkanos and the outline of his quest progression. Monday 26th: Animated the Feeder. Very simple animation for now since I would really like to improve this object in the near future. Took it easy since I did a lot over the weekend. A lot of thinking. Started the day by going to the beach, 1 minute from my new flat (yes, I am a jammy bastard), and finally going for a proper swim into the deep end. You know when you go running for the first time in a while. You're having a great time. Then suddenly, you realize you're a 33 year old smoker who spends both work and leisure time at a desk, and reality hits you like a ton of bricks. Your legs turn to jelly and you have to gasp for air. Ok, imagine that, but when it happens you're actually a good 5-10 minutes of swimming from anywhere you can rest. It was terrifying. So simple, so silly, but for a good while there I felt like I might die. Treading water was too difficult in those waves, so I was just losing energy like that. I did manage to lie back and float for a while, like my grandfather taught me, and it worked, but I was worried that I might be getting pulled further out like that so I got back to swimming quickly. So I realized I would have to swim back even while my tar filled lungs were filling with mucus and begging me to stop. They could not send more oxygen to my muscles, which were torturing me to force me to stop. Full on break down of the body, but with nowhere to put my feet. I even ended up swalling a bit of water, which didn't help the panic. When my foot finally touched the ground, it was glorious. I actually felt like the guy in Subnautica when he first gets to land, and thought about how screwed I would be if I got attacked by a spider crab thing. I literally just sat there on the rocks like a beached whale as my arms and legs turned completely into jelly. My muscles wouldn't move, so I had to sit there and get punched in the back and pelted with rocks by the waves. After a minute or so I pretty much crawled to where my bag was and collapsed again. Then, a couple minutes of rest before I realized that I would need water very soon. So, I climbed up the near 45 degree hill back home and, like everyone's favourite politician, called an early lid on the day. It was pretty cool. Tuesday 27th: Programmed a few more Spells, including 'Rend' and 'Grow Hair'. Implemented Beard growth. Reduced range of all audio sources a bit. This should help until I can hire a sound designer. Drew the new Client Arkanos and gave it to Maly for scanning. Added my placeholder Arkanos scene which I wrote over the weekend. Ok I think I've just done a much better version of the 'Connect Transports' script and wired it up nicely. That was much much quicker than I thought. We'll see if it actually works. So I've got myself a nice list of things which I think may take up to a week to safely implement into the game. So we'll see if this ends up being a day one patch. Mostly just testing and fixing and making sure everything I've been doing lately is working. Lots of small and tricky things. This will clean up my to-do list. Then after this it's Mating, Painting (wall and floor textures), floating texts, Voices, and then on to the rest of the content starting with Cooking. Friday 30th: Took a couple days off to play Vermintide 2. What? Yes, I'm a developer, I can do that. Pressing play and dealing with all the bugs that come up. The first big one is that Humans don't remember their Head/Eye/etc styles. So, in order to preserve existing save files, I'm putting a thing that will default all of them to a basic style if I get a null. This will be a problem if it occurs late game if the player cares about these styles (which they may do with future mutations), but it better than crashing on loading an old save file. Amazed that the new Transport code is working great with no bugs (yet visible). Got the game basically going again after all this new stuff and restructuring.
[ 2020-11-04 18:43:03 CET ] [ Original post ]
Patch Notes: Major: - Humans now have Beards which grow and yield extra Hair in the Shaver. - Optimized building Transports. Players may find that with lots of Transports in the scene, building a new Building would cause a few frames to drop. Now this should no longer be the case. Please report any problems with Transports connecting with each other. - Fixed bug where Offal would not go into the correct Container of the Grinder. Minor: - Sorted the position of the Human on the Decapitator. - Fixed Humans having non-matching eyebrows. If you want to keep these limited edition non-matching-eyebrow-humans, be sure to breed them before installing this update. - Dead Humans now stay dead on loading a save. - Fixed a bug when placing Items on Conveyors. - Made it so the Wall Flipper can't summon dead Humans. - A few other random bugs fixed. - Ignore the new 'M' currency. Your mind can't fathom it yet. That's for big Gods. Hope everyone is enjoying Human Factory. But not too much, you know.
[ 2020-11-03 15:17:07 CET ] [ Original post ]
Greetings, fellow Humans,
We just released Human Factory in Early Access!
I seriously cannot wait to see what creations everyone comes up with. Please show your factories!
The first update should be coming in the next month or so and I can confirm that it will include the 'Religion' industry with some new Buildings and Clothes and a ton of new Spells. Probably going to call it the 'Necronomicon Update'.
Come join me in the Discord or post here in the Steam forums if you have issues, suggestions or comments.
Happy Halloween everyone!
[ 2020-11-02 16:38:11 CET ] [ Original post ]
Monday 19th: Playtested and fixed from the beginning until the new content again (Clothes and Drugs implemented). Uploaded a nice clean build. Tuesday 20th: Summary: - Bug fixing and minor improvements. - You can now program Batteries to send an automation signal based on the amount of Power you have, giving them a function outside of increasing your max power. Sorted holding shift to ignore floor when selecting, which by extension works with the Copy Tool (pressing C with some buildings selected. Made Resource Buildings flippable (press T). Edited the sound effect for the Fridge. The Player could use a little more Skin to make Clothes with. Made it so that when you a skin a Human with Clothes on, it removes the Clothes and grants 1 Skin. Sorted out the Export Box for overflow. Cleaned up the positioning on some of the Building UIs. Fixed some other random bugs and that completes my list of small things from yesterday. Wrote a wishlist of Wallpapers I think the game could use. Fixed a bug which occurred when a new Human is spawned in the first second of loading before the nav mesh is built. Added some more names to the list. Did most of the work to make Batteries automatable. So that means UI, scripting the Battery etc. Wednesday 21st: Summary: - More fixes and improvements. - Started work on Logo. - Camera tested and fixed. Finished the work I was doing with the Battery and also made it so you can change the 'Formula' on the Battery and Camera. This should save players having to make a Not Gate in some instances. Also sorted all that out for saving and loading. Spent quite a long time making a base in the shape of 'HUMAN FACTORY' for a potential logo. I want it to actually work so it's a bit of a challenge. Didn't finish it but got a long way. Found quite a few bugs I want to fix and starting hitting the wall a bit in terms of optimization, so I may have to do some optimization sooner than I thought. Testing and fixing the camera. Lots of things to fix, big and small. As expected. But at least I'm finally here. The biggest problem is that when I pluck a Human from the Camera Zone it doesn't subtract it from the hitbox. Dealing with that first. Done. Dealing with a few little things that came up first. Made it so you can build straight through walls with extended Conveyor and Pipe Builders. Dealt with an issue where some ghost objects would remain. Fixed the position of Humans on the Mojo Extractor. Made it so the last used Profile is shuffled to the top of the list when saving so the 'Resume' button works better. Sorted out the UI showing when editing Camera Zones. Last bug remaining on the Cameras is the zone editing when the camera has been rotated (which will be 3/4 of the time). I need to either come up with something better or change the formula for each rotation. [Came up with something clever/simply enough to make me feel stupid: just reset the global rotation of the Cam Zone to zero.] Cameras fully working now it seems. I'm sure I'll run into more bugs with this but for now I can remove Cameras from my to-do list (finally). Next thing on my list is another scary one. I need to fine tune and fix mating to work in all the various ways it should. However, I'm making a slight change of plans and jumping way ahead to 'Religion' and Spells. These Spells will be useful in testing and fixing things like Mating, because I can make spells to effect their mood, mojo etc and for my own testing uses I can give myself infinite Mana. Then I can test 'natural' mating and fighting for starters. Thursday 22nd: Was going to do the 'Religion' industry today, but instead I think I should do a trailer with what I've got so far. Made list of shots for the Trailer. I should be able to get a lot of these from existing save files. Had some problems with Premiere. After a while, turned out the fix was unplugging my headphone line in. Fixed a syncing issue. Took the evening easy. Next step is to film the trailer which begins with starting a new save file. Friday 23rd: Put the new logo in the Main Menu screen. Sent high res image of logo with easily maskable background to Maly to replace the old one. Recorded and edited the trailer. Keeping it dank and to the point. Saturday 24th: Fixing some bugs that came up in Malys and WeeHourz playthroughs. Human collider doesn't ever really switch off anymore. Also, when taking a Human from a machine while it is in use will now reset all of that properly. Sorted out a little bug with the Chopper where items going in would disappear. A big one that came up in Maly's stream: the Wall Flipper. Since it only works on some sides, I'm pretty sure it's to do with dodgy rotation numbers (0 sometimes comes up as 1-0005353-e or something and doesn't match with the rotation of the Wall Flipper)... It was. Fixed using Mathf.round. With these bugs fixed, I can confidently put up a new build.
[ 2020-11-02 10:28:07 CET ] [ Original post ]
Monday 5th:
Summary:
- Did a 2 hour stream.
- Bug fixes, balancing and testing.
Did a stream, not much in the devlog this day. Fixed some bugs, played and tested and did some fairly major balancing tweaks. Sorted out a lot of sound issues.
Tuesday 6th:
Summary:
- Auto Fabricator fully implemented.
- More testing, fixing and planning.
Sorted out the Auto Fabricator (named 'Fabricator') which can make any Item but requires a lot of Power to use and the quality of the Item does not benefit from Humans.
Fixed some animation and the image on Pipe splitters.
Fixed some of the sound issues.
Made it so you can see info about the Human's current drug situation in the inspect panel.
Made a build because this one is pretty stable and gets the job done.
Made it so right clicking on a station will open the Inspect Panel for the Human occupying the Station.
Next thing on the list is to make it possible to have more than one Filter on a Human Filter. This is quite a big one and will require all of my brain.
Wednesday 7th:
Summary:
- Human Filters can now be set with as many filters as the player likes.
Today my sole task is to get Human Filters to have multiple filters. This is a fair bit of work on all fronts.
Sorted the UI.
Sorted the programming of the Buttons.
Sorted saving and Loading.
etc etc.
Taking a break before going into the testing phase to make sure it works (which it surely won't).
Tested and fixed a bunch of issues. Spent a lot of time on a silly bug with the size of the content of the Human Filter scroll view.
Thursday 8th:
Sole task today is to get the Camera into the game. But first, I find there is a bug when I try to save and load the new Human Filters, so I will seek to fix that now.
Fixed a few more bugs with the Human Filters. Lost my old save, I hope this doesn't happen to players. Going to wait a bit before uploading this build.
That's a good chunk of the day gone already.
Camera Building is almost identical to wall flipper building, so that was easy.
Programming the Camera was also pretty easy. It counts the number of Humans, based on a Human Filter if it has one, that are within its 'hitbox zone' which is defined by the player. The player also defines the 'Value' and 'Formula' and if the number of Humans in the 'Zone' is >=/<= to the Value then we send a positive Automation signal.
[decided to ditch the 'formula' thing and instead players can use a Not Gate if they want <.]
Made the UI in the editor.
Programmed the UI.
Today I'm really feeling the rewards of good programming practices earlier on.
Sorted saving and loading for the camera. Just the size and scale of the zone and the value.
Programmed the lines in the Controller to manipulate the size and position of the Camera Zone.
And now to test it and make sure it works! However, I've lost my save file. So, I think I'm going to start my game again and organically build back up to testing the camera properly.
Friday 9th - Friday 16th:
Last week I moved flat. Lots of moving boxes and organizing. I've been without a desk so barely any work done except for a few reported bug fixes for Blacksmith and Human Factory. Also had a really nasty cold which is only now letting up. It was a nice break from development and I played a good bit of Tekken 7. More to come next week!
[ 2020-10-21 14:45:46 CET ] [ Original post ]
Monday 28th:
Summary:
- Lots of bug fixing, playing and game designing.
Lots of bug fixing for the new recipe system as well as some other things.
Lots of playing and fixing and thinking deeply. Got myself a massive list of fixes, big and small, to apply before playing again.
I tried the new setup. It works great for turning Lungs into Gym Clothes, but Organics is a problem as expected. I expect this to be a problem any time there is too much of one item; it causes the player to have to get really clever with their automation.
Solution: I'm going to diversify the items that come from the forest. Instead of Organics, there will be mostly Fruits which can be eaten, sometimes Wood which can be used to make the clothes or burnt for a decent amount of power and finally the 'Rare Flower' which will be used later for genetic hacking.
Now I should be able to do a bit of clever maths to figure out the Wood-Fruit ratio. Essentially, the amount of Wood that comes out should effectively be 1 or 2 per lifecycle of a forager. The choke point will likely be how much food is consumed per person, as the conveyor will probably back up. So I should aim to make 1 wood per lifetime of fruit...
I'm not really the type to measure things out, I'm more the type to do it by taste. I think 1/10 should be about right.
Added Wood and Fruit to replace Organics. Programmed the Forest to produce them.
To make all this work, I need to get Humans to be able to use buildings other than the one designated by their costume. Otherwise it's too stressful when there becomes an imbalance. This problem will be further avoided with the use of Human Filters on Wardrobes.
I thought it would be quite difficult, but it wasn't too bad. I had to move the 'calculatenavmeshpath' and I only remove something from the list of possible Stations if we have found a valid station for our clothes. Going to press play and see how this works for a while... Works pretty well.
Quite proud of my base. The plan this month was to get quite a bit more done content-wise, but in the end it has been more about polish and gameplay. I do enjoy solving gameplay puzzles rather than programming or doing 3d stuff.
Got myself a nice list to be getting on with tomorrow. The first one is the most interesting, adding locks to Wardrobes and Fridges with Human Filters. This will make it easier to get a bit more out of your Humans before implementing the Clothinators.
Started with adding the Human Filter to Wardrobes. Found a way to make it easy to add Human Filter to pretty much any object. I could add one to the Feeding Trough or the Treadmill too. Would it make sense to do it for the toilet? I suppose there is no harm in having that option? I could do it for every object that the Humans interact with. There is space for it in the UI. I'm going to do it.
Again, what strikes me when playing this game is that I think it is a whole lot harder than a lot of other similar games. There is no fail state, but making a functioning base using everything is actually quite a feat.
Knocked more things off the list. Probably over did it today a bit.
Tuesday 29th:
Summary:
- Lots of little fixes and improvements, including a couple new things.
Conveyors now snap to buildings just like Pipes.
Attempted fix for 'Idle Wandering' humans bugging out a bit on load.
Sorted making Hats appear.
Added Batteries.
Sorted the Forager clothes a bit.
Removed need for Humans to have a free bed before mating. Let's see what happens.
That's all the smaller things off the list. (didn't list everything here).
Cleaned up some bugginess with building single conveyors.
Adjusted Hair size for Hats.
Sorted making Hair appear on Human heads. Going to see how it works for a bit before making this work for saving and loading.
Sorting out the UI for Human Filters as well as adding a couple options; Best Stat and Clothes. Now that we have a better variety of options, I'm shuffling a few things around behind the scenes.
Sorted UI and programming for the new Human Filter options.
And that clears the list. Next is to continue expanding my base and deal with problem as they come.
Wednesday 30th:
Summary:
- More of the same. Killing it this week.
Playtested and fixed a few things.
Made a build which I think is suitable for Youtubers. Hopefully there aren't too many bugs, or I can squash them before the Youtubers see them. Either way, it feels good to have a worthy build on Steam.
Next is to build a Clothinator into my base and make it work. Actually, the 'Wardrobe' system works really well, but I think it would be cool to have the clothinator option.
Build in the Clothinator and did a fair bit of bug fixing.
Playing and made myself a whole other list of things to fix before putting out another build. Drugs are working fine, I just need to add a few recipes and then I can call that section done for now.
Cleared the list. Getting a lot of hours in this week.
Played some more. Next on my list:
- Double check and refine the code to make Human Stats effect their work.
- A few more little things.
- Floating text on Exporters to make it very clear how much your Items are selling for.
- The 'Skullverizer'.
Then when this is clear the plan it to move on to Mating and make sure that all works. This will be easier said than done.
Added a bunch more things to the list. Essentially just adding what I think is needed as it comes to me. Got a nice big chunky one to be getting on with tomorrow.
Thursday 1st:
Summary:
- Roadmap.
- More fixing.
- Added new objects Skullverizer, Sleep Drug and Painkiller.
Made a proper roadmap, listing all current features and all features that are yet to be made.
Refined the effect of Human stats on their work. Including making Happy Drug effected by the Mood of the Human.
Added a new Building the 'Skullverizer' which turns Heads into Brains and Skulls.
Removed all Hair on removing a Human Head.
Backed everything up on my hard drive.
Added Sleeping Drug and Painkiller, as well as their effects. The Quality of Happy Drug is now effected by the Mood of the Human when it dies.
Modified the cost of items coming out of the Export Box. Value is not changed when the item is made, only Quality, and the amount you get when sold is Value * Quality/100.
Made the Wall Flipper automatable.
Made Butchery machines reduce Human Mood (unless they have a Painkiller).
Friday 2nd:
Put the Vent, Injector and Camera into the game. Vent and Injector have been programmed but not tested. The Camera should be an interesting one and to be honest it's a bit ambitious to get all this done today. Going to program the camera starting Monday.
Added 'Instakill' drug because it could be useful.
Sorted the game object for the Camera.
There's still so much to do, so no need to get ahead of myself. I'm going to build the Skullverizer, full Drug industry and Injector into my base. I'm going to test the Fabricator to make sure that works (a machine that does the Tailor or Drug Lab using large amounts of Power instead of a Human). Then I'm going to make a room to test the drugs in and get drugs, gas vents and that whole thing done. Then I can move on to Cameras and Mating.
[ 2020-10-21 14:42:34 CET ] [ Original post ]
Monday 21st:
Summary:
- Finished Automation.
- Some other fixes.
Finished the work with saving and loading the Automation connections. I didn't make a new ID number in the end, instead the Wire remembers the ID of the Building it's attached to, and then a binary decision of whether to go for point '1' or '2'.
First problem today is a glitch where the automation wire keeps flashing when hovering over its building. This is because it's being turned on by one building, but not by the other. Spending some time trying to think of the best way to solve this. I didn't want to use 'Raycast' again or shuffle everything around completely, so I just made sure only to hide the object at the beginning of the script if either of its buildings are the highlighted object. In other words, fixed it.
So that ends Automation for now. I'm sure to run in to some bugs down the road [found a small one straight away], but I'll call it done until then.
Next is to playtest and fix.
The aim this week is to get a build out which is ready for Early Access, though I will almost definitely get a lot done between now and then.
Sorted out some bugs with Pipe Building and Camera Positions. Tricky puzzly stuff but fairly satisfying.
Tuesday 22nd:
Summary:
- Streamed playtest.
- More little fixes.
Did a stream where I built up my base and showed off all the features of the build.
Today trying to tackle the thumbnail icons. I got it to work a bit, so I'm determined now. Seems to work sometimes but not others. Possibly something to do with how long it takes?... Doesn't work at all outside of Unity.
One of the big challenges today was figuring out what to do next. I made a list that should keep me occupied for a few days.
Wednesday 23rd:
Summary:
- Fixing bugs from last week's updates and more.
Hitting the list I made yesterday.
First thing was the building and item sprites. Had to use screen snipping tool to grab the pictures and then assign each of them individually. If someone knows a better way, please let me know. A very tedious task in all but it's so much nicer to play with these.
Sorted bug on deleting building with automations attached. Now the wire is disconnected, deleted and refunded properly.
Sorted Loading Automations properly.
Sorted out bugs in the Box and Vat. We now have the box-splitter-export box automation setup available in the game to deal with overflow.
Fixed missing category icons, using leftover unused ones for now.
Sorted repositioning Automation wires when moving buildings.
Spent quite a while trying to get automations to copy over with the copy pasting. In the end I shelved that idea because it's very very difficult.
Sorted weird rotation issue that was happening. We'll see if it happens again.
Sorted pressing T to cycle between Smart Splitters.
Fixed that pesky bug where walls could be built inside of walls sometimes. Was that e number stuff again interferring with my code to exclude perpendicular walls in the hitbox.
Tomorrow is all about playing and implementing new objects again. I definitely feel like I'm running on a treadmill. Automation is a big achievement to be honest.
Thursday 24th:
Playtesting and fixing. Fixed some bugs.
Added the Fridge and got it to work.
Added the Clothinator. I had already programmed this one but let's see how well it works in practice.
Thinking about streamlining production of things like clothes and drugs. Not just from the player's perspective, but as a programmer. Is it even a problem? Should full Automation be a challenge, or should it be easier?
The thing is, I'm not even sure if this is a bad thing. There are some fun solutions in game as well.
My brain is kind of breaking. I think the logistic puzzle is much more complicated in this than in other games, and I guess that's a good thing if true.
For now I'm going to leave it. Some solutions will come up organically and really it's going to come down a lot to player feedback which I don't have right now.
I had an idea for a supply box feature where Humans could carry from a single source to multiple objects without the need for conveyors. That's something better to consider after a few people have played the game.
Now I have a whole list of fixes and improvements before continuing my current run properly.
In regards to the spaghetti problem(?) above, I have an idea:
The idea is Precursor items. For example you would make your basic Drug Precursor. That would then be mixed with Organs to produce Drugs. You wouldn't set which Drug you want to make, it would be determined by the Organ you combined with the Precursor.
Same with Clothes. 'Basic Clothes' would be the precursor, made from Hair and Skin. Then, you would combine something with it to make the other Clothes.
This way the maximum amount of Fabricators you would need per industry is 2, one for the precursor and one for the final result. Because for the 2nd Fabricator, the Human will just make whatever they can with the ingredients delivered.
I'm really happy with this idea. I feel like this is a real breakthrough in the game design. It will make things much easier, and I can always ramp up the 'difficulty' later by having more advanced recipes and there is still the cooking.
There is so much left to do.
Friday 25th:
- Bug fixing and new build uploaded.
Finished off the list of small things from yesterday.
One bug that's left over is that it's possible to build multiple walls onto one space. I would need to break the brain bank to solve it so I'm shelving it now. It's not remotely game or immersion breaking.
Uploaded a very stable build that could be called the first Early Access build. I still have over a month until then, so there is plenty more to add.
Now for getting started on the Fabricator modifications.
Having a good think about how the recipes should be. The main question is if I should ever have items used in more than one recipe, that really changes things. In the end I decided it's probably ok.
Saturday 26th:
Programmed the new setup for Fabricators. Should work. There will probably be bugs but we'll see.
[ 2020-10-03 15:41:12 CET ] [ Original post ]
Week Summary:
Boss fight against Automation
Monday 14th:
Summary:
- Subcategorized transports.
- Automation.
Today's task is to re-organize the Transports UI so that only Pipe, Conveyor and Hookline appear as options. Then, clicking them will open another set of building buttons to do with that specific transport, which can also be accessed using 1-9 or 'F' and 'G' to cycle between them.
To fully achieve this, I will need to dig up and rethink the code of the UI. Again, I'm planning a proper UI update at some point so I will save this for then. For now, I have just split 'Transports' into 3 subcategories.
Now for Automation. I do have to spend a bit of time just sitting in silence thinking about it.
Got it all working in theory. I can connect them and they send green and red signals which effect the behaviour of the object. Now for the details.
Objects that can be Automated should have their own little Antenna. It should be possible to see all these connections with the Automation Tool selected. I also need to think about saving, loading, and how to avoid multiple connections being made. Also deleting connections.
This is one of those tasks which seems to be much more thinking than comitting new lines of code. I'm working slowly which doesn't feel great but I think it is quite a big mental load.
Tuesday 15th:
Summary:
- Automation.
Sorted out saving and loading and making sure the lines are rendered properly. So far so good.
The remaining challenges are thinking about how and when to highlight and also handling the deletion and replacing of automation wires.
Finished the deleting and replacing. Now for the highlighting, which is a bit of a puzzle.
Rounded off the day by doing some writing for another very small project I have.
Wednesday 16th:
Summary:
- Automation.
My code for highlighting is a bit messy. Right now it works pretty well though so I'm not going to change it.
So far so good, actually got it mostly working really quickly. Only highlighting the line on 'takessignal' objects is working a bit sporadically. The problem is the highlight is switched off if not in 'Automation' mode, and only sometimes is that overwritten by the script of the building I'm mousing over.
I think the easiest way to deal with this is actually to make and use the 'Wire' object on the 'Takes Signal' objects as well, and highlight them first. Unless I can think of something a bit more clever.
Turns out I was able to do something a bit more clever. I guess my highlighting code isn't so bad after all.
I don't know what Application.Tick is but Unity keeps crashing. Updating to the latest version.
Fixed a little bug with saving camera positions.
Now automation works smoothly. Next is to add all the items like Not/And/Or gates. I just realized this may be tricky with my current code.
Next up is Hooklines and then I'm ready to go back into the game looking for more problems or adding more content.
Rounded off the day with some drawing for the side project titled 'The Game with the Fly'.
Thursday 17th:
Summary:
- Automation from the beginning again.
Today's task is Not/And/Or/Splitter gates.
Introducing these objects is a little more difficult than it seems. I may have to rethink the way wires are connected.
Option A: Find a way to make it work with the current code.
Option B: UNDO ALL WORK DONE THIS WEEK and do it again better so that it supports multiple connections.
The new version would have Automation Wires as their own objects connecting to points in building's heirarchy. Very similar to Transports.
Option A is preferable right now, and I can work on Option B at a later time with a clearer mind. So I'm trying to see if I can find a way to make it work with the current setup.
This is very demoralizing but I guess it's a valuable lesson.
... Yep, I have to go with Option B. Option A is considerable work so I might as well do it right. Dam it, that means this whole week's work is lost (or has to be put down as 'theory'). In this case the first thing to do is pretty much delete all the work I've done this week.
The new system has 3 new scripts/components.
1. Automation Connector. This simply stores Type (In/Out), which wire is connected (if not null) and carries a signal (true or false).
2. Automation Wire. This simply carries the signal between Automation Connectors. (Automatee.Signal = Automator.Signal).
- The code informing whether we give or a true or false signal, and what is done with that signal, is stored in the relevant scripts like Container, Processor and Transport.
3. Automation Gate. This translates and outputs multiple signals based on its Type (string). This could easily go on the Building script, but is here for tidiness.
Now that that's programmed, time to set up all the stuff I need in the Editor. I need to make 'Connector Points', assign them 'In or Out', position them and connect them to the components. I also need to make the new prefabs for the Gates.
Another change is that I'm making a specific Box and Vat for Automation instead of using existing objects for that, so I made those.
Also the Automation Wire objects.
Made the Gates.
Next up is sorting the controls again and also rendering. I'll do those two tomorrow.
I'm very keen to get automation finished by the end of this week.
More writing for 'The Game With The Fly'. It's annoying when you're inspired to be creative but your current tasks are all non-creative. I wish I could spend more time planning, writing and directing than doing all the detailed work.
Friday 18th:
Summary:
- Automation.
Haven't been writing too much in here today. Essentially I'd just be repeating the rest of the week's devlog.
Got the controls back up to speed for attaching the wires.
Got the wires rendering properly and at the right times.
Only thing left now is saving, which is proving to be a little complicated. They need to remember the specific point they were connected to, not just the Building. There's 2 possible solutions: 1: Use an ID for AutomationConnectors. 2: Match by position. Going with option 1.
I'll try to do that over the weekend.
[ 2020-09-19 19:11:49 CET ] [ Original post ]
Monday 7th: Bank holiday. Tuesday 8th: Summary: - Side project and recovery from playing Pathologic 2. Played Pathologic 2 over the weekend. What an amazing game. Achieved closure on this game at about 8am on Monday night, so I was pretty wrecked for Tuesday. I'm really inspired for 'Project W' at the moment, so I spent what energy I had yesterday on doing a bit of work and writing for that. Seriously impressed by the writing here. I guess what makes it amazing is the literature it draws from and the fact that this world and characters have been alive since the first game. Could say a lot more but I'll get back to work. Wednesday 9th: Summary: - Minor bug fixes. - Finishing touches to Wall Builder. This week I want to achieve 3 things. 1. Hook Lines. 2. Automation. 3. New Transport Building UI. But first, I should play and fix this build and refamiliarize myself with it. Playtested and fixed and made myself a nice little list. Having a lot of trouble fixing a bug where the Wall Transport Frame doesn't appear, but only for the Solid Outpoint of the Printer. No idea why. So far I've spent about an hour just trying to figure out why. Fixed that issue. Was a problem with any object with more than one outpoint. Fixed the Animation for the Pipe and Pipe Turn (after changing the pivots). Also made a note to do the work of animating the mergers and splitters as well. Fixed a minor bug with Quest Alerts for the Clients. Made it possible to flip more buildings. I don't want the player to have to worry too much about criss-crossing transport lines too much. I still get the 'negative scale box collider' warning but it causes no problems. I wish I could turn that warning off or at least know why I should heed it. Thursday 10th: Summary: - Fixing bugs and making my base. - Smoothing out code. Having a good think about how complicated the Fabricators are. With 2 Inputs and 1 Output, having several machines gets messy really quickly. At worst, it's the same problem Satisfactory has but with much less space. I think the best way for me to mitigate this would be with teleporters which will cost extra power to use. I thought about having Human haulers to maybe make things easier and maybe making the precursor to clothing and drugs in a separate machine that does not require a Human to operate. For now I'm just going to leave it. In my own base, I'm trying a different strategy. Instead of having different sectors for each type of Human, having them all live together and clothing them appropriately on their way in. Still getting a few bugs here and there with the controller. I've levelled up tons since I started this project. Right now the Controller code is getting caught in that loop where fixing one thing breaks another. So I'm combing through and fixing this code. As much as I'd love to work on new content, I think I should do this first. The first thing is making a function for 'Equip Tool'. This means I can delete a lot of lines for resetting the old tool and equipping(sometimes instantiating) a new one. Instead I can just write 'Controller.EquipTool(GameObject TargetTool)'. There is still more I could do to make the Controller script a bit cleaner, but this should be enough for now. No need to fix what isn't broken at this stage. Running into quite a few issues with the Pipe Builder. After a lot of stress and trial and error I figured it out though. Thinking back to the complicated fabricators issue. The problem is in the way I've done the Splitters. My Splitters so far can only go right and left, but not forward. So I need to rethink this. Should I make it possible to have a 3-way splitter? Should I make it possible to have a 2 in-2 out splitter? Shall I go back to the old 'Smart Junction' which was fully customizable? Conclusion: I'm just going to go with a simple splitter that sends items forward except for the filtered item which can go to the side. This also makes it simpler to manage that interface. - Deal with Pipe Clone issue. - Make and upload build. Friday 11th: Summary: - Sorted the new Y shaped smart splitters. Looks like I'm not going to hit my goal this week. I feel like the time has been productive, working on things that are best considered sooner rather than later, but I definitely prefer ending the week with a bit more content to show for it. So today the task is to change the Smart Splitters into 'Y's instead of 'T's. This turned out to be pretty damn easy. I worked carefully and slowly, but it was really simple because of the way I programmed it. With this new setup, the UI could be a lot simpler. However for now I'm going to keep it how it is and put a pin on it for a big UI update. For now I'm keen to get this build out. Spending my remaining energy doing some groundwork for the Hooklines. I will probably do some 'Project W' work over the weekend.
[ 2020-09-19 15:40:18 CET ] [ Original post ]
Monday 31st:
- Bug fixes.
- Planning.
Had nothing to play this weekend so I did some work on top secret 'Project W'.
So I press play and the transports no longer link.
After a lot of investigation I realized it's because with the distance checker added, any that don't fall within the distance check are reset. Fixed it by repeating the range check on the reset code.
Planned the rest of the week.
Tuesday 1st:
Summary:
- Fixed long loading time by limiting number of save files.
I discovered that the long load time in the Unity Editor was likely to do with the amount and complexity of save files. Any instance of 'saveload.load' takes too long.
There are 2 solutions. 1 is to reduce the number of save files the player can have. This is obviously flawed but is probably my best solution for now. 2 is to restructure the loading so that we load 'profiles' and then load into each of those 'profiles' (and limit the number of saves per profile).
For now I'm just going with option 1. It's possible that I could also limit the number of profiles as I've seen in plenty of games. For now I think this one can wait until a proper UI update. Players simply need to avoid using 'save as' too often or making too many profiles.
Unfortunately lost my save file in the process.
The next thing on my list is to sort it so the player can use shift clicking to grow or shrink their selection, and also to add some functionality to exclude floors from a selection. I feel like this would be quite useful, but not especially, and I am really not in the mood right now. Going to shuffle it to the later list.
Fixed a bug with the Transport Frames on the doors.
Next up is a proper playthrough and fix as I rebuild my save file.
Wednesday 2nd:
Summary:
- Playtesting and fixing.
Had a good playtest and fixed a bunch of things as I went. Also made a list of fixes to get on with tomorrow.
The main problems I'm encountering are to do with the Walls and building Conveyors from Conveyor Turns or Ramps. Also still having some issues with the Pipe offset. As far as gameplay goes, I think now is the time to introduce the Hook Lines and the Camera, two pretty hardcore objects.
- First I have a list of small bugs and fixes to do.
- Make the necessary simple adjustments to make the Conveyor Builder work better.
- Going to redo the Wall Builder code from scratch.
- Going to bite the bullet and standardize the pivots of the Pipe objects. May McCthulu have mercy on my soul.
- Test and fix current setup in game.
- Introduce Hook Lines.
- Introduce the Camera and Automation.
So today was a fairly productive day. Finishing a little bit early because I want to tackle this with a fresh mind. Going to work on some other projects to round off the day.
A standard early setup.
Thursday 3rd:
Summary:
- A bunch of small fixes.
- Standardized pivot of Pipes and overall fixes to transport building.
Went through my list of smaller tasks. Further cleaned up the saving thing with Quicksaves, Autosaves and Manual Saves working as most players expect them to.
Next up is to standardize the pivot points of the Pipes, rather than having all that spaghetti code to offset positions when selecting multiple objects. First thing is the tedious task of actually changing this in each object.
Now for the hard part. Testing and programming the way pipes are built removing/adding offsets where necessary.
The most difficult thing was to make this work with rotations. I created a different offset for each (0, 90, 180, 270) and made sure to reset the z rotation of the Outpoint of each transport when building and on load.
There may be some problems down the line with this but we'll see. For now the Pipes are back to full functionality as far as I can see.
Fixed the buggy offset of the Conveyor Builder.
This leaves me with a clear path to redo the Wall Builder. Going to tackle it from scratch. However it's 3pm and that's a bit too much for this poor old brain of mine so I'm once again going to round off the day with some secret side project before plunging into some Pathologic 2.
Friday 4th:
Summary:
- Big improvement and fixes to the Wall Builder.
Fixed the Wall Builder. This was a big one. Managed to do it in a way that doesn't throw up the 'Box Collider negative scale' warning by adjusting the Rotation. There's quite a few things to consider here, such as making it so walls can intersect with other walls.
[ 2020-09-13 20:55:40 CET ] [ Original post ]
Monday 24th: Summary: - Click-drag Pipe Building. With this heatwave I am only planning to do a little bit each day this week. Started by looking at click-drag building Pipes, Conveyors and Walls. With the floor it was relatively easy because the canvas selector fits the shape of the floor (a flat plane). For Pipes, we ought to see a projection of all the Pipes more like with the Copy Tool. This makes me think I should change the way I do the floor as well, and use a similar object to the 'Copy Tool'. Rather than instantiating a bunch of objects, it might be a lot easier to have a stretchable object and then it can operate in much the same way as the Floor building. Got it working in theory. There are lots of issues but I just need to go in and fix it all. Working incredibly slowly this week. It's way too hot here in Tenerife so I ought to take a break, so I'm going to try and just do one thing each day. Tuesday 25th: - Click-drag Pipe Building. Bug fixing the Pipe work I did yesterday. Unity is taking an awful long time to enter Play Mode. As I write it's been doing it for over 5 minutes. Going to update Unity and if that doesn't work I'll look into ways to fix it. Having real trouble just now on the final step. The problem I'm having now is that 0 seems to be read sometimes not as 0 but as some random set of numbers with an e and a - in there. In the end I stopped asking 'if == 0' and instead ask 'if != 90 and != 270' and so on. Seems a bit unprofessional but it gets the job done. Wednesday 26th: Summary: - Finished Click-drag Pipe Building. - Click-drag Conveyor Building. Absolutely melting in this heat. Helped Maly with some heavy lifting at her job. Did the finishing touches with the Pipe Building. Copypasted a lot of the code and edited it to get Conveyors working the same way. There may still be a few bugs, including the way it works when you try to do it on a conveyor turn. Thursday 27th: Summary: - Click-drag Wall Building. Fixed a bug where occasionally the rotation variable gives me numbers slightly off. For example 90 would be 90.000001. I don't know why this is happening but I used mathf.round to overcome it. For the first time since buying it my computer is actually overheating to the point that it's working slow. We're risking Greta and the electricity bill's wrath to switch on the air conditioner. Wall Builder is complete. Friday 28th: The heatwave persists, nearly 40 degrees outside apparently. I'm happy to have managed 5-6 hour days this week but I really hope next week is more productive. Perhaps one day we will be able to afford a proper air conditioning setup.
[ 2020-09-01 16:24:22 CET ] [ Original post ]
Monday 17th: - Bug fixing. Testing and fixing as I build the new buildings into my base. First, discovering the issue with Clothing. For some reason, when I instantiate a TargetObject, not all of the parts of the Item component are transferred to the clone, namely the Clothes. I'd like to find a cleaner way to fix this, but for now I can just re-write any parts that aren't transferred. I think I fixed an issue where Items were appearing on load at the Fabricator's input. The problem which was effecting both things was that I didn't handle the Item Sources properly on Manual Fabricators. As a bonus, this fix has provided some optimization for the Human's side of checking if the machine has all the necessary ingredients to craft. Very rough and frustrating bug fixing session to get all of this working. Barely even managed to begin testing and fixing the new Buildings. But now the Human's clothes reflect the materials they're made from as intended. Experimented to increase mating by changing the minimum rapport from '10' to 'Quality / 2' and removing the bed requirement. It didn't work and it's because it's actually quite rare to find a match. I wonder if this is good this way, requiring the player to put a bit of thought into making the humans mate, or if it should happen more often naturally. I don't this is going to be an ongoing project. Getting a bit crazy thinking about all the possibilities. Tuesday 18th: Summary: - Forest and Drug Labs functional. - Updated the base in game to test all new features. Got the Forest working. Had to fix quite a few things. Applying the correct Container settings and fixing the way the Manual Fabricator does Clear Occupation. Built quite a big base using all the features. Not tested them all yet but the framework is there. Made myself a nice list of bug fixes and things to do next. The biggest roadblocks at the moment are: 1. Need a way to build pipes, conveyors and walls in a straight line by clicking and dragging. 2. In a big base, building something new causes the game to freeze for a bit as it reconnects all the transports and things. Need to optimize that. The game is pretty complex at this point. Getting all the necessary goods into the Drug Lab or Tailoring and out to the destination can get pretty crazy pretty quickly. This is partly the nature of Factory games. Essentially it's a bit like Autonauts in that there is a lot you CAN do and if you do it all it's a bit hardcore, but you don't need to. Build and test drug lab and vents. Wednesday 19th: Summary: - Lots of little bugs and fixes. As much as I was enjoying playing the game and sort of building the content as I go, it's already time to go back into the guts of the game. As stated yesterday, I have some optimizations to do and things to fix. I have a list with about 20 items big and small from this week's testing. Fixed bug on MaxProgress on Blood Drainer. Fixed bug on using the button to exit the Pause Panel. Fixed hair positions being slightly off 0 on instantiation. Added Build animation for Forest. Fixed bug when connecting container directly to another container. Fixed issue where multiple Delete tools would appear. Fixed bug where, if the first selected object is above the ground, the movement and copying is offset... In the case of Pipes, it is still offset by 0.5. Pipes currently exist on a separate axis to other objects, and I'm wondering if that's wise. If I change that, it will be a TON of work. Maybe for now it's best to fix the offset if the first object selected is tagged as 'Pipe'. After some experimentation, I think the best way to solve this will in fact be to change the root position of each pipe piece so it's more like the other objects. Until then, players can avoid this bug by not selecting the pipe first. At least the height thing is fixed. Stopped the player from doing certain things while Building (floors, pasting) is true. Added recipes to drug item descriptions. Sorted the Animator graph a bit to deal with some issues arising from culling. Got all the small things off the list. Now I have a list of big complicated things. This devlog isn't for complaining but damn it's hard to think in this heat. Tomorrow I will start fresh with the Connecting Transports code. Saturday 22nd: - Fixed/optimized the freeze when building in big base. Maly has had the week off and I'm a bit ahead of schedule so I took a couple days off. Taking it easy today as well. I have the stream in a couple of hours at 3pm and now I'm just trying to solve this puzzle of optimizing the 'ConnectTransports' script. Right now I'm doing something like this: Foreach Inpoint, Foreach Outpoint, if they are close then connect them. This is starting to overload the system because as I build more transports, it gets more and more crazy. Possible solutions: 1. Optimize the 'ConnectTransport' code using better practices. 2. Restructure the code so that the 'Connect' script is contained within the transport itself. Option 2 seems best, and I can use better practices as I go. I found a way to make it easier on the Transports, but it seems that's not the issue [the plot thickens]. The issue actually lies in the code I have on the WallHider for 'UpdateTransportFrames' to show the transport frames when a transport is going through them. I think I should move this into the 'Connect' function on the Transport. Seems my original ideas about what was slowing it down are wrong. I could easily have missed this, so I feel quite clever right now. What's slowing it down isn't the 'foreach(foreach)' thing, it seems the game can do 'getcomponent' 5000 - 200000 times without too much fuss. What is slowing me down is when I ask the components to perform a function. This could be that when you ask a function to happen, the 'foreach' script is asking the next one to do that function before the first one has finished, overloading the system. It could also be just that Unity doesn't like calling functions from different objects at the same time. So ironically my first idea for the fix, of having it 'transport' centred rather than 'foreach(foreach)', was incorrect. What was slowing me down were the instances where I essentially ask for many functions to happen at the same time. So the first thing is to undo the work I've done so far today (good old CTRL-Z). Managed to nearly completely kill the freeze when building. Now just trying to reduce it as much as possible with clean code. Killed the freeze entirely. Added a range check to the ConnectTransports script so that it will be nice and smooth no matter how big the player's base is.
[ 2020-08-26 15:59:50 CET ] [ Original post ]
Monday 10th:
Summary:
- Blacksmith bug fixes.
- Final bits from Maya before the licence expires.
- Foraging implemented (untested)
Started today by fixing some Blacksmith bugs with a save file someone sent me.
Added the Tailoring suit and Sexy suit. These had to be put together in Maya so it's a good thing I still have one day of that.
Made the Cloner (basically just 2 Incubators sellotaped together) and Battery in Maya.
Exported some more clothes, making sure I have all the combinations of Shirt pieces that I need working in Maya. I will need to improve some of the code here.
Started writing the new items into the Object Menu. Basically filling in forms.
Didn't have the most productive day, 5pm rolled around in no time. I think I'm spending a lot of energy thinking about how to optimize/tidy and finding some good solutions. Could I streamline the import process before going ahead with everything?
Slowly and carefully modifying the code for the 'Fabricator' so that it works for multiple buildings. I set the 'Target Object' in the Editor or the Awake method, and if it's a Fabricator it will basically work right out of the box.
Same for the Human code. Instead of asking 'Am I Tailoring/Foraging/Making Drugs' we ask 'Am I using a Fabricator', if so then proceed with progress. So I can set all the Fabricator's 'Activity' string to 'Fabricating'.
I could apply this retroactively too, for example the Food Processor and Toilet could follow the same rules.
Added and programmed new items and buildings to do with Foraging. It should just work out of the box but we will see.
Tuesday 11th:
- Importing drug lab stuff (untested).
- Lots of improvement and tidying to Clothing. Colours now reflect crafting materials.
Importing all the parts for the Drug Lab cycle. Drug Lab, Injector, Gas Vent, Lab Clothes and Drugs.
Importing all the new stuff and getting it to work is easy. What's taking time this week is trying to improve workflow.
Going to change the way Clothes work. At the moment the Human's clothes reference an item in the object menu, but I'm going to put it on the Item component so that each can be different and I can have more functionality like Colour (so that some clothes can be effected by the colour of hair or skin used).
The colour of clothing is now effected by the material used to make it, and the Quality by the Dexterity and Intelligence of its maker.
Sorted out exactly the way clothing effects stats and actions. Also shows up in the Inspect panel.
A fair bit of work to get this new clothes system to save right.
In theory this should all work. I will undoubtedly run into bugs but it's progress either way.
Some adjustments needed to the Human code to handle the way they interpret clothes.
Also adding the colour change here. Having a think about how best to direct the material to the correct part of the shirt. I think it's going to be different for each piece of clothing so I will write code for each instance. If I find myself copying and pasting too much I will try to find a cleaner way. My Maya license just ran out which is annoying because I ought to clean up the names of the objects a bit (buttons are still named 'Cylinder1' etc.). I will renew at some point before November, but for now I think I can just reference the objects as they're named.
I just put another mountain of work in front of myself. When colouring clothes, the cloth should be lighter and desaturated than the original hair colour and the leather should be much darker than the original skin colour. I already have some framework for this with the 'Faded Material' attached to each 'Colour'. A Colour (purposely spelled with a U) is a Name, Material and Faded Material. Now I can also attach a 'Fabric Material'.
This means I have to go back and fix the colouring code a bit since it needs to be clear that the Shoes inherit the Skin Colour and the Shirt inherits the Hair Colour.
Wednesday 12th:
Summary:
- Programming application and effects of Drugs. (Untested)
- Rounding off some other tasks.
There's a lot of stuff that's going to need connecting in the editor and materials that need making, but for now I'm going to keep my head in the code.
First task today is to add more Buildings, Items and Clothes to the Object Menu. This is continuing from yesterday where I set up the Drug based objects in the Editor. That puts all new drugs in the game.
Programming the Injector. Mostly copied code from the Feeder, but I need to apply a Drug effect (I should also consider what should happen if the Human eats the Drug: probably halves the effect). I think it would be fun if you could attempt to Inject the Human with anything. Had a think about what would happen to a Human if you injected it with Poo, Blood or White Mess. In all cases, I think it would kill or lower the health of the Human whilst also lowering their quality and perhaps turning their Organs into Poo.
Programming Drugs. The application of a Drug tells the Human its Name, Quality and Duration. Then the Human will check the name of the drug it is given and apply its effect until the duration is over. The impact of the drug will effect a lot of Human decisions so I may need to clean that code up a bit.
The application and effect of drugs should now work.
Theorizing:
Besides the Injector and Feeder, the other way to apply drugs will be with Gas Vents. This requires a bit of thought. How will I define the Gas Vent's area of effect? With a Hitbox? A raycast? Pathfinding? Counting floor tiles before hitting a wall? Releasing little gas clouds which bounce off walls?
Going with the Pathfinding method. How long will it take to calculate the path to all floor meshes in range? This only needs to happen when the Gas Vent or surrounding geometry changes, but the main draw back is that I'm not sure if it's expensive processing-wise.
Then when the Gas Vent does its thing, each Gas Vent would have a list of Floor Tiles. Then I can say 'foreach Human in range, if they are on/close to one of these floor tiles, they get the gas'. Should work.
This is a bit much for my brain to do today so I will do it tomorrow. I wrote out how I'm going to do it in my todo list. I'll paste it here in case anyone wants to read it:
Program Gas Vent:
- Gas Vent is a new component specific to this building.
- The Gas Vent has a list of Floor Tiles.
- The Floor Tiles are listed by a Function (GetRange) on the Gas Vent script which is activated any time a new building is built in range.
- The GetRange Function calculates a path to all floor tiles in range. If we can reach it in under a certain amount of steps, add it to the Floor Tiles List.
- The Processor script of the Gas Vent will trigger the Gas Vent script to 'Vent(Drug)'.
- Vent gets a list of all Humans in Range who are also in close range (ignoring Ypos) of one of our Floor Tiles. It then Applies Drug.
So tomorrow I will do that, connect everything in Unity and start testing and fixing it.
Trimmed the size of the Item colliders to better match the meshes.
Made it so any Item coming out of a Fabricator will have its Quality effected appropriately.
Finished working on programming the Colour for each specific clothing.
Created outcomes for being rejected from mating, either because the target is not in the mood or the feeling isn't mutual, and harsher lines if she really doesn't like him.
Thursday 13th:
Day off. Trying to sort our wedding and other bits. Busy week on the whole.
Friday 14th:
- Gas Vent.
- Live stream.
Programmed the Gas Vent. Because I had planned it properly, it took no time at all.
Made the new 'Fabric' version of each applicable material.
Fixed everything in the Editor.
The next step is to press play and see just how many things are completely broken with all these new changes.
Set up the stream. Streamed to a few people as I did the playtesting and fixing. Some problems with clothes mainly.
Next week is all about testing and fixing the work done this week.
[ 2020-08-18 11:33:25 CET ] [ Original post ]
Hello Humans, This week was all about fixing and cleaning. Next week is all about adding new content. If you want to play and test the current build of Human Factory, please let us know here or contact us at firecyclegames@gmail.com. Early Access Release Date Confirmed November 2nd 2020. I hope everyone has a great weekend and I look forward to updating you all with more progress as I go back to adding new features. Monday 3rd: Summary: - Restructured the saving system. - Reprogrammed the Main Menu. Did some more fixing and cleaning to the copy pasting feature. There was a lot of weirdness to it, it was quite tricky. Making the plan for this week. Tomorrow I want to give my full attention to the saving and loading system and make sure it's completely tight, as well as the Main Menu code overhaul. Spent some time messing around in the save systems of other games to see what I can learn. Usually when I play a game I just make one save file and rarely if ever use an old save (unless I'm save scumming). Figured out my plan for how I'm going to do this. The old system is functional but I want to do a bit of spring cleaning. Shouldn't be too difficult actually, I will start today. Changed around the code for the save system. Before, all saves were in the same list with a variable called 'profile'. Now, more intuitively, we store a list of 'Profiles' which just have a name and a list of saves. As far as I can guess, it should work with minimal problems. Before I can test it, I need to program the UI. Now for the Main Menu. Started by deleting everything in the script. Wrote all the code to make this work and with the new system. Also jumped into the SaveAs function to make that better. It should, in theory, work really smoothly. I will test it tomorrow. Tuesday 4th: Summary: - Cleaning and fixing. - Started playtesting and fixing. Added a variable to the saves called 'Version' so I can future proof people's save files between updates. Made a little error text panel for the main menu for 'This name is taken' and 'No file selected'. I was going to add a feature to edit the name of save files or profiles from the main menu, but I think I had better do that on the next iteration of UI improvements to save time. Standardized the code for the Pause Panel. I could keep going like this and do the same for the pause panel but I think I will save that for the big UI overhaul that I know is coming. Had to fix a few things to get things working. Can save and load nicely. Issues were to do with some of the variables that have been shuffled around, like Music/SFX volume, Names and the 'New' bool. After organizing Items a bit, the 'Sort' function is throwing up an error. Maybe there are two Items in the list clashing? Sorted it using luddite technology by manually ordering the items. 'Icomparables' is black magic to me. Playtesting and fixing. Finding some bugs. Some fixes easier than others. Made a nice chunky list to start with tomorrow. Wednesday 5th: Summary: - More cleaning and fixing. - Playtested until current endgame. Fixed all the little things from the list I made yesterday. Not going to list the boring ones. Trying to fix/get rid of the warning for the negative scale on the box collider. Failed again. I could do that math.abs for scale and rotate the canvas instead of scaling it negatively, but to be honest that's a lot of work for something that isn't effecting anything right now. Added an option to see all the games Controls. Pasting Buildings no longer pastes their contents. This includes anything that might be going on with the Building that shouldn't be copied. There's quite a lot of things to reset/switch off here, hopefully I got all of them otherwise they might be quite hard to spot later. Found a problem with my new Transport code. Items are getting pushed into Mergers at the same time now, leaving one stuck on the cargo indefinitely. It's actually quite a simple solution: the cargo is being given the green light to move, and then it keeps going and tries to enter the next transport. I just have to check again when they reach the transport to see if it's still empty, and if not then simply wait for the counter to count down again. Found some bugs with the delete tool. Fixed a bunch but one happened which I can't seem to replicate so I'll leave it for now. Reversing the scale of Conveyor Buildings worked fine. (still get the warning though) That's everything on the list from yesterday and then some. I ought to reprogram the Options Menu for standardization and of course there is the sound effects. I'll do those tomorrow. Spent quite a while fixing some major bugs with Humans in the Item Splitter. Added a much nicer texture to the ground. Added a skybox and changed the environment lighting a bit. Looks cool all together. Got the whole build working. Very pleased. Thursday 6th: Summary: - Thorough testing and fixing. Started by fixing a few left over things from yesterday. This includes going through all 'Build' animations and making sure Looping is disabled. Clothing shape is now effected in the same way as the chest. Instead of reprogramming the Options menu, I did a quick fix for now. I think I will save that kind of thing for the big UI update coming soon. Some stress testing for the copy paste tool. I need to optimize the script for highlighting the buildings. Made a high end base with a separate section for the Tailors. This was made much easier with the new canvasing tools. Made a build and tried it out and it runs really nicely compared to the old build. I feel like I could do Early Access now. Going to do a bit more between now and then. Saved a ridiculous amount of frames by ditching the little lights since they weren't doing much anyway. Attached the directional light to the camera to keep it even. Planned the next steps, keeping in mind marketing and early access. Friday 7th: Summary: - Final fixes, uploading build and planning. Fixed a few minor bugs left over from yesterday. Right now the game is quite playable. Depending on how fast the player is and how much time they spend planning, I would say about 1-2 hours before they finish the content and will want something more. Game is running at >100 fps! Deleting a large amount of objects seems to make unity very busy. Fixed. Made and uploaded the builds for each platform. Marked as ready for review. There is more optimization and tidying that could be done, but the game is running pretty well now. What I do next is entirely up to me and what the game needs. I want to get to the Mating stage of the game. For that, the best way at this stage is to make Love Drug and put it in the vents. In order to make Love Drug, I need the Drug Lab and 'Organic Matter' from the 'Forest Node'. So here is what my plan looks like: - Fill in missing items like Cloner, Battery and Tailoring suit. (and Voices!) - Sort Automation. - Sort the Forest and Foraging. - Sort the Drug Lab, Drugs and drug Injecting/Venting. - Thoroughly test and improve Mating. And I think that would be a good place to stop again and review the plan, and update the build, store page and trailer. Each item on this list should take 1-3 days to fully implement. I have it down as 5 items, 5 days in my todo list for next week, but we'll see how long things actually take. Once these are complete, the framework for a lot of future items will already be there which will be nice.
[ 2020-08-09 21:21:33 CET ] [ Original post ]
Greetings, fellow Humans.
Human Factory is coming along nicely. From today, I'll be posting a weekly devlog to let you know how the game is progressing.
But first, let's summarize the story so far.
Q1 2019: Work begins on game project number 2.
Q2 2019: Project number 2 is abandoned in favour of Human Factory.
May 2019:
Began devlog.
Lots of essential planning.
Achieved fully playable presentable basic concept.
Basic Features:
- Humans with functional zombie AI.
- Pipes and Containers.
- Grinders, Analyzers, Toilets, Beds, Feeding Troughs.
June 2019:
More workflow improvements and fixes.
Achieved presentable and much improved programming and a few assets. Achieved better pathing AI for Humans.
Added features:
- Conveyor Belts.
- Trade and Export Boxes.
- Stackable Items.
- Atomizer, Fuel Burner.
July 2019:
Close to finalizing workflow and control improvements.
Major workflow improvements include the Processor component and Item IDs.
Added Features:
- Wires, Batteries and power distribution.
- Pipe and Conveyor Splitters and Mergers.
- Food Processor, Chopper.
- Blood, Skin, Hair, Arms, Heads etc added as placeholders.
We officially present the game to the public at Tenerife Lan Party (TLP) 2019, receiving an award for "Most Promising Indie Studio".
August 2019:
Vastly improved game feel and quality of life with Tooltips, Tutorials, Dialogue, highlighting objects, Encyclopedia etc. Got Human pathing AI up to my satisfaction.
Added features:
Incubator.
We are [were] close to having a demo that I'll be very proud to show everyone.
September 2019:
Lots of cleaning, testing and fixing to get the first demo build out and the store page.
October 2019:
Big changes to Human Factory plans. Even though it would take much longer, I decided to make all the assets myself.
More testing and fixing and measuring the current build. Took a little break.
November 2019:
Remade all the existing art/3d assets myself and some new ones.
Lots of small new features like toilet doors opening and closing, more information on the objects like Progress Bars and Container displays and pictures for the NPC dialogues.
Started modelling new assets in 3d including hair cuts, female parts and clothes.
Now that we're back up to speed, we can start adding new features and content.
December 2019:
Females, random Human generation with different hair styles, skin colours etc. Basic code for genetics. Lights on Buildings, experimentation with rendering and lighting. More testing, fixing and minor changes.
January 2020:
A bunch of new Buildings including more butchery machines and processors like the Blood Drainer. Splitter and merger transports, including smart splitters and filters. Also including the Wall Flipper which changes everything.
UI redesign and implementation.
Sorted and consolidated build with yet more testing and fixing.
A couple nervous breakdowns over bugs, nothing major.
February 2020:
Messed around with baked lighting.
A couple nervous breakdowns over bugs, nothing major.
More on the mountain of stuff like sorting the pause menu, sorting out multiple Containers on one building, vaguely prepping the game for and testing different languages.
March 2020:
Some optimization [or so I thought].
Human mating, pregnancy and giving birth, including the code to inherit stats and cosmetics from parents. Started having fun making the game again.
Lots of modifications to Human's 'Mood', like beauty of buildings, food and of course mating.
Human Chatting and its effects.
Added lots more small features and improvements to Human AI, including a 'Mad' mode where they won't work, will abuse everyone and will throw their poo.
Did a closed Beta testing in a local event and managed to traumatize an 11 yo for life, with their parents authorization, of course.
April 2020:
Made a big update for my other game Blacksmith.
May 2020:
Back to Maya. Made a whole bunch of new 3d assets for future needs. Added bones to feet.
Made the Tentacle in Maya.
Modelled, programmed and animated a whole bunch of new Items and Buildings. A lot of buildings are similar to others so the more I make, the easier it gets.
June 2020:
Back to testing and fixing all the new stuff. Cancelled incest.
Lots of new buildings tested and implemented properly, including the Manual Tailor which needs to be operated by Humans.
Added the Human Filter and updated the Wall Flipper.
Overhauled the quest system. Made a lot of tweaks.
July 2020:
Replaced all the placeholder sound effects, recording our own. Added more bones to and reanimated the tentacle.
Made the Organs and some left over bits and changes I needed in Maya.
Got everything so far working pretty well and recorded and uploaded a trailer and updated the Steam store page.
Modelled and exported ALL the assets I think I will need from Maya for a potential Early Access build. All the remaining buildings, a few more haircuts and clothes.
And here is the Devlog for this week:
Monday 27th July:
Installing the newest version of Unity broke absolutely everything. Getting compiler errors even though the script debugs fine. Tried going back to the old version and didn't work either. Eventually managed to fix it.
Animated the Abortinator.
Sorting out the Animations of each Building. I've changed the heirarchy around a bit (for what I hope is the last time) and a lot of rewriting the directories for each animation. This is especially tedious in the case of all 21 robot arm joints (position and rotation). (... not so tedious if I change the name of the object instead of all the animations. I do like to standardize, but for now I can just do this).
Fixing more little animation bugs as a result of the new system. All Buildings with Transports attached need some attention.
Reanimated a bunch of build animations to try and keep them standardized.
Sorted out all existing objects at Unity's end. Everything needed in the future is exported from Maya's end.
Changed Count Hagendaz' name to Ivan (Interdimentional Vampyre Association). Did this by finding and replacing all but I will also change the names of files as I see them.
That completes everything I needed to do in Maya and making sure it will all work at Unity's end. It's 14:45.
Instead of planning to optimize the Transports tomorrow, I just ended up doing it. Instead of asking every frame if we can move the cargo, we ask that once per second. If the answer is Yes, we enable the 'Moving' bool which is asked every frame to move the cargo. I'm curious to see how this will work... In fact, I just realized I probably don't even need to wait 1 second for each check, since it's probably enough to say 'don't check if you are already moving'. On that thought, I lowered the timer to 0.1 second and we'll see how that runs.
Added some code to try out reversing the X scale of certain buildings. This is so the player can decide which side of the conveyor line the base of their object will sit on. Hopefully it's as simple as that, but we'll see.
Sorted out the conveyor Splitters with the new system (forgot to do them earlier). Lots of fiddly boring work today but satisfying to have it complete.
As well as testing and fixing optimization which I started today, here is what's left on the list before I start adding new content:
- Voices.
- Canvas build floor.
- Canvas selection and manipulation.
- Reprogram Main Menu completely.
I think Tuesday (tomorrow) I can get all voices done and put into the game. Then we'll see how I get on with all the canvas stuff. If I can get all that done this week I would call that a good week. I have a doctor's appointment tomorrow and I don't know how long that will take. 4 things, 1 for each day. We'll see how it goes.
After this week, the plan is to playtest and fix and see again where we are. Then I can start adding new stuff.
Tuesday 28th July:
Decided to get the game running again before making any more changes.
The new Unity version seems to have the game running much better from the Game window. Seems to run as well as it did from the Build exe.
Happy to see the Transports are working on a small scale. Just loaded the scene with transports and it's still running smooth. I'm going to go ahead and say the build is functional and get back to my to-do list. If there are bugs or performance issues I will catch them in due time.
Shuffling the audio stuff down the list as I always do.
Figured out canvas making. Had to try out a few formulas to get the right one.
Got a real pickle today in figuring out how to fill the canvas with floor tiles after I've released the mouse button.
Figured out getting all the pieces of floor to spawn and it's looking and working well.
The next thing is to stop the canvas from happening when I'm overlapping with something. I don't know when or why, but the Hitboxes altogether aren't working anymore, so I need to fix that before I proceed.
Turns out the problem was OnTriggerEnter doesn't work when time is paused. To fix this, I think I'm just going to go ahead and stop the player from doing anything if time is paused, like in normal games. This should save me some time.
Got it all working. This is a pretty big achievement for me! No tutorials! We can now build canvas flooring. There is a bit of clearing up still to do including stopping all control during pause and I need to replace the Transport Frames on the Walls.
Wednesday 29th July:
First task today was to make it so I could build the canvas in any direction. This means on my funky floor building code, I subtract from x and z if it's positive and add if it's negative. The 'if' statement checks for == 0 instead of >= 0. The pricing of the floor space is calculated using Mathf.Abs.
The next issue I have is having the canvas be drawn perfectly in line. At the moment, the canvas corners appear right in the middle of the space for a floor tile, as opposed to matching the corners. I looked into this the other day and it appears finding the nearest '0.5' is rather more complicated than finding the nearest '1'.
The answer in the end was a lot of checking if the number is positive or negative and moving the canvas 0.5 and then moving the target position of each floor tile by 0.5. Some trial and error because I'm not great at maths. 'Rounding to nearest 0.5' was necessary in the end.
Now, the canvas is drawn from the tile you're clicking on, the tiles appear exactly as defined by the canvas, etc etc. It seems to be working perfectly and I'm pretty pleased with myself.
The next task, while this is fresh in my mind, is the delete. I think this should be pretty straight forward.
Delete done! Much easier. Just take the objects colliding with the canvas' hitbox and delete. Adding the shift to include floors was an added bonus [scratch that].
Next one is to be able to select multiple buildings and manipulate them. This could be directly moving, copy pasting, making blueprints (this one is unlikely for now) or deleting.
Selecting the building will be easy, as I can just copy what I did for deleting except just make a list of 'selected' objects.
The hard part will be moving the items. I think it's imperative that the player can grab a bunch of items and move them all together.
Wrote down the Sudocode for how I think this should go. I'll leave it here for you to see.
Sudocode:
- 'Selected Buildings' is moved to the center of the first building selected.
- The selected items are added to the heirarchy of 'Selected Buildings'.
- While this is the case, clicking on one of these buildings will make 'Selected Buildings' the current tool.
- While this is the case, all buildings in the lists' Ghosts appear and their Objects and Colliders disappear.
- The position of 'Selected Buildings' will follow like any other building, and check the hitbox of all the items in the heirarchy.
- While this is the case, releasing the mouse button will return the selected buildings to the 'Building' transform and reactivate them (if all hitboxes are clear).
It's only 12:30 and my head hurts. I'm going to lie down for a bit so I can get this done today without causing a migraine.
I did it! And it's only 2pm! I can select things and move them! Next is to check the hitboxes of each selected item to check if it's a valid move location.
Got the hitboxes working nicely. Grabbing and moving items is nice and easy.
Made it so clicking an object other than a selected object returns the current tool to tentacle and you can start selecting again (instead of having to right click).
Sorted an issue where walls wouldn't intersect. Just modified from the original build wall script, using distance instead of hitbox for walls.
Added rotation for 'SelectedBuildings'.
Made it so selections won't work if something other than a building was included in the canvas.
Removed the colliders from the spheres in the pipes.
Canvas selecting and manipulation done!
It's only 4pm but I have to say I'm really pleased with myself. This was something that scared the life out of me before. But I guess it wasn't so difficult. This should make the game much easier to play and it should be much easier to re-design one's base. Want to move everything alone one bit? No problem!
Planning out tomorrow. I feel like sorting out Copy/Pasting should be pretty simple using the code I've already made. Got a couple other things I want to do: fix the transport frames on Walls and PipeSmartSplitter, disallowing all actions while paused, sorting out saving camera positions and assigning them 1-9 and of course the copy/pasting.
Thursday 30th:
Really feel good about my achievement yesterday. At the beginning of this week I had no idea how/if it was going to work. Now it's done!
Watched a really helpful video by dyc3 on Youtube called 'Yandere Simulator Complete Source Code Analysis'. I kind of used it as a checklist of things to look at in Human Factory.
Culling the animators bought me a few frames.
Made a list of optimizations I could potentially make.
I want to make a game called Yandere Simulator Dev Simulator.
Fixed the Transport Frames on Wall and Pipe Smart Splitter. Sorted the animation on the Pipe Smart Splitter.
Disabled Pausing outside of using the pause menu. That should avoid any time stopping glitches. May bring the feature back if people demand it.
Next is saving camera positions. I just failed an attempt at getting it to work right by misunderstanding the way my camera works.
A little bit buggy, it's not getting the exact rotation right but that's acceptable for now, otherwise got it to work nicely. Saves and loads too. I'll go back to it once it becomes a relevant feature. [I cut the rotation. Just position and 'zoom' is saved now]
Next is to fix the canvas stuff a bit. The function of building/deleting/selecting a single object is a bit awkward. I want to make it so you have to hold and drag a bit before the canvas appears. Then I can finish this chapter by including the Copy/Paste feature which I think will be fairly straight forward.
Got the clicking nice on the Canvas for selecting.
Got it working so I can build just one floor. Much easier said than done.
Fixed for Delete as well. You can delete one object or many nice and smoothly and clearly.
Sorted Copy Pasting. !!!. That was something I was so scared of but now it's done.
There is an issue now with animation culling. The issue is I instantiate the object outside the camera view, so they don't update. On Building single objects, it's easy for me to switch culling mode before and after the 'Build' animation is complete. For building multiple it's a bit more complicated. All I need to do is switch off culling mode until the Build is complete, and while I'm at it I can make it so the buildings build out of sync which will look nicer.
Friday 31st:
Busy morning getting some routine tests done at the hospital. Fairly distracted by real life today.
Compiled and posted this devlog here.
Sorted staggered building for the Copy Tool, so that A: it looks nicer to see all their build animations and B: I can toggle the Animation culling for each object until it is built. This fixes the animation culling issue.
Next up is to reprogram the main menu from scratch since I did it about a year ago and I'm much higher level now.
See you next week for the next Devlog.
I am thirsting for your questions and feedback. Want to help with development? Want to see more? Want to know if the game is really coming out this November? If you want to support us and make Human Factory as great as it can be, the best thing you can do is Wishlist the game and tell your friends about us.
[ 2020-08-03 17:00:23 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
[ 6138 ]
[ 3551 ]