Tag Archives: crea

Chat and Item Placement

Time for the weekly update! This last week was another productive week but it took an unexpected turn. At the start I was planning to get chat, item placement and some other feature done. I breezed through chat as I suspected, and once I started digging into item placement I realized there was much more potential (and work!) than I had originally anticipated.

Item placement is the feature the enables a player to take an item from their inventory and place it into the world.

I knew right away that I needed item placement to be dynamic and any item could provide a placement component to enable it to be placed into the world. Another thing I knew is that items should be able to define how it can be placed (known as the axis) – on the ceiling, floor, wall, and/or backwall. One last thing that entered my mind before I started programming is that some items should be able to be placed on top of other items – such as a candle can be placed on a table. Once I got the basics implemented and began looking into items supporting other items I had an epiphany.

Items can provide a list of different axes it can be supported on (think ceiling, floor, wall) and for each axis it defines the area the item takes up in the real world and also a list of supports that the axis provides. These supports can specify the side the support is at (top, bottom, left, right) and where the support is at on the item’s side. This basically boils down to one word: Awesomeness.

I will admit that it is a confusing without seeing it in action so here is a quick peek with more to come soon. This is a poor man shrine my friend David threw together.

The tables and shrines are all dynamically placed on a pixel basis and this is why I am truly excited about this feature. Later in the week I plan to write a more thorough write-up on how easy it is to create items with a placement component. I may even include a video of it in action!

Building anything just got personal.

Crafting in Crea

When I first started brainstorming Crea and how I would do things differently from current sandbox games, crafting was the second thing that came to mind (after modding of course). The positional crafting system in Minecraft is an interesting approach but it, like other crafting systems, share a common problem: The player has no idea what can be crafted and/or what materials are needed for an item. Nearly everyone (if not everyone), loads up Minecraft, plays around a little bit and then opens up a wiki to find what items to craft and what is needed. The same goes for Terraria for the most part. In the end, players become wiki dependent and consequently the game does as well. This stops in Crea.

A player must first aquire the recipe for an item before being able to craft it.There are several means to acquiring recipes: monster loot; treasure chests; quests; and, most importantly, the Researcher NPC.

The Researcher is specifically for discovering new recipes. First you provide the researcher with materials. Upon returning to him after some time, you gain any recipes his research turned up. We are also considering a hint system that will help steer players into being able to discover more recipes.

This should help give new players direction and also keep them in the game. Basically, crafting will feel like a natural and intuitive aspect of the game rather than a mystery that requires switching in between the game and a wiki. Another exciting aspect of this crafting system is that it lends itself to the ever-expanding content Crea will see.

Productivity Prevails

This last week I have been extremely devoted to working on Crea and lots of progress was made!

First, I have been working on the crafting system with my friend David helping on the UI side. The UI has been designed with expansion in mind. All craftable items have a category and subcategory. In the UI the categories are tabs and the subcategories are collapsible sections. Here is a screenshot of the latest version.

All of the graphics are placeholders for the time being as we iron out the design. Functionality wise it at 100%. Creating a new item with a craftable component will automatically be added to the dialog. The displayed items can be filtered by “only available” items and/or by surface requirement, which is automatically populated as well.

Saturday I implemented a feature David suggested where the active item is now more of an active column and pressing tab will cycle the active item. This will make it easy to clump commonly used items together and quickly tab through them. We are still playing around with it but it is a promising concept.

The last thing I worked on this week was internationalization support. With this in place it is easy to create new a localization. Each mod can provide a list of text translations for any locale. All mods for a given locale are combined to create the final localization. This means that even mods can provide translations for other mods. I am really excited to see what the community does with this.

That’s all for this week as far as updates go. I will write a new in-depth post about one of the features later this week – perhaps the crafting system. Be sure to subscribe to keep up-to-date on the latest news!

Back from Vacation

Over the last week and a half we have been on vacation. We went to the East Coast and had a great time with some friends. During the trip I did my best to sneak in Crea development whenever possible. I got two big things did get done during vacation with the help of a friend.

First of all, the blog is finally being hosted at siegegames.com. I have owned this domain for over a year now but never got my own hosting – even now it is a friend hosting it! All that remains is to finish setting the site up.

The other news is that the item toolbar is fully functional. It displays how many you have of each item and the currently selected items for your left/right click. You can change the selected items with the number keys. Moving items around is simple – just click on an item to grab it and then click another item or empty space to drop the grabbed item. The UI needs some work, such as the item’s icon position, but it is good enough for an initial version.

I’ll be returning to my posting schedule starting Monday. So more updates are on their way!

Development Update – Lighting and Saving

I am doing my best to avoid reinventing the wheel. This is quite obvious with my extensive use of third party libraries to help with nearly all aspects of the game engine – from rendering using SFML to randomly generating worlds using ANL. This backfired on me this past week.

At first I set out to work on the world lighting. After doing some research I stumbled upon Let There Be Light (LTBL), which helps with basic lighting and shadows. I began incorporating it into my game engine and quickly found that it had some fundamental bugs. I posted to the linked forum post above in hopes that the developer would fix these issues. I was pleasantly surprised at how quickly the developer fixed the issues. Not long after resuming I once again got caught up on something and had to wait for the developer’s response. The developer was great about replying and I’m really appreciative about it but I do doubt that this was the right path.

I know what I want for the game’s lighting. LBTL gets me about 70% of the way there with minimal effort but I have to tweak and bend the code to my design. This is going to take a great deal of time and in the end it may have been faster to just throw together my own lighting system. I may still do this using LTBL as an example.

There was progress made for lighting though. I setup a light and hull (shadow casting) components. This means that entities can have a light source attached to them and/or have a shadow casting convex hull attached to them. Here is an example with a hull attached to the player, which needs much work.

During my downtimes between the lighting, I would work on the world saving. I am using boost for much of my game engine and decided to use the boost serialization library to do all saving/loading. This library has some really cool features but these features come with a heavy cost in code complexity. Before too long I realized that I did not need these features and so I was back to square one. I decided to do my own and within no time I had the basics working.

I started doing some testing. First I tried a small world of 100×100 tiles was saved to a 73kb file; this worried me. I want to have huge 8000×2000 worlds at least. So I tried a world at this size… 120MB! Additionally it took about 4-5 seconds to save. This is good for a first run but it is unacceptable and needs some serious optimization.

First I’m going to do compression on the data before saving it to disk. Fortunately this data is very compressible given that it is extremely repetitive. I tested this by zipping the small world save file. It went from 73kb to 1kb. This is promising! This helps with disk size but it is going to hurt the time. My plans for fixing the time is to reduce saving data that hasn’t changed. Right now the entire world is saved every time but the reality is that only a small portion of the world is going to change in a minute. One of the cheapest ways to do this is the same way Minecraft does it – split the world up into separate files.

This week I’m going to work on finishing up the saving/loading, which is going to take a little longer than I initially thought. What doesn’t though? If things go well then I will get back to working on the lighting. Before too long I’ll be able to have some visual to show off!

Development Update – Take One

As promised, here is my first development update on Crea. We’ve made tremendous progress over the past month but to keep things short I’ll just cover what I worked on this last week. The majority of my time was spent working on water simulation. At first I was not sure what the best approach was, but after some research I discovered the joys of cellular automata. For research I found these articles to be quite useful: Gamasutra articleCompressing Space and Time and Cellular Automata for Physical Modelling.

Simulating fluids with cellular automata is reasonably cheap, which is needed with worlds as large as the ones in Crea. A bonus to implementing a cellular automata system is that it can be used to simulate other things – fire! I am rather pleased with what I have written thus far and would eventually like to write a more technical blog post about it, but that will have to wait. It is time to break up my wall of text posts with some actual content. So without further ado, here is the first look at the game and its water simulation.

In other news, while I was watching last week’s Indie Chatter, he mentioned a website that he uses for project management, Pivotal Tracker. I looked into this and it has some cool features such as automatically calculating what tasks you will be able to complete over the next iteration (typically a week). The thing that really stuck out to me is that projects can be public, which means that anyone can see what is currently being developed along with when releases are set and basically everything else.

Last week I said I want to try to be as transparent as possible, well here is the Crea Pivotal Tracker. It is a little bare at the moment because I just started it up on Friday, but I will be doing my best to keep it updated and filled with all of the stuff I am working on. Perhaps I will even be able to convince Aaron and Kelley to join in on it.

Terraforming in Crea

Randomly generated content can be great and sometimes not so much. If the input is too constrained, then the result is something that is different and yet all too familiar. I think this can be seen in the Terraria world generation. Terraria has a fairly limited number of biomes and how they are used is restricted. Such as a large world will always have 6 floating islands and there is always one dungeon. After a few worlds patterns quickly become apparent. Don’t get me wrong though. Terraria can provide dozens of hours of exciting exploration, but the novelty does eventually wear off.

World images created with MoreTerra

When I set out designing the world generation for Crea, I knew I wanted to enable players to be able to have unique experiences with every world. The answer was quite obvious – moddable biomes. If players could easily create their own biomes or play with other player’s biomes then the possibilities are endless. Here is an example of what a biome content looks like.

biome.name = "Plains"
#How often this biome should be used
biome.frequency = 50

#The minimum and maximum dimensions of the biome
biome.minWidth = 80
biome.maxWidth = 300
biome.minHeight = 80
biome.maxHeight = 300

#Specifies that this biome only occurs on the surface
biome.surface = True

#The elevation of the biome
biome.elevation = 100

#The amount of elevation changes (hills) in the biome
biome.hilly = 10.0

#How much the lowest and highest elevation can differ
biome.relief = 2.0

#A list of biomes that cannot neighbor this biome
biome.blacklist = ['Volcano']

#List of actions to apply to the world
#This part is still being worked on.
biome.placeTiles('stone', frequency=20, pattern)
biome.placeTiles('mud', frequency=10, pattern)
biome.plant('grass', frequency=40)
biome.plant('tree', frequency=5)

Some of these details will change but this gives a good idea of what a biome looks like. Most of the contents are explained. You can do simple things like increase the ‘hilly’ and ‘relief’ properties and have mountains. For the real power we have the actions section at the bottom.

After the basic terrain has been generated, each biome has it’s list of actions applied to it. In this case all Plains biomes will have stone randomly placed, then some mud, then lots of grass will be planted, and finally a few trees. I plan to include several basic actions that players can use to make creating biomes as simple as possible, but what if you want to do something completely different? Lets say you want to build a crazy dungeon. For advanced modders, I have added a special action that takes a callback function which provides you ample power to twist the world to your desires.

Now that we know how biomes are made, the next logical question is “How are they used”? Players will have the option to create a world with simple or advanced options. With simple the player chooses a name and the world size and is good to go. From the advanced options the player is also able to adjust the frequency of biomes. Want a world consisting purely of bunny warrens? Kelley, our artist, does!

Not only will players never have to see the same world twice, but they will be able to explore the worlds that they want.

Crea Reborn

When we started this new game project a month ago we somewhat jokingly called it Crea. Well, the name has stuck. We have stolen the name from an older project of ours - “We will finish Crea!” I still like the name and it is a good fit.

In other news, I want to share the plans for this blog as well as Crea.

This is obviously a game development blog, but I want it to be more to it than just that. I would like this to be a conduit between us, the devs, and you, the community. Consequently, I’m striving to be as transparent as possible. This means we will be giving somewhat frequent development updates, showing early WIP screenshots, revealing game systems early on and much more. We also want to be able to take feedback and incorporate it into the game.

I am still getting into the swing of regularly posting updates and I have been considering attempting a posting schedule. My current thoughts are that I will do a weekly development update on Monday and on Thursday or Friday do a more lengthy post discussing some aspect of the game in detail. I will even take requests for the in-depth posts.

Now onto the plans for Crea. Back at the start of development we sat down and sketched out a very rough project timeline. We have 5 phases of development planned: Early Alpha, Alpha, Beta, Release, and Post-Release.

  • Early Alpha is all about getting the fundamentals down. So it primarily consists of just the basic systems – world generation, saving/loading worlds, world manipulation, multiplayer, crafting, lighting, and a few others.  Another week or two and we’ll have all of this done.
  • Alpha is when things will start to get more interesting. We will be adding in character creation, character stats, equipment, NPCs, enemies (death included), and refining the systems from early alpha. We are aiming to wrap this up by the end of April. We are being optimistic!
  • Beta will be bringing in a wave of great additions. We will begin putting together the mod tool and documentation for adding mods. Also many other exciting things such as adding in weather, animals, and what we are calling “interactive items”. With this being further out it is hard to say how long this will take but we are once again aiming for roughly a one month period – end of May.
  • Release will be all about polishing things and getting it ready for the world. If the game is accepted onto Steam then time will be spent implementing some Steam features.
  • Post-Release is currently a dumping grounds for ideas that we like but are not vital for release. I imagine that as we move forward this will change a decent amount. Even more so once we start getting some more feedback.

Be sure to subscribe if you haven’t already! More updates are coming soon (and regularly)!

Three Common Pitfalls To Avoid In Indie Game Development

When standing at the threshold of a new project, humans tend to be overly optimistic and at least have best intentions for the project. Perhaps this is done to help rationalize our projected time investment into the project. Whatever the reasoning, I am particularly prone to this condition. When beginning my previous project, Crea, I was certain I would finish it and its beauty would cause the entire world to weep and cause the sea level to rise. Fastforward two years and it is clear there were several mistakes made that lead to the project being put on hold. I want to share some of these mistakes in hopes that others can learn from them – or at least I can.

Feasible Design

Ideas only have value if they are feasible. If it’s impossible to execute an idea given the resources available, then it is worthless. I’m talking about the resources you absolutely have - not promised or hope to have. It is all too easy to think “I can find people online.” or “My friends said that they’d help.” to help rationalize the scope of a large project.

Crea was designed to provide both story (PvE) and competitive (PvP) modes along with hundreds of cards and dozens of quests. This is a feasible project right? It is if you have the resources and I had convinced myself that I did. The project started with three people and grew to 6 people over the course of a few months. Life quickly began to pull team members in different directions, which left me with a large project and limited resources. Instead of calling the project a loss, I counted my chickens before they hatched. I convinced myself if I just get enough of the project done then people will see its potential and want to help. However, I gradually realized that to develop a project of this size on my own, a massive amount of work would required over a span of several years. This was undoubtedly the largest issue for Crea.

Moving forward, while coming up with a new game project my primary focus will be to ensure that the very basic design is feasible with the resources I currently have. I will try to be more realistic for project timelines and time pouring will be limited to something reasonable. I will not count new team members as a reliable resource until proven otherwise.

Defined Scope

The only way to determine a project’s feasibility is to have a well-defined scope. A carefully thought-out project design can fight against the deadly disease known as scope creep. Scope creep is where new features are added after the initial design without adding new resources – a temptress that has seduced many game projects and led them down a path of destruction.

In addition to Crea not being a feasible design, it was not well-defined upfront as well. The very core gameplay was detailed but gameplay systems were left to be sketched out. This vagueness left the project wide open to scope creep. We added a dozen cool “features”, such as character classes, card levels, card fusing, and the list goes on. Countless hours were spending pondering these features and implementing them. We were so excited about all these new ideas that we lost track of the big picture. The result: a bloated, needlessly complicated game design.

Eventually, during a cleansing period, I trimmed over a great deal of this extra fat, but the damage had already been done. The large scope had scared off many and left the few remaining reasonably discouraged considering so much progress lost. I imagine that the course of this project would have been severely different if we had taken the time to detail out all of the features and the scope of the game’s content – perhaps it would have not even made it past design.

All of my future projects will always have all aspects detailed out in a design document before any development begins, this includes features and content. I have found that prototyping a project gives an invaluable insight into the true scope of the project with minimal commitment. A prototype also is a great time to play around with the design to help minimize the changes needed in the future. Initially, nothing is set in stone since it is impossible to get things perfect on paper; however, I will be cautious any changes particularly further into development. Whenever changes are made it is vital to keep the project’s scope in mind to avoid losing control.

Cautions About Free Help

People are cautious of how they spend their free time – particularly when giving it away. When dealing with game projects, if the project is not benefiting someone then that person is unlikely to stick around and I don’t blame them. Even if the person genuinely wants to help or is getting something out of the project, legitimate reasons come up that may require the person to reassess his time commitments. Life happens and it happens unpredictably. It can be a real challenge when trying to determine if you can truly rely on someone when the going gets tough.

Throughout the entire lifetime of Crea, I was depending on free help from both friends and people from online forums. Most of my online contacts who promised to help, never did, or would help for a week then disappear without warning. The few team members who did stick around for a few months eventually either became too busy to work on Crea or just lost interest. I believe that the daunting size of the project was what scared most off. In retrospect, it was completely unreasonable to expect others to invest years of their time into a project.

I have learned that if you’re asking for someone’s free time then don’t ask for too much. Keep the project short with continual returns on the person’s investments, even something as simple as tangible progress can be acceptable. When searching for that perfect someone, look for someone that is as passionate about the project as you are. If all else fails, I have found that money is very good at convincing people to stick around.

Conclusion

I by no means want to discourage large projects and do not think people should not take risks. I have read about several successful indie games that faced some rough times, such as Magicka and Super Meat Boy. I am certain that serious doubts filled the developers minds at some point, but yet they persevered and found success. This post is about minimizing project failure. After all, the number one defining characteristic of successful video games is that they’re finished.

Facing the Truth

I have been hiding from the truth for a long time now. I thought that if I could just close my eyes long enough that it would go away. Two months ago I finally opened my eyes once again and now that they have dialated I can see that the truth is still staring at me.

The truth is that Crea is too ambitious for where I am at. I was asking too much from my team, which was likely the cause for chasing away some members. I was asking too much from myself. I have decided to put Crea to the side for now. This is very difficult for me to admit, because I have put literally more than a thousand hours into this game over two years.

I do not completely regret working on Crea. I learned a great deal about game development from nearly every perspective. I believe that moving forward I will be able to avoid pitfalls that I discovered during Crea’s development and consequently create a better game than I could have before.

One day I hope that I am able to pick Crea back up and finish it. However, for that to happen, the project will have to truly be feasible given the resources that I have at the time and not what I hope to have in the future.

Creating unique and quality games is still my passion, and I already have some new game ideas that I am playing around with. I am not certain what my new project will be, but no matter what, I know that it must be feasible for a very small team (my wife and I, basically) to finish within a 6 month time period.

In my next post I will list what I learned from the failure of the Crea project and how I’m using that knowledge to shape my ideas for future games.