Tag Archives: sandbox game

Latest Happenings

Hey, I missed last week’s update. Things have been busy for me! Lots of work, real life events and Diablo 3 have all been keeping me occupied. Fortunately all of these are wrapping up for me – just one last wedding this upcoming weekend. I still have managed to get some work on Crea done and soon much more.

Tiles changed from 24×24 to 16×16. This is a fairly large gameplay change but it is a good one as it will give players more creative freedom. Along with this change, Kelley remade and cleaned up the various tile types. Before too long we’ll put up a screenshot of them in game. For now this small sample will have to do!

In other news, we have been refining the character customizations and ensuring that they are implemented 100%. This includes things like adding armor to the character and what not. We still have some work left but it is coming together.

Kelley has also been working on some animations. Here is the walking animation. These are the base graphics we use for the character. Everything in game can be swapped out for other images and/or recolored.

The character and clothing are about 20 small images put together using Spriter. We also have a running, walking, jumping, falling, and swinging animations. All of which you will be seeing in good time.

David has been putting together a mockup of the final UI. Nothing about it has been finalized yet but just the mockup gives the game a much more polished look. Once we get something a little more final then I will be sure to post it.

Things are starting to come together!

Building Menus

The majority of my Crea time was spent working on the character creation menu. Once I got that fully functional, I moved onto designing and developing the character selection. In the middle of that I realized that my hacked together menu system finally needed to be upgraded. After some designing, I have come up with a much more manageable menu system, which means cranking out the world select and creation should be a breeze. That is once I get to those. In the meantime I am back on the character selection menu screen, which I should be finishing up tomorrow.

I would like to show screenshots of the character creation but I have left the UI extremely messy for David to come through and clean it up.Once he gets a chance to do that then I’ll be sure to post some screenshots.

In other news, Kelley will be finishing up her school semester this week and will be able to put much more focus into Crea so expect to see lots of visual goodies over the next few weeks. I know I’m looking forward to it!

Creating Placement Items

First of all, this builds on top of my previous blog update so you should read that now if you have yet to. This post will go a little more in-depth into what it takes to create an item that can be placed in the world.

Starting out lets say you are an amazing artist or have one on hand – like I do! Said artist has created an ingenious llama statue.

Hello, I am a Llama.

Now you want to place it into the game… but how do you do that? Inside of your item mod directory you need to create a content script so Crea knows about your statue. Here is what the script would look like.

name = 'Llama Statue'

#Render Component
render = Render('mods/base/item/llama_statue.png')
add(render)

#Item Component
item = Item()
item.stack = 999
item.delay = 200
add(item)

#Craft Component
craft = Craft('Home', 'Decoration', '') #Category, Subcategory, Surface
craft.add('mods/base/tile/stone.py', 50) #Materials needed
craft.quantity = 1 #Quantity made from a single craft
add(craft)

#Placement Component
placement = Placement()
placement.addAxis(PlacementAxis(AxisType.AXIS_FLOOR), Vector(5, 32))
add(placement)

I added in some comments for the crafting since I have not covered that before, but what we are really looking at is the placement component at the bottom. Items are composed off a list of possible axes that the item can be placed on.

The item can be placed on any axis but only one at a time. The types are floor, ceiling, left, right, backwall and wall. Backwall is the a tile in the wall layer. Wall is the combination of left and right. In addition to the axis type, each axis has a range, an area, and a list of supports.

The range of an axis defines where and how much support is needed to place the item down. This is the second parameter for PlacementAxis. In this case we have Vector(5, 32), which translates to start at pixel 5 on the bottom of the image (since it is floor) and go for 32 pixels. This will default to starting at 0 and using the entire axis length. The reason for this feature is to enable items to have a skinny base and only require support for the base and not the entire width of the item.

Area for an axis is the game’s physical representation of the item relative to upper left corner of the image. This area is used to reserve space for items in the world. This area defaults to the size of the image.

The last part of an axis is the list of support it can provide. It is defined very similarly to an axis with a support type and a range of where and how much support to provide. The type can be on any one of the four sides; top, bottom, left or right. Here is an example of a table placement with support on the top.

placement = Placement()
floorAxis = PlacementAxis(AxisType.AXIS_FLOOR)
floorAxis.addSupport(PlacementSupport(SupportType.SUPPORT_TOP, Vector(3, 57)))
placement.addAxis(floorAxis)
add(placement)

And now we have a llama standing on a table!

Here are a few cool features about the placement system.

  • Item placement is on a per pixel – not a grid.
  • Item placement is smart and provides some tolerance to moving to unavailable spaces.
  • When you have a placeable item as your active item you will see a semi-transparent hint of where it will be placed.
  • An item can have an animation component added to it with animations named to the different axes. The game will automagically use the correct animation when the item is placed.
  • An axis can have any number of supports, which means that you can do something like a Menorah.

Overall this system is really flexible and provides an extreme amount of power to both modders and world construction. Currently its biggest limitation is that items cannot be placed inside of another item. This limits some items such as a bookcase and placing individual books in it. It is probably still possible – just have to be creative! If the demand is high in the future I may revisit this limitation but for now it is something I am willing to live with.

Feel free to ask any questions or give constructive feedback. This is my first attempt at writing a more in-depth guide to modding.

Quick Update – Creating Characters

This last week I’ve been busy laying the foundation to be able to creating characters. This primarily consists of getting the character’s to be able to dynamically render and animate with customizations (hair, base clothing, etc.) as well as with equipment. We have been contemplating and discussing how we would go about doing this since the beginning and then I found Spriter.

Spriter is a software tool used to create 2D modular animations. This means breaking apart the character into tiny pieces and moving them individually instead of having a static frame. This enables us to create animations with lots of frames and only create the graphics once – making content creation as simple as possible. I will save the remaining details for next week.

Aside from the animations I have begun constructing the UI for actually creating characters. Things are going well and I do not see any reason it wont be finished by next week’s update.

Speaking of UI, my good friend David has officially joined the team. He has been helping out since the beginning and was definitely Crea’s #1 fan. He is a professional web designer/developer and consequently will be focusing on the UI. I’m sure it wont be too long before I am showing off his work here.

Stay tuned!

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.

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)!

Behold the Power of Modding

I have been rambling on about this sandbox project being mod friendly, but I haven’t given any details. How will the mods work? What will they look like? I want to take the time to answer these – please bare with me as this is  more technical than previous posts. Mods will work through the power of Python, a scripting language, and a component-based engine. Each piece of content has its own text file that describes how to create it in game. This file is actually a python script. I will touch on why this is so important soon. The content definition file is very readable and I am doing my best to simplify it. Before digging in too deep lets look at an example – a simple pickaxe.

name = 'Pickaxe'

render = Render('mods/base/item/pickaxe.png', SpriteData("Pickaxe"))
add(render)

item = Item()
#How many of this item can stack in one inventory slot.
item.stack = 1
#How often the item can be used. This is in milliseconds.
item.delay = 200
add(item)

#Adding a craft component enables players to craft the item
craft = Craft('tool')
craft.add('mods/base/tile/stone.py', 2)
craft.add('mods/base/tile/wood.py', 3)
add(craft)

#Tool components makes the item be able to break down compatable tiles
tool = Tool()
#Each tile has a life amount that is decreased by tool's power - once zero the tile breaks
tool.power = 1
#How far can the tool reach - this is in pixels (tiles are 24x24 pixels)
tool.reach = 125
#Which tiles the tool is compatable with. This can list tile groups ("soil") or specific tile names ("stone")
tool.compatable = ['soil', 'stone', 'sand']
add(tool)

Any content created in game is known as an ‘entity’ and each entity is composed of one or more components. Every component has a specific function such as a render component is used to render the entity to the screen and a craft component is used to provide information on how to craft the item. An entity can have any combination of components added or removed from it, which makes the system very modular. At entity creation the content script, such as the above pickaxe script, components are added with the add() function – such as add(render). You’ll see that a pickaxe is composed of a render, item, craft and tool components. Don’t want the pickaxe to be craftable anymore? Simply remove the craft component. Remember how I said that this is a python script? Because of this it opens up all kinds of doors. Some components will provide the power to define custom functions. What this means is that content can have unique logic inside of it. Here is one quick example.

Say you decide you really hate monsters attacking you while you’re trying to mine for some copper. You’re a simple man with simple pleasures. You don’t ask for much. Then suddenly you have an idea – lets make a new piece of equipment that insta-kills any monster that comes in contact with you. This can easily be done by adding in a custom OnHit function to your newly crafted equipment piece. You won’t worry about those monsters anymore as they squirm on the ground in agony at your feet.

If I lost you with my first mention of functions, then don’t worry because as I have previously said, all of the included game content will be a mod. Consequently, there will be plenty of examples to copy from. Also we’ll do our best to provide lots of documentation on modding. This is just one example of the true power of modding.

Upcoming Minecraft Mod API

Considering the humble beginnings of Minecraft, it is no surprise that it does not have mod support. Not to mention who ever knew that there was a desire for it. Without any official mod support, mods for Minecraft have been hacked into the game and eventually communities built up around modding the game. These communities have done their best to build their own mod API but without official support they can only go so far. The community has been begging for some official support for sometime. This is why, when Notch announced plans for the upcoming Minecraft mod API nearly a year ago, the community rejoiced.

Having official mod support for Minecraft will undoubtedly be huge for the community. This will help bring the mod community together. Another huge benefit is that it will enable players to more easily obtain and install mods. Additionally, there will likely be much higher quality mods developed. This is probably only scratching the surface on what benefits we’ll see from an official mod API. However, some of the given information does potentially have some downsides – mainly accessibility.

In order to gain access to this mod API you must signup as a mod developer. It also sounds like mods will go through some submitting process and once accepted will become available to everyone online. If this is the case then there is little place for casual mods. I do hope that Mojang has considered this and provide means for players to easily and casually create mods as well as be able to share with just friends or the entire community.

Since the mod API announcement, Notch has given lead to Jens Bergensten who is continuing to focus efforts on developing this mod API. More recently Mojang absorbed Bukkit, a Minecraft mod team, to help with the mod API. This really shows Mojang’s continued committed to this mod API – not to mention how much this team will help bridge between development and the community.

Back when Bergensten took over Minecraft lead, he had an interview with Gamasutra and from it there is a quote of resounding truth.

“there is no way in hell I will be able to add as much content as the whole internet can” - Jens Bergensten

This quote has stuck with me since I read it and undoubtedly helped set the course for our recently announced sandbox game.

Sandbox Modding

My last post I introduced this idea of building a sandbox game that is mod friendly. What does this “mod friendly” actually mean? Isn’t decompiling the game’s executable and editing the source code considered as supporting mods? Not quite. Decompiling is obviously a way to mod games, as Minecraft and Terraria have proven, but it is still far from being truly mod friendly. To be fair, these games were built by very small teams (1 and 2 people respectively) and being mod friendly can be a lofty goal. To me, mod friendly means to make creating, sharing, and managing mods as simple as possible for the average player.

Creating mods will be simple and fast but still provide much flexibility for those with big plans. Tools will be provided to help perform the more basic tasks such as setting up a mod. Adding content will be as simple as creating a new file, typing in a few lines, saving the file, and then loading it up in the game. No compiling will be required. One goal I have is to make it possible to reload content in game to help streamline the creation process. No restarting necessary!

The provided mod tools will help with packaging up a mod as well. Once packaged a player simply has to drop the mod package into their directory and the game will take care of the rest. We are also considering providing an official hub to upload mods to. Eventually, if the game gets onto Steam, we would love to support Steam Workshop. This is a service provided by Steam that allows players to easily share, search, and subscribe to game mods.

Players will be given the ability to enable/disable mods and even completely remove the mods all in game. The goal is to minimize the amount the player has to manage mods externally. We even have plans to make the multiplayer host (aka server) provide any missing mods to joining players.

The way that we will ensure that this game is truly mod friendly is by dogfooding it. All of the game content will actually be a mod to the game. With this philosophy we will be able to ensure that nothing is hardcoded and nearly every single aspect of the game can be modified. This won’t just include the basics such as items, monsters and tiles. It will include much more such as biomes, NPCs, character customization, and eventually the ability to add entirely new systems to the game.

In my next post I will go into the more technical side of how the game will be made mod friendly.