Saturday, January 2, 2016

First look at lego bricks in Blockitect


Well, it's been quite awhile since I've updated my blog, but that doesn't mean I stopped working on the game, or have lost any interest in my block hobby.  Mostly I've just not had enough working additions of any merit to share, and also I'm not getting much traffic here, so I doubt anybody is really too concerned about my lack of activity.  So all of that said, tonight I felt like I made a pretty big step that's worth sharing, and I'll also include a bit of an update on all the features that I've been working on as well.

Lego.  In Blockitect.  That's frickin' huge.  I definitely did not start this project with that in mind.  But as I've improved the game, I've found more and more things I want to do with it, and I've been impressed and surprised at how capable Unity is for doing what I want (and how relatively easy it is). My vision for what this game/toy box is just continues to expand (so much so that it's hard to remain focused on any one thing for long).

The image above doesn't really do anything to show the building capabilities.  It's just cool to see all the colors laid out like that.  I think I got them pretty close, and I know that there are some missing, I did this entirely from my head without looking at a single brick, so accuracy may be lacking, I don't care.  They look incredible in the game.  I think the scale is interesting, which you can't really get a sense of unless I put up a video, which I will do when I get things ironed out better.  The bricks are pretty big.  These are 2 stud by 2 stud plates, and they are the size, relative to the player, of a minecraft block (if you stack four of them they form a cube).  These simple 3d models are not lego accurate in proportions actually.  I'm pretty sure that when I release a playable version, I'll use correctly proportioned/scaled bricks, just because I want you to be able to build any actual set that lego has put out (that will be a massive undertaking, and won't happen any time soon of course).

Now one thing that excites me about getting lego into the game is the fact that I expect more people will be interested in the game now.  I haven't done any substantial promoting of it so far, just a few posts here and there, but even with that I was a bit disappointed that it hasn't gotten much attention, particularly from the community of people who are into the Anchor Stone blocks.  But with lego that potential fan base is huge.  And no one has done a building game like this that I'm aware of.  Sure there is minecraft, and there is an official lego game that is very much derivative of minecraft called Lego Worlds, but those don't have physics.  They don't simulate the actual act of putting bricks together, or stacking them and turning them and so on.  I have Lego Digital Designer, but was never that impressed by it.  That's not a game in any sense either, just a specialized 3d modeling type program.   What I'm getting at is that seeing how the lego works in this space I feel like this has the potential to draw people in, more so than with the Anchor blocks or the wood blocks as much as I love them.

That's enough of that now I want to mention the features that are at least semi-functional in my latest dev build.  The main and most critical feature as far as lego is concerned is the ability to "glue" blocks to one another.  That was the essential part of making lego work, and I always figured it could be done, but getting it to this point was a massive pain compared with pretty much every other aspect of the game to this point.  And the worst part is that joining blocks together is actually not nearly as complicated as taking them apart.  I never would have thought that going into it, but the logistics are really hard, and made more hard by the actual method that I was forced to use to get the blocks to join solidly together.  I don't want to go to indepth, but basically it's harder than you might think to get the game to recognize what blocks you want to disconnect from an assembly and in what way.  It's not hard to take one block off the top of a connected stack, but what happens when you want to separate it in the middle?  And how do you handle lego bricks that are actually connected to more than one brick.  How do you get one assembly to correctly separate into multiple assemblies when you take away the one brick that was holding them together? 

I have ideas.  For now I put that challenge aside to focus on other things.  But finishing up with "gluing" blocks together, I don't yet have a mechanism for having the lego blocks connect simply by pushing them together.  That's coming, and I think it will work great, but for now, you push them together and then you press "C" to connect them.  This works with any of the blocks that I have in the game as long as they have touching surfaces.  There's really no restrictions on how you can connect the stacking blocks together other than that they have those 2 touching surfaces, so you can have some odd looking constructs, and then it's fun to toss them around and see them bounce and tumble.

The other really significant advancement that I've made is the beginnings of an inventory system.  So right now the playable version I've uploaded only allows you to build with the blocks that are in the scene.  There's no method for selecting the blocks from an inventory like you would with minecraft for example.  I've debated the need for that but ultimately decided that it was worthwhile to allow you to quickly pick a specific block, no matter where you're at, it's just more convenient and it makes sense.  So that all said, I don't want a UI in this game.  At this point I'm committed to a very minimal at most or preferably the complete absence of any UI elements.  Not sure why that is, partly I don't want to learn how to do it, it's just time taken away from the more enjoyable stuff that I could be working on, but also I like the challenge and the way it forces me to think outside the box, and it also fits my vision for what this game is becoming.

That being the case, here's the rather clever method I've devised for having an inventory type system in the game (if I do say so myself).  By pressing Tab (I re-mapped the instructions key which was using tab), you instantly move to another space within the level, an area that is strictly devoted to storing/making available all of the blocks that you can build with.  Press tab again and you instantly move back to the spot you were prior to going to the storage area.  Rather importantly as well, the game keeps track of exactly where you were at and the exact direction and angle that you were facing as well as the selected height that you were in in both the inventory and the build areas.


It's not too impressive yet, but what I have in the image to the left is what I would call a parts bin, or container.  It's the type of thing that I use to store my actual lego and my wood blocks.  There are some unique features that are either already working, or will soon be that make this pretty neat.  It's a "bottomless" box.  By that I mean that it will never run out of blocks.  Well, I shouldn't say never because there are some limitations in Unity and I might have to cap the individual block count to save resources, but in essence, as you take the blocks out, the box will fill back up.  It's extra neat because the blocks actually slide or force their way into the container.  They don't just pop into existence.  When you take the blocks out of the back row, it detects they're missing and pushes more in from the back.  If you have the whole column empty, it fills the whole thing back in, otherwise it just pushes as many in as will fit in the box.  I think it's pretty ingenious. 

Another aspect of this concept that I'm working on is allowing you to pick up the drawers and re-arrange them however you like.  I even intend to allow you to choose different sized drawers and to determine what blocks you want to put in them.  In addition, though this is further out, I want to put these relative small containers on slide-out trays or shelves inside a cabinet of some type.  This would allow you to store different sizes and colors and even types of blocks on different levels and in separate cabinets to further allow for customization and organization.  And because I already have the adjustable player height feature, you can easily select your viewing height to reach whichever shelf you want to sort through.

Those are the 2 main features that I've added, the connecting/gluing of blocks and the beginnings of an inventory system, but I've also added a few important but minor features that I will also mention here.  First off I have a randomized texture and block shading system working.  In the public build I just assigned each block in the scene/level a given color and chose from a small set of "shades" of each of the 3 Anchor Stone block colors.  These shades make the blocks look more realistic, it's a small touch that I also used in my Sketchup renders.  Now though blocks randomly pick a shade when they are "spawned" into the scene.  The wood blocks also have the capability to pick from a set of similar but not identical textures.  I scan my blocks with a flatbed scanner, and I scan all sides of 9 identical blocks.  This ensures realistic variety, as not all the wood blocks should be identical.  Such things are noticeable and small touches like that go a long way.  In addition, with the Anchor blocks I have a key mapped to toggle the block color itself between the 3 colors.

I think that's pretty much it.  This turned out to be a really long post.  I had some other things I've been working on that I would like to share, but I think I'll keep those for a later post more specific to the topic when I have more to show.




No comments:

Post a Comment