Doggins: A Point-and-Click Adventure!

Hi everyone,

I’m David, one half of the husband/wife team Brain&Brain. We’re working on our first game, Doggins, a LucasArts-style adventure game that takes you inside the dreams of a family dog—which in this case means defeating a diabolical squirrel and his henchman on the surface of the moon.

We’re shooting for an iPad release sometime in the spring, so we’re still in the early stages of art and engine creation. I’ve been using Corona for about a month now, and despite rising at 6 am to program, I’m enjoying every minute of it! :slight_smile:

The art is inspired by 50s sci-fi trends (think Disneyland ‘Tomorrowland’ posters), with hand-drawn animation. Here are a few images to give you an idea:

I’ll periodically update this post with images and coding thoughts, and you can also follow our progress at our blog: http://doggins.inbetweeners.us/

Thanks a lot!

  • David [import]uid: 149111 topic_id: 29685 reply_id: 329685[/import]

Looks awesome! Can’t wait! [import]uid: 8444 topic_id: 29685 reply_id: 119173[/import]

I agree with “soon daddy or already daddy” joe, this looks cool, very special art! [import]uid: 90610 topic_id: 29685 reply_id: 119174[/import]

Thanks, Joe and Dingo! We really appreciate your comments on the art. Hopefully we’ll have more of it to share soon!

With the launch of Brain&Brain, we’ve moved our development blog:
http://doggins.brain-and-brain.com

Thanks again! [import]uid: 149111 topic_id: 29685 reply_id: 119327[/import]

Sweet! Love the style. [import]uid: 11440 topic_id: 29685 reply_id: 120181[/import]

Thanks!

While I code the engine (I’ll give an update on that in my next post), Brooke has been hard at work on the art for the game.

Storyboards for the intro:

Walk cycle animation:

Doggins Walk Cycle (Pencil Test) from Brooke Condolora on Vimeo.

Concept painting:

You can read more about her process on her blog.

[import]uid: 149111 topic_id: 29685 reply_id: 120316[/import]

Art is just beautiful and the name “Doggins” is fabulous! [import]uid: 52491 topic_id: 29685 reply_id: 120441[/import]

Sweet! Love the style. [import]uid: 11440 topic_id: 29685 reply_id: 120181[/import]

Thanks!

While I code the engine (I’ll give an update on that in my next post), Brooke has been hard at work on the art for the game.

Storyboards for the intro:

Walk cycle animation:

Doggins Walk Cycle (Pencil Test) from Brooke Condolora on Vimeo.

Concept painting:

You can read more about her process on her blog.

[import]uid: 149111 topic_id: 29685 reply_id: 120316[/import]

Art is just beautiful and the name “Doggins” is fabulous! [import]uid: 52491 topic_id: 29685 reply_id: 120441[/import]

It’s been quite a while, but Doggins is still on the move. The game is nearing feature-complete status, and we’ve submitted it to the 2014 IGF. Here are a few current screenshots:

01-doggins.png

02-doggins.png

04-doggins.png

08-doggins.png

More information and behind-the-scenes images can be found at the Doggins development blog.

Creating an adventure game has been great fun, and Corona is one of the reasons it’s even possible for us. The engine has been created entirely from scratch, save for the occasional code snippet I’ve plugged in. As a lifelong player of LucasArts and Myst-style adventures, I had a reasonably clear idea of what functionality the engine needed, but it’s grown far bigger than the prototype I put together more than a year ago. Here’s a brief rundown of how the game works.

Actors, Props, and Rooms

Doggins is built on a theatre or film set metaphor, with each location (Room) containing a mix of Actors and set dressing (Props and Items). Props are typically pieces of set dressing that can be interacted with (such as the light chain in the screenshot above), while items are things that can be picked up (like the mustache) and placed in the Inventory (fourth screenshot). All actors, and most props and items, have their own LUA file which is loaded when the room is created. Actor files contain sprite sheets for the character, along with a host of member functions that control him (Move, Flip, Idle, Rest, etc.).

Storyboard

We make heavy use of the Storyboard API, using it for loading rooms, as well as for overlays, including the Inventory and items that are interacted with in a ‘close-up’ view. Once I was used to it, Storyboard provided a helpful framework for both implementing the game and understanding its organization. Each Room is a LUA file laid out similarly to the Scene Template provided by Corona: local variables are forward referenced at the top of the file and created in the enterScene event, willEnterScene is used to set the room up to appear as it was when the player last left it (turning the light on, for example), enterScene contains touch functions for interactive objects, and exitScene disposes of audio and performs other cleanup tasks.

I typically don’t use Storyboard’s built-in transition library, as the “fade” effect changes the alpha of all objects in a display group, allowing you to see through them. Instead I’ve created my own “fadeIn” and “fadeOut” functions which create a black rectangle  and adjust its opacity, better approximating a real fade. I do use Storyboard transitions for some item overlays, however.

Luna Engine

I’ve nicknamed the Doggins engine the “Luna” engine, as his lunar adventure is both his and our first. The engine is essentially a LUA file filled with functions that execute common in-game tasks. These functions are referenced via global variables in the Corona SDK main.lua file.

A typical bit of game scripting using these functions looks like this:

[lua]local function toExtForest ()

      fadeOut(“rooms.ext_forest”)

end

walkTo(-300, roomFloor, “walk”)

waitForPlayer(toExtForest)[/lua]

The walkTo function moves the character to a specific set of coordinates, using the “walk” animation and movement speed. waitForPlayer waits for the character to arrive at those coordinates, and then calls toExtForest. In that function, fadeOut is called, passing in the name of the next Storyboard scene to load when the fade is complete.

This allows me to write relatively readable code that can quickly be iterated on. I like to think that it’s at least a little bit like classic SCUMM code, but Ron Gilbert would probably disagree. :slight_smile:

Creating my own adventure game engine is something I never imagined I would do. It’s been a lot like playing an adventure game, actually: searching for clues, trying things that don’t work, scratching my head, and then feeling a surge of excitement when I finally realize the solution. Puzzle-solving and programming have a lot in common. Hopefully solving the game will be as rewarding for players as creating it was for the two of us at Brain&Brain.

Thanks for reading!

  • David

Looks awesome!

And thanks for sharing some of your experiences!

Looks really nice! Can’t wait to play it!

If you ever want to swap notes and discuss adventure engines, I will happily do so about our engine. It’s unoriginally named “Adventure Engine” and is currently powering our coming-soon game ( won’t link it here as I’m really not trying to plug it, this thread is about your game not ours ). It is also the upgraded engine to what we built for our previous 2 adventure games ( also won’t link here but easy to find if you want to see them )

@goddardc: Thank you!

@Glitch Games: I think I remember a Corona blog post you did about your engine, but I couldn’t find it. Maybe I’m inventing that? But yes, I’d love to hear a bit about your engine! I saw your git, and you have a LOT of interesting resources that I should dig through. If you want to start chatting, send me an e-mail at support(at)brain-and-brain.com! Thanks a lot!

  • David

This game looks neat, keep up the great work on it :slight_smile:

@Danny: Thanks! And thanks for the fantastic tool that makes this game possible!

@david - Yes we did, took me a while to find it too :-) http://www.coronalabs.com/blog/2012/10/11/faq-point-and-click-adventure-game-development-guest-post/

I’ll send an email now to say hi :slight_smile:

@Glitch Games: Ah, that’s the one! Really helpful post. Thanks!

Really glad it is! We keep meaning to actually blog more about what we’re doing but never find the time.

It’s been quite a while, but Doggins is still on the move. The game is nearing feature-complete status, and we’ve submitted it to the 2014 IGF. Here are a few current screenshots:

01-doggins.png

02-doggins.png

04-doggins.png

08-doggins.png

More information and behind-the-scenes images can be found at the Doggins development blog.

Creating an adventure game has been great fun, and Corona is one of the reasons it’s even possible for us. The engine has been created entirely from scratch, save for the occasional code snippet I’ve plugged in. As a lifelong player of LucasArts and Myst-style adventures, I had a reasonably clear idea of what functionality the engine needed, but it’s grown far bigger than the prototype I put together more than a year ago. Here’s a brief rundown of how the game works.

Actors, Props, and Rooms

Doggins is built on a theatre or film set metaphor, with each location (Room) containing a mix of Actors and set dressing (Props and Items). Props are typically pieces of set dressing that can be interacted with (such as the light chain in the screenshot above), while items are things that can be picked up (like the mustache) and placed in the Inventory (fourth screenshot). All actors, and most props and items, have their own LUA file which is loaded when the room is created. Actor files contain sprite sheets for the character, along with a host of member functions that control him (Move, Flip, Idle, Rest, etc.).

Storyboard

We make heavy use of the Storyboard API, using it for loading rooms, as well as for overlays, including the Inventory and items that are interacted with in a ‘close-up’ view. Once I was used to it, Storyboard provided a helpful framework for both implementing the game and understanding its organization. Each Room is a LUA file laid out similarly to the Scene Template provided by Corona: local variables are forward referenced at the top of the file and created in the enterScene event, willEnterScene is used to set the room up to appear as it was when the player last left it (turning the light on, for example), enterScene contains touch functions for interactive objects, and exitScene disposes of audio and performs other cleanup tasks.

I typically don’t use Storyboard’s built-in transition library, as the “fade” effect changes the alpha of all objects in a display group, allowing you to see through them. Instead I’ve created my own “fadeIn” and “fadeOut” functions which create a black rectangle  and adjust its opacity, better approximating a real fade. I do use Storyboard transitions for some item overlays, however.

Luna Engine

I’ve nicknamed the Doggins engine the “Luna” engine, as his lunar adventure is both his and our first. The engine is essentially a LUA file filled with functions that execute common in-game tasks. These functions are referenced via global variables in the Corona SDK main.lua file.

A typical bit of game scripting using these functions looks like this:

[lua]local function toExtForest ()

      fadeOut(“rooms.ext_forest”)

end

walkTo(-300, roomFloor, “walk”)

waitForPlayer(toExtForest)[/lua]

The walkTo function moves the character to a specific set of coordinates, using the “walk” animation and movement speed. waitForPlayer waits for the character to arrive at those coordinates, and then calls toExtForest. In that function, fadeOut is called, passing in the name of the next Storyboard scene to load when the fade is complete.

This allows me to write relatively readable code that can quickly be iterated on. I like to think that it’s at least a little bit like classic SCUMM code, but Ron Gilbert would probably disagree. :slight_smile:

Creating my own adventure game engine is something I never imagined I would do. It’s been a lot like playing an adventure game, actually: searching for clues, trying things that don’t work, scratching my head, and then feeling a surge of excitement when I finally realize the solution. Puzzle-solving and programming have a lot in common. Hopefully solving the game will be as rewarding for players as creating it was for the two of us at Brain&Brain.

Thanks for reading!

  • David