Community Sandbox Game Spec

Sandbox Game Specification
Inspired by Harvest Moon and Animal Crossing

Title
Anything works, really, from wacky Japanese-type names like “Mani Mani The Village of Dreams” to simple ones like “Sim Village” work. I like the idea of focusing it around a Village, however.

General Concept
The game is called “sandbox” because it has no obvious goal. You, as a player, will exist in some sort of village where you will own a home. There will be lots of things to do in the village so that rather than adding linearity to occupy the player we will simply have a large number of things to do. Overall, however, the goal of improving your home and your village will be the main thing.

More Detailed Description
For some reason, the player is buying a new home in a new village. Reasons could be: a) As a young person you are just moving out on your own or b) The economy crash caused the bank to foreclose your house, so you’ve got to get a cheaper one or c) You’ve just retired and want to leave the city life to go live in the country. Or any other number of possibilities. Either way, you’re at a new home, and it’s a tiny rickety shack. You’re also in a rather barren and scarce village without only a handful of people.

You are able to do any and every job as a means of making income. These jobs include errands/missions for the villagers, cutting down trees to sell for wood, collecting rare objects like fruits or gems, hunting and killing game to sell the meat, winning competitions in town, etc. These jobs all fall into two categories: 1) Errands/missions, where you are told to do a specific thing and you go do it. These are more complicated and many must be individually scripted, but interesting storylines and character development can result from them and 2) Sandbox/gatherer jobs, where you simply utilize the world around you to find/make something that can be sold.

Using your money, you can buy better tools and equipment, upgrade your home, buy interesting furniture/outfits, and travel. Travel is one of the most important parts of the game. An online multiplayer component will allow you to upload your village to a website, and then other players can visit it at any time. This is not simultaneous play, unfortunately, but you will be able to leave notes and the like, and potentially modify other peoples’ villages. This means the networking can all be SQL based, rather than through Sockets. Then later on we can potentially adapt to Darkstar or sockets so people can be in the same village together.

What Makes it Unique?
What I put up there sounds pretty verbatim like Animal Crossing or Harvest Moon, with a few small differences or additions. However, what makes this concept stand out is that we can avoid the shallow nature of those two games. Neither had any storyline or character personalities to speak of, and the tasks you do for the villagers in Animal Crossing are all reiterations of around 5 different quest types. By introducing a larger variety of quests and by putting serious dialog into them, we can really have something that’s very interesting. Similarly, if we add some traditional MMORPG elements like crafts, we can make it so that a lot of the obtainable items to decorate your home are actually the result of you building them.

Implementation
This would probably work just fine in 2D, however if we ended up with some 3D experts / artists it could work just fine in that as well. As such, using OpenGL could certainly be done, and potentially will be necessary if we can’t get good performance from Java2D. The game would hopefully be able to run in an applet, although this is not totally necessary. If we really make it feel like a community game and part of a website, however, that will be to its strength.

Being able to generate custom images from the game that people can use as avatars and the like will be very important, so we should keep in mind that we want there to be some easy way of screen-shotting specific pieces of the game.

There will have to be a lot of content, but it will all be very easy to keep separate per developer by using an intelligent resource system.


public abstract class Resource
{
	//The money value for each of this resource.
	int value;

	//What this resource looks like.
	Image image;

	//etc.
}


public abstract class Job
{
	//The rewards you get from this Job.
	int[] rewardCounts;
	Resource[] rewards;

	//What time you started this job.
	long timeStarted;

	//The person who is doing this job.
	PlayerEntity jobTaker;

	//The Entity who gave this job.
	Entity jobGiver;

	//Called when a player is given this job.
	public void assignJob(PlayerEntity u)
	{
		jobTaker = u;
		jobTaker.giveJob(this);
	}

	//Called when a job is completed successfully.
	public abstract boolean jobIsCompleted();

	//Called when a job has been failed.
	public abstract boolean jobIsFailed();

	//Updates this job. Anything can go here from receiving input to
	//catching position to checking the clock.
	public void updateJob()
	{
		if (jobIsCompleted())
			completeJob();
		else if (jobIsFailed())
			failJob();
	}

	public void completeJob()
	{
		for (int i = 0; i < rewards.length; i++)
			jobOwner.giveResources(rewards[i], rewardCounts[i]);
	}

	public void failJob()
	{
		jobTaker.failJob(this);
	}
}


//Job examples:
//1) Cutting down a tree.
public class TreeJob extends Job
{
	int hitPoints = 10;
	rewardCounts = new int[]{3};
	rewards = new Resource[]{new WoodResource()};

	public boolean jobIsCompleted()
	{
		//We complete cutting down a tree when it's all the way dead.
		if (hitPoints <= 0)
			return true;
		return false;
	}

	public boolean jobIsFailed()
	{
		//We fail if we walk away from the tree.
		if (!jobTaker.isCloseTo(jobOwner))
			return true;
		return false;
	}

	public void updateJob()
	{
		super.updateJob();
		
		//If the player is swinging their axe, lose some HP.
		if (Keyboard.IsKeyDown(Keyboard.KEY_SPACE))
			hitPoints--;
	}

	public void completeJob()
	{
		super.completeJob();
		//Kill this tree after it got cut down.
		jobGiver.setMarkedForDeletion(true);
	}
}
//This would be in some other class, like a TreeEntity or something.
if (player.isCloseTo(tree))
{
	Job treeJob = new TreeJob();
	treeJob.assignJob(player);
}


//Job examples:
//2) Part of a long quest chain with the local priest.
public class PriestJob12 extends Job
{
	rewardCounts = new int[]{5,1,17};
	rewards = new Resource[]{new HolyWaterResource(), new SilverCrossResource(), new GetOutOfConfessionsFreeResource()};

	public void assignJob(PlayerEntity u)
	{
		super.assignJob(u);
		u.recieveMessage(jobGiver, "All right, good luck getting those school girls to confess. They certainly are naughty!");
	}

	public boolean jobIsCompleted()
	{
		//We complete this job when we've satisfied certain conditions.
		if ( ((Boolean)Globals.getJobProperty("SchoolGirlsConfessed")).booleanValue() == true)
		{
			//Also, we've got to be nearby the priest at the moment.
			if (Vector2.getDistance(jobGiver.getPosition(),jobTaker.getPosition()) <= 15)
				return true;
		}
		return false;
	}

	public boolean jobIsFailed()
	{
		//This job is failed if we've taken too long to do it.
		if (System.nanoTime() - timeStarted >= 1000000000L)
			return true;
		return false;
	}

	public void completeJob()
	{
		super.completeJob();
	
		//A happy message from the priest.
		u.recieveMessage(jobGiver, "Thanks for helping me get those school girls to confess! Have some stuff!");
	}

	public void failJob()
	{
		super.failJob();

		//Show a dialog message because the priest is angry!
		u.recieveMessage(jobGiver, "Arg! Now I'll never hear their tantalizing stories!");
	}
}
//This would probably be called from the Conversation that the player has with the Priest.
if (player.hasFinishedJobType(PriestJob11.getClass()))
{
	Job priestJob = new PriestJob12();
	priestJob.assignJob(player);
}


//Now what can you do with your resources? Make items of course.
public abstract class CraftedItem extends Item
{
	int[] requiredResourceCounts;
	Resource[] requiredResources;

	//etc.
}

And I think you get the idea. Through doing this, people can really modularize absolutely anything and we can very quickly add a huge amount of stuff that you can do, and lots of quests. I wrote all those classes in only 20 minutes and you really could consider them fully functional, for the most part. This is what will make the sandbox game truly awesome; having countless numbers of resources, jobs, missions, and characters. All very quickly and easily added in.

Visual Style
I would like the visual style to have bright colors with a half-realistic or a cartoon look. Here are some examples of what kind of style it could have, depending on whether we choose 2D or 3D.

2D front: as in the original Harvest Moon on SNES (pics), but with higher resolution and more details.

2D isometric: as in Dofus (pics).

3D: as in The Legend of Zelda: Ocarina of Time (pics) and Twilight Princess (pics), but with more polygons and bigger textures.

Of course, we will need lots of skilled artists to be able to create anything even close to the quality of the above examples.

World
The world map should be large and have much variety (as in Ocarina of Time and Twilight Princess). There would need to be fields for farming, forests for gathering wood, mushrooms and hunting, rivers and coastlines for fishing and sailing, mountains for finding a rare flower on the top of a snowy mount top, and so on. Even forests (and other areas) could have different visual styles - a bright one with happy little bunnies, butterflies and fairies - and a dark one with wolves and monsters.

There should be towns which each have a distinct look and use - for example a fishing village on the coast with many fishers, and another village near the mountains with mining and blacksmiths. You could travel to different towns and sell what you have yourself produced, and buy what the craftsmen or farmers in that town have produces. Some items might be sold in only one town, or the price might be better (for example fishes are cheaper in a fishing village, so you could buy fish there cheap and sell it at a higher price in another town - if you can travel fast enough that the fish does not begin to rot).

It should be fun to just explore the world doing nothing in particular. The artists and map designers will have lots of work in accomplishing this.

Missions
We should think about many different kinds of missions, so that they player will every now and then have something special to do, about once or twice an hour. One example: When wandering in a dark forest, you find a small hut where a witch is cooking a magic potion (think about Zelda III). She asks you to find some special mushrooms and bring them to her, so that she can finish the potion. She gives you some directions that where those mushrooms are growing. Then when you find the mushrooms and bring some back to her, she will give you some of the potion, which in turn helps you in some other way. For example the potion makes your chicken produce more eggs and your cows more milk, or if you pour it on ground a fountain will show up there, and then you don’t need to draw water from a well far away.

Jobs
Likewise we should think about many different kinds of jobs. This is what the players will be doing most of the time, so it should be rewarding in the short term (every minute or two - like milking a cow) and in the long term (every some hours - like harvesting ripe crops). Lots of effort should be spent in making the jobs fun. For examples of jobs, think about the different things you can do in Harvest Moon - growing crops, milking cows, growing chicken, gathering wood, building a house.

Distributing the work among developers should be quite easy, for example one developer may concentrate on one job or mission, until it is finished and fun.

PS: What’s the point in giving code examples this early in development cycle? IMO, it’s better to think about the implementation details when implementing a particular feature, because that’s when you have the most knowledge about how it should be implemented.

Hey I am a big fan of all that has been put forward for the Sandbox game so far and here is my attempt to add something:

It is not as polished as your ideas but I hope there is at least something here that will spark an idea…

Multiplayer
Adding the full MMO experience where everyone “logs in” to the same persistent game world sounds awesome but it would probably be very difficult to get the balance right when so many players have an influence on the world.

Assuming most of the game world is a “local copy” {Offline, Singleplayer}, we could also have some controlled {Online, multiplayer} environments where many people could interact

Such controlled environments might be:

  1. The trading area: Many people can meet in some smaller area where they can trade rare items which may have never appearered in their own game world. Perhaps these items will be of more use to another person than themselves etc…

  2. Sports/ Racing tracks: Race the car that you have been slowly putting together using the money from your dayjob/ crops. Play tennis/ ping pong/ football…

Also in addition to these controlled environments we could enable multiplayer via controlled numbers of people visiting other peoples game world. If I was a car salesman or something I could visit other peoples game world in order to sell them car parts etc…

Eating and Sleeping
The player’s character should eat, drink and sleep regularly (as in Harvest Moon). Otherwise the character will lose stamina and begin to faint and move slowly. This means that you need to think about what you can do during one day (in game time). Also, if you plan on doing a long exploration travel into the wilderness, you either need to bring enough food and water with you, or you will need to find them in the wilderness. If you anyways wander far away and run out of food, then it might happen that the player’s character faints totally, and next you will find yourself in the inn of some nearby town, and the innkeeper will tell that a traveler or forest gnomes found you unconscious and brought you here. As a penalty you will need to pay the expenses for staying at the inn, and you also lost a couple days game time while you were unconscious.

Time and Seasons
We want the game time to flow faster than real time, so that the players would experience variety of time and season. One day in game time could be around 30 minutes in real time. You can quick forward the time by sleeping some hours. One year has four seasons - spring, summer, autumn and winter. One season has 15-30 days.

The game time may flow at a different speed for each player, so if there is some multiplayer interaction for example in towns, you may see only those players whose are roughly in the same game time. For example, if in your game it is summer and daytime, you may see those players in whose game it is also summer and daytime. You can not see players who are in the winter/autumn/spring, nor players who are at nighttime.

Cooperative Multiplayer
It would be nice if you could have multiple players working in the same house/farm. Later on in the game, you might also hire some servants (human/NPC) to help maintain your farm. You might even have a wife (human/NPC) and children (NPC) working in the same farm. All of them will eat the food that the farm produces (if there is no food, they will starve or leave you, or you need to buy more food). For the servants you also need to pay money. And as for children, after a couple of years (maybe 3-5 years in game time) they will grow up and move away from home.

For visual style…

UGC customized textures. Easy enough to give the user guide lines on where to paint things if they wished to change the colour of their door/chair/window etc… Just give them a blank sheet with dotted lines that mimic the part’s 3D texture unwrap, it’ll be like colouring those books for kids. Would offer another level of ownership if they could customized their own home/car etc the way they want it. But it has to be small file size and dimensions depending on the level of detail required by the item. Or simply offer colour customization as a start for different parts of the house etc.

3D would allow for this, 2D would mean they pixel art themselves within the guide lines.

But this opens up a can of worms if inappropriate images are used and upload to share is allowed.

My feeling is that, for this type of game, the visual presentation is closely related to the gameplay (more so than for the other projects being proposed).

Would it make sense to ask our “Art Team” to mock up some screenshots of how the game might look? (Nothing too time-consuming, just a five-minute sketch…) I think that that would clarify a lot of people’s ideas.

What d’ya think?
Simon

Yes, that would be very useful.

The sample code was important to demonstrate the modularity of the game as well as the general structure it would take. In my opinion this thread is not only to get ideas down but also to show that we have an idea that is doable. That code shows how easy it would be to create many different tasks and jobs, and how many developers could do them separately with very little trouble.

Also, thanks for all the input you guys, but I think at this point you’re being too ambitious. Simultaneous multiplayer should not even be considered at this point, in my opinion, due to its very high complexity. Similarly, we should not be focusing on having mountains / forests / desert / fishing villages / etc yet. That stuff goes without saying - we want the world to be massive and immersive - but that stuff also is way down the road. At this point we should only be thinking about the main farm / house and the village, and maybe a single wilderness area. Once we’ve got those all solid and we have an adaptable enough framework using them, we can start to add in the massive extra content.

And I don’t think that the ideas you’re presenting (or some of them anyway) are far enough removed from Harvest Moon. The player shouldn’t be required to farm. Instead, their house should simply have some land around it, and they can use it for a variety of uses (farming, horse racing, storing animals they’ve caught, etc. etc.) to the point that farming isn’t even a suggestion, it’s just something that’s possible. As it stands, seems like we’re just trying to make a better Harvest Moon, which is an unattainable goal seeing as those games are made by large teams of professionals working 40 hours a week. I think we need to focus a lot more on modularity, and keep our ideas towards how the code can be designed in order to fit the possibility of having a farm, and more.

Talking about how the game’s clock works and what graphics technology we’re using is something we should be talking about at this moment, though, because regardless of what job you’re doing or how the game is organized we’re going to be using the same framework in that regard. So let’s keep focused on those sort of universal specifications, rather than the more specific ones mentioned above.

Graphics Display
May I suggest the same idea as animal crossing? The landscape revolves over what seems a cylinder, giving the impression of being on some small planet. Also, you can see the horizon with this. What I believe would be a better idea is to elongate the cylinder the landscape spins over, so that you can look farther into the distance before things disappear beneath the ‘horizon’. This allows for a larger field of view and gives an indication of day/night with the position of sun/moon. The camera would be fixed, situated directly south and above the player similar to Animal Crossing also, although much higher to allow a larger scape.

The style should be minimalist. This does favour to the lack of an ensemble of artists. Nothing too highly detailed, but simple cartoon 2d (maybe 3d) sprites, similar to a SNES game like Harvest Moon.

World Design
I think large open spaces would do well to fit this idea. Give players the illusion of a vast world. Open areas could be used as space to build more fields (if cleaned up), expand farms, etc… We should make the world somewhat of an art of it’s own, giving to the explorer types the search for secret, out of the way areas for unique items.

Also, the world should open/close and change in certain areas depending on season, for example, the lake which was used for fishing was unswimmable during the warm seasons now becomes a viable area to explore in the winter to ice fish in the middle of it; the large plain that was used to collect flowers/herbs from in the Summer becomes flooded in the Fall; a mountain slide causes a certain area to be blocked off, but opens up access to a cave, etc… I believe this idea would fit well with the idea of modularity, as new content can be connected via the main world map as we see fit.

I’m totally in agreement with this. Keep it simple but with the big plans in mind. It would be nice however to be able to share the experience in some way early on - maybe just being able to see each other’s creations/stats/experience would be enough.

Really impressed with where this is going. Nice work!

Kev

Games like those you mention, are produced by teams of a few dozen people, working fulltime for 2-3 years.

It would be just silly to think a ‘community project’ could achieve something like that.

I think a realistic goal for the sandbox would be to have a 128x128 tile grid, where everything happens.

Anything bigger and you start getting into trouble with performance in 3D. Terrain algorithms and what not is just a can of worms, and major showstoppers until they finally work. It’s way too easy to get sidetracked into making everything run ‘fast enough’ or even ‘as fast as possible’, restricting a lot of freedom in the engine, and overall just wasting braincycles. Just bruteforce everything and keep the world as small as possible, until you actually got timething to show.

My thoughts exactly.

However, it makes sense to me to use 2D. It’ll just be a lot easier in the end. I don’t think we should be spending all our time on 3D, instead our time should be spent on the unique nature of our game - the sandbox you-can-do-anything element.

I think that’s a good idea, Riven, to just make one single area where you can do lots and lots of stuff, then expand from that.

I was thinking about starting an Animal Crossing clone over xmas (largely because Nintendo seem to have completely given up on Animal Crossing - the gamecube version was great but the recent DS and Wii versions have been little more than hasty ports. It’s frustrating to see a series with so much potential just stagnate).

Anyway, I gave up on the idea since I decided it was too much for a single person project - if there’s a community project starting up I’d be very interested (as long as it’s still achievable and not ridiculously over ambitious).

2d vs. 3d was one thing I was really struggling with. In a way 3d makes more sense because it means less artwork (characters can be created by bolting together model parts, swapping out textures etc. and all using the same set of animations) whereas in 2d it would mean drawing and animating lots of different angles and animations. But 3d does make the programming side much more complicated (and IMHO, unless you have really good 3d models and animations it never looks as good as hand-drawn 2d art).

Alternative approaches are:

  1. Having the art done as 3d but rendering them to sprites at build time (keeps in-game rendering simpler but tends to look a little soulless).
  2. Going for a 2d/3d hybrid (like keeping the environment in 3d but having the characters as 2d sprites in it, or vice versa).
  3. Deliberately going for a low-res pixely style (like Frostwinds.

A lot of this depends on how likely we think it would be to get some proper artists on board. My experience is that finding good artists isn’t that hard, but usually they’ll get bored after making a tiny handful of sprites or models and wander off never to be seen again.

My gut feeling right now would be to go for something pixel-y so we can focus on the gameplay and not the graphics. Perhaps with an isometric viewpoint so things don’t look too dated. The other advantage of this is that switching to full res “proper” 2d graphics should we find the art talent might not be too painful.

Edit: additional, oddball idea - perhaps something with voxels? Might work for objects so we don’t have to draw them from every angle. OTOH it might make content creation even harder, which would be very bad.

I’ll be back with gameplay thoughts later when I’ve had a bit of time to think.

Frostwind graphics are just awesomely cool. Go that way, pwease! :slight_smile:

EDIT: Though I suppose they’re unlikely to impress anyone. Need to decide on the goals of the project - just a cool game, or to try and inspire non-Java types.

Kev

That’s pretty much my current feelings too. I’m leaning towards thinking that a pixely style would leave us lots more time to just work on the gameplay and actually Get Things Done. I’m also a great believer that consistent graphics (like frostwinds) looks much better than patchwork, inconsistent graphics (which you tend to get in most open source games where lots of artists come and go, each with their own styles). Plus games like Cave Story and Habbo Hotel show that there’s plenty of love for low-res art if the game is good.

If I had a good artist that I knew would be able to produce the volume of work needed and would be guaranteed to stick around for a year+ that the project required then I’d go with 3d or high-res 2d. As is, I think we need to use our strengths (lots of programmers) to offset our weaknesses (little or no artists). To me this implies pixel graphics with deep gameplay.

Another option for the art department would be to restrict the models to be composed by ‘primitives’, like spheres, cilinders, cubes, etc.

Ofcourse this is dull, until you can transform/morph them, and put them into their own little scenegraph, like any other 3D model. You can just wrap the textures over the shapes (with predefined texcoords). Another thing is that you can easily LOD the geometry, and trivial to hook up to a physics engine, but that’s a topic we shouldn’t worry about yet.

Adding a model editor with keyframe animation would be trivial, and could even be embedded in the game.

It would be ‘enough’ to get things off the ground, which is where the focus should be, IMHO.

Interesting idea, but I worry that it’d end up looking very sterile and soul-less - Second Life does it’s modeling like this and as a result everything looks bland and uninteresting. Making something good usually requires a lot of primitives and ends up wasting a lot of polys, dragging the performance down (again, see Second Life).

Embedding an animation editor into the game is intruiging though - I wonder if we could make characters out of multiple sprites attached to an animation (like large boss characters in 16bit games).
Pros:

  • Don’t have to animate every character from multiple angles
  • Allows for easier character customisation by swapping out different sprites.
  • Can allow users to make their own simple animations
  • ?
    Cons:
  • Animators have to use our tool rather than what they’re familiar with
  • ?

I’m not sure that I’d say that writing it would be “trivial”, but it’d certainly be possible as part of a larger project.

You can go paper mario style :wink:

I meant that it was good to use them as placeholders. Placeholders are important for moral, so you want to get to something that represents the final state of the game, with as little work as possible.

Eventually, we need artists, and those are (more?) likely to jump in when they see the game is fun already. People are more likely to put effort into something when they see the potential (thus, gameplay with animated mockup gfx).

I think it really all depends on whether or not there is a skilled artist on the team.

If we can get someone who can produce nice custom 2D tiles/ sprites such as this guy and Markus_Persson, or someone who can produce nice simple 3D models such as these low-poly models then that would be fantastic.

Otherwize I do think that having a specialized/ simplistic but unique style such as using CSG with primitives would be good for both standing out from the crowd and so that we can acctualy have some nice models/ sprites to play with.

And yes just using them as placeholders is a good idea too - the graphical style of the game may go through many iterations anyway. It feels like the graphical style is fairly detached from the acctual game although very important at the same time.