Video Game Developer
554 stories
·
16 followers

Double Fine picks up Ooblets, a real cute game about farming and creature collecting

1 Share

Ooblets... Ooblets. Where do I know that name from? Ah, right! It was listed among Patrick's top 42 indie games to watch for in 2017 where he alluringly summed it up as "Pokémon meets Harvest Moon."

In the game, you'll raise and battle creatures. You'll have a house to expand and a town to explore, with folks to chat up. You'll even be able to run a shop, if you'd like. And best of all, there's lots of dancing.

It all looks charming as heck, and I'm not the only one who thinks so: Double Fine is now publishing Ooblets. The game is looking at a 2018 release, and it's primed to launch on PC and Xbox One.

"We're going to keep doing what we've been doing, but we now have a lot more support from people who know what they're doing, so we'll hopefully be avoiding a lot of dumb mistakes we were otherwise planning on making," said creator Rebecca Cordingley. "More generally, we're now a bit less afraid of failure since so many people believe in us. We're so thankful to have you all alongside us on this weird journey."

Our biggest news yet [Ooblets]

Double Fine picks up Ooblets, a real cute game about farming and creature collecting screenshot

Read the whole story
tingham
2 days ago
reply
Cary, NC
Share this story
Delete

OmniOutliner Essentials

1 Share

Omni introduces OmniOutliner Essentials:

We didn’t want to just reach out to our existing audience; we wanted to introduce the joys and benefits of outlining to a much larger audience. We decided that meant two things: we needed to make the app much simpler, and we needed to make it much more affordable.

It’s in public preview now. You can check it out.

I’ve been the junior developer on the OmniOutliner team for a couple years, and it’s a joy to work on an app that I’ve loved for years as a user. We’re not finished yet with this release, but I’m very happy with how it’s turning out.

PS I like that Ken mentions MORE in the blog post:

We shipped the first beta of OmniOutliner while Mac OS X was still in beta, and doing so introduced us to a passionate community of outliners who had been using great outlining tools like MORE for over a decade.

MORE was by Living Videotext, which was Dave Winer’s company. Later I went to work at Dave’s company UserLand Software, which also included an outliner in its app Frontier, which I worked on. So there is a sort-of family tree connection from OmniOutliner back to MORE.

Read the whole story
tingham
2 days ago
reply
Cary, NC
Share this story
Delete

What little kids think of lifeguards

1 Comment

We had extended family over for a visit, and we decided to take everybody to the public swimming pool. While waiting in line, the kids (ages 4 through 7) somehow got onto the topic of lifeguards.

Six-year-old: "I hate lifeguards. Whenever you do something fun, they tell you to stop."

Four-year-old: "I hate lifeguards, too. They made me stop hopping. But I didn't fall down! When I grow up, I want to be a lifeguard, so I can yell at people."

Read the whole story
tingham
4 days ago
reply
mhm.
Cary, NC
Share this story
Delete

On Creating Tools

1 Share

When I started coding my own engine and game, one of my constraints was that I wasn’t going to write an editor for whatever game I made. This was mostly a time saving constraint. Good tools take time, as I certainly learned while making console games. Often the editor tools to go with a new system took as much time to write and debug as the system itself.

However, as I work on a new game, I find that I need an editor for some things. I need to be able to place objects, make paths, and edit properties. Which is potentially a huge project unto itself. So I’ve been looking for ways to write such a tool with minimal code. More immediately, I’ve been working on some procedural generation code for terrain, but I want to be able to edit the generation properties and see results immediately, instead of changing parameters, running the code to see a result, quitting the program, and repeating over and over.

Also important, is the need to not waste time on user interface for code that is under-going development. If I add a parameter to the terrain generation code, then decide I don’t need it, I shouldn’t be spending time adding a new button or number edit field on some UI. This means some sort of automatic user interface.

So what I need is an automatic property page style dialog that uses type reflection to determine field names, types, and values.

Type Reflection

The idea of reflection is that the code that’s running knows about the properties of itself as it’s running. Given some code that defines some data and the functions that operate on that data, the code can find out and use names, types, and all sorts of other useful information about itself. Strangely, the engine sort of has this functionality, but it wasn’t built for this purpose. It just needed some extra glue to make it work.

Serialization

What the engine does have is a very flexible serialization system. A single function is created to read and write data to and from disc. It can operate in binary mode or text mode. Text mode is a bit fancy. I wrote it to be able to edit data (since I had no editor) in a human readable way. It looks somewhat like JSON, but I built it to look more like the C++ class that is used in code. For example, here’s an ImageBuffer (that’s called a texture in most engines…)

ImageBuffer editorSheet
{
	String _imageName = "Build/EditorSheet.png";
	Type _type = Rectangle;
	Usage _usage = Texture;
	Format _format = RGBA8;
	Flags _flags = Mipmaps;
	AddressMode _addressU = Clamp;
	AddressMode _addressV = Clamp;
	AddressMode _addressW = Clamp;
	FilterMode _filterMode = Linear;
}

The C++ that defines the ImageBuffer looks very similar.

class ImageBuffer 
{
protected:
	int32 _width;
	int32 _height;
	ImageType _type;
	Usage _usage;
	Format _format;
	Flags _flags;
	AddressMode _addressU;
	AddressMode _addressV;
	AddressMode _addressW;
	FilterMode _filterMode;
	System::String _imageName;
};

And serializing the image to and from disc looks like this:

bool ImageBuffer::Serialize(IO::Stream& stream)
{
	IO::Serializer s(stream);

	s.Serialize(_InternalField(_width));
	s.Serialize(_InternalField(_height));
	s.Serialize(_Field(_type));
	s.Serialize(_Field(_usage));
	s.Serialize(_Field(_format));
	s.Serialize(_Field(_flags));
	s.Serialize(_Field(_addressU));
	s.Serialize(_Field(_addressV));
	s.Serialize(_Field(_addressW));
	s.Serialize(_Field(_filterMode));
	s.Serialize(_Field(_imageName));

	PlatformSerialize(s);
	
	return true;
}

There’s some magic here. The stream of data could be text or binary, (or something else) and when the serializer is instantiated for that stream, an appropriate reader or writer is created. The _Field and _InternalField macros define what’s available to the text reader, and what isn’t. For example width and height come from the image, and aren’t user editable.

Nothing says that the serializer has to come from or go to disc. It could be to memory, or some other crazy system, like following object pointers for garbage collection. So by writing a new back end for the serializer, I get exactly what I need for reflection. The field names, types, values, and addresses are available. I even know which fields I can present visibly and which ones not to.

So with a tiny bit of extra code, I get object reflection without modifying any of my engine code. Amazing! Did I luck out or what? While the ImageBuffer example doesn’t show it, this system also works for user defined types, enums, flags, pointers, arrays, colors, type ids, etc.

The User Interface

Again, I’m lucky. In making Banished I wrote a UI system that has a lot of control types. So again I don’t have to write a ton of code or bring in a separate UI library.

The UI in the engine has edit boxes, number edits and spinners, combo boxes, list boxes, check boxes, scroll bars, windows, layout tools, sprites, text, etc. Another game may not have needed so many different controls. I’m not sure what I’d be doing for making this user interface otherwise.

Putting it Together

PropertyEditorSo all I really needed to do was write some code that would create a control for each specific type. Number edits for integers, a set of check boxes for flags, combo boxes for enums, etc. When the user changes the values in the controls, I’d just need to push the new value into the back end of my serializer and send the data back to the object using the Serialize function.

And since the serialization system is already built to do things like compile a PNG into a block compressed format ready for GPU use, when the values are changed in the propery editor, the same compilation occurs as if it were being loaded from disc.

Easy!

I say that it was easy, but it’s more that the new functionality wasn’t invasive to the existing engine. It was still a fairly sizeable bit of code and took a while to write properly.

The Property Editor

PropertyEditor2So without too much fuss, and zero engine modifications (just additional code), I have a property editor for any object in my engine. I can edit textures, sounds, or any new game object I add to the engine.

I have a few more editors to write. For example I don’t have a color picker. Right now I just type in a hex value like 0xFFCO80AB. But that shouldn’t be too bad to create in a day or so. And I probably need some resource editor that allows me to browse everything on disc.

I could also modify the serialization functions to provide some meta-data for the editor. For example minimum/maximum values for numbers, increments for spinners, read only fields, field groupings, etc. But this will require modifying every existing serialization function. All in good time.

This is a long way from a full featured editor, but it’s a start and it has a lot of possibilities. First is that I can edit all objects that I serialize without any additional code. It can also be used to do strange things, like editing the user interface properties of the property editor. And because it uses my own UI, in the future I could use it in game to select objects, see their properties, and change them for debugging purposes.

Awesome.

Read the whole story
tingham
4 days ago
reply
Cary, NC
Share this story
Delete

ZBrushCentral Highlights February 13-17

1 Share

Feb 13-17


Here are the top ZBrushCentral submissions for the past week! Make sure to vote for your favorites in the ZBrushAwards!


Quiana FacebookQuiana – Wasteland Stalker: character by ZBrushCentral member Alexei Peters.


MerMan FacebookMer Man: Masters of the Universe fan art by ZBrushCentral member Gregory Stoffel


KillingJoke FacebookThe Killing Joke: statue for DC Designer Series sculpted by David Giraud. Design by Brian Bolland


ZBuilder Lead InNew ZBuilder V2 plugin helps simplify the process for making human characters in ZBrush! Read the ZBrushCentral post for more info


Crowfather TwitterCrowfather: Darksiders 2 fan art by ZBrushCentral member Angad Singh.


TheDoctor TwitterThe Doctor: definitely make sure you check out more renders of this great sculpt by ZBrushCentral member Dirk Wachsmuth


Dragons 2 FacebookBeautifully detailed dragon creature concept by ZBrushCentral member Keita Okada


Thor 3 FacebookThor: character sculpted by ZBrushCentral member Bruno Tornisielo. Nice work!


Slinger FacebookGun Slinger: created by ZBrushCentral member Emre Ekmekci for Adam Skutt’s class. Concept by Ivo Nies. Click for a look at the full model!


SoloGirl TwitterFemale Han Solo cosplayer by ZBrushCentral member Xavier Dabrowski


Zombo FacebookEl Zombo: a collaboration between ZBrushCentral member Gurjeet Singh, Dave Wilkins and Chris Moffitt


 



Read the whole story
tingham
4 days ago
reply
Cary, NC
Share this story
Delete

MacRumors Giveaway: Win an Apple Pencil PencilCozy-S Combo Pack From Cozy Industries

1 Comment
For this week's giveaway, we've teamed up with Cozy Industries to offer MacRumors readers a chance to win a PencilCozy-S stylus cap for the Apple Pencil.

The PencilCozy-S, designed to attach to the end of an Apple Pencil, serves multiple purposes. It makes sure the Apple Pencil's end cap is never lost when charging, and it also serves as a dedicated stylus that can be used right alongside the tip of the Apple Pencil.


The band of the PencilCozy-S slides over the body of the Apple Pencil, while the cap portion fits onto the Apple Pencil cap, keeping the two pieces attached. It might seem counterintuitive to put a stylus cap on the Apple Pencil, but it can be used on any iOS device in any app, and is not limited to the iPad Pro. There's one other added bonus -- it prevents your Apple Pencil from rolling off of a flat surface.

According to Cozy Industries, the PencilCozy-S took 11 revisions to get the ideal texture for the best possible stylus experience. It's designed from a proprietary silicone blend that's meant to be supple enough for writing and drawing but durable enough to stand up to being tossed in a bag.

At $8.99, the PencilCozy-S is a solid deal, especially because it also ships with a rare earth magnet cap in case you lose your original cap, plus it has a LightningCozy that's designed to attach your Apple Pencil Lightning adapter to a Lightning cable so it's never lost.


We're giving away 25 PencilCozy-S accessories to MacRumors readers. To enter to win, use the Rafflecopter widget below and enter an email address. Email addresses will be used solely for contact purposes to reach the winner and send the prize. You can earn additional entries by subscribing to our weekly newsletter, subscribing to our YouTube channel, following us on Twitter, or visiting the MacRumors Facebook page.

Due to the complexities of international laws regarding giveaways, only U.S. residents who are 18 years of age or older are eligible to enter. To offer feedback or get more information on the giveaway restrictions, please refer to our Site Feedback section, as that is where discussion of the rules will be redirected.

a Rafflecopter giveaway
The contest will run from today (February 17) at 11:00 a.m. Pacific Time through 11:00 a.m. Pacific Time on February 24. The winners will be chosen randomly on February 24 and will be contacted by email. The winners will have 48 hours to respond and provide a shipping address before new winners are chosen.


Discuss this article in our forums

Read the whole story
tingham
7 days ago
reply
Norman Door.
Cary, NC
Share this story
Delete
Next Page of Stories