New Internships for 2015

From February, the Studio will welcome several new interns in the Art and Development departments, which currently consist of one room each. Good news: both rooms are allowed access to the coffee reserve!

We’re currently looking for those lucky interns who’ll get to work on our not-so-top-secret adventure game, using the Unreal Engine, Blender, C++, Motion Capture, and lots of other fun things: they might get to do pixel art, vector art, iPhone development, concept art…

If you’re interested, and you think you have what it takes, contact us here.

Blender proportion editing issues with UV editing

I am using Blender to create the assets for the demo for DARK.

I had some issues with unwrapping the models, I accidentally changed a setting which caused strange options so I couldn’t drag points or edges separate in my unwrap, Blender kept taking the whole UV which was annoying and unpractical.

Solution

Where to disable the specific proportion editing.

Go to UV Editing on the top of your screen

1 - Copy

The UV Editing mode will show 2 screens which look something like this:

2 - Copy

On the bottom of the screen you see a drop down button with a dot in it.

3 - Copy

Finally you can Disable Proportional Editing here to unwrap your models by hand.

Concept art for Dark

This blogpost will be about the concept art in our new project “dark”. I’ll be explaining how and why I make the steps I make. Dark will be a Sci-fi so everything needs to be high-tech and futuristic, not only does it have to look like it but also should work like a futuristic product which is hard because I’m basically making inventions for a game.

When I make sci-fi art I like to get a focus on details and functionality, functionality is the key to creating things players will believe in. The starting technique I use is either a thumbnail or making silhouettes, sketch really fast a lot of different silhouettes till the silhouette gives the feeling you want (evil, scary, good). For example a bad guy needs to look intimidating, if the silhouette looks intimidating you’re on the right track, since a silhouette is a very abstract shape your creative mind starts imagining things like shapes and objects and will help you being more creative! But this mainly works with characters.

I like to put on some music that is related to the universe of the game, like a soundtrack from Star-wars, 2001: a space odyssey or Dune to get in the mood.

So here are some thumbnails I made:
spaceships

Once you believe you have enough sketches, pick the one you like most and see if you can change things, here is the one that I picked:
spaceship1
And then, improvise !
spaceship2

and that’s how I make my concept art.

Spaceships and meatballs

Dear Monkeys,

we’re currently putting the final touches to the art of Ad Astra, our upcoming iPad release. We then will have to fix all the nasty bugs that always hide in code before we bring our shiny new game to the Apple review team. It’s turning out beautiful, as it’s been crafted out of bananas, love and effort (with more effort than bananas).

 

As soon as Ad Astra is on its way to Apple, we’ll pour all our heart into DARK, a game about teenagers in a space station who build robots, cook food and serve coffee. We’ll have space police ships, space pasta, space trains, and a huge hangar to have even more spacious space. We’ll also have some evil pirates parking in there!

Efficiently saving animating time

I am working on the credits for Ad-Astra which includes animations, since the credits screen is interactive. I am using Adobe Flash CS6. As a general rule,  you want to animate the fastest and most efficient way possible.

The animations include spaceship that expand if you click on them. We wanted to make them look like the angle of the ship changes, so I used a way of making it easier to create this effect.

ship1 ship2

As you can see there are missing frames between those two pictures. I decided not to make all the frames by hand but instead using smoke/clouds to create the effect of a space ship that opens itself, as you can see here:

ship3ship4

frame 3frame4

 

 

Unit Testing and us

What is Unit Testing?

Unit Testing is a practice that allows the programmers to test part of the software separately, as “units”. For example, it’s common to consider a class as a valid unit, where the methods will have to pass several tests to consider the class “correct”.

It is a kind of black box testing, as it doesn’t give you information on how the programming is done inside, but  about the behaviour of the programming. It is particularly useful on the long term, since it allows you to automatically verify that, weeks or months after you initially defined a part of the software, it still behaves as it initially was supposed to, even if multiple persons have modified parts of the code inside the unit.

Unit Testing’s benefits come at an initial cost, since instead of a loose definition and “let’s find the requirements as we go” approach, you need to think and build the requirements before you even start building the units themselves. However, as time passes, the amount of test code that exists to check the logic of the program increases, ensuring greater confidence in the value of the code base.

How does it work at Astute Monkey?

The tools

Astute Monkey Studio currently makes use of XCTest and OCMock, the latter installed manually, since all our games are pure Objective-C. In the future, since we are moving towards Unreal Engine, we intend to use Automation, unless another tool seems more appropriate by the time our next project gets in full swing.

The situation

Let’s take an example to put things in situation. Let’s say you have a model for an creature that can alternate between five states (asleep, woken, agressive, afraid and dying) depending on two factors, its  internal health and the proximity of the player character.

Unit Testing should verify that those behaviours are consistent with the internal state of the object. For example, the creature should not be able to fall asleep if it’s dying or afraid. It cannot attack even if the player is close if it is afraid, or dying, as it should whimper and try to hide. It might fall asleep if it’s agressive if the player throws a sleep bomb, or if it’s just woken.

If a programmer later on decides to add a new state, “eating coconuts”, in which situation the creature is so absorbed that it cannot notice the player character, and while copy-pasting code accidentally  turns the creature into a bloodthirsty monster that always attacks, even when dying, the unit tests will detect the problem at the next run. Therefore, the bug will not even make it past the next day!

A blogpost by Jason Pengel

Proofreading and corrections by GEM

Internship Offer – Software development

EDIT: Position filled.

Hello world of learning developers!

We are currently looking for a stagiaire interested in game programming (C++), hardware programming (C), as well as basic PHP. Stage should be 5 months starting in September. We are particularly looking for a MediaCollege Amsterdam student, but obviously anyone with the skills and drive is welcome.

We don’t pay, the work hours are insane, and for some reason stagiaires actually come to work during the holidays, and for as many stages as they can. Go figure. I guess people enjoy the company.

What do we have? Beanbags, tosti maker, coffee, tea, lots of interesting work to be done, and the coolest monkeys west of the Ij.

If you want to apply, please use the form.

My experience with Core Data and iCloud

I have been working with coredata and icloud and it’s very interesting because each instance of your app, on each device connected to an iCloud account, maintains its own local core data store file. when data changes locally, Core Data writes change log files to you app’s default ubiquity container.
the log files that have been changed are uploaded to icloud and downloaded to each of a users’s other devices
when you use icloud you must take care when designing the app launch order because there are many thing you must consider for example
1. The user may not have iCloud available on his device
Image
2. The user might switch to another account
Image
3. You might want to use a fallback store as “iCloudstore” to store the data when iCloud is turned of
With core data you can manage your data with the Core Data Model Editor, it provides graphical and table-based tools to edit your data and also the relationships with each other.
The editor is made up of two components
1. The components area (left side)
2. The detail area (right side)
Image
The information on the left side is are the components for example entities, fetch requests and configurations.
also the configurations are important to use so you can decide which data goes in each store, if you don’t give it a name you wil have to use “PF_DEFAULT_CONFIGURATION_NAME” when creating a persistentStore. the problem i had was that i used “Default” as name, because in the editor it is shows default as name.
on the right side you have the details where you can determine which type you want for each entity, for example if you have a Person entity with a name as attribute you can give it a String as type.

 

 

Over the last few months, I’ve been toying around automatisation of the Studio.

Several ideas seem particularly interesting to me.

 

Timetracker

Here in Holland, people carry quite a few NFC cards, ranging from football stadium admittance cards to the extremely common OV-Chipcard used for public transportation systems, like buses, trains, and metros.  I bought parts to create a system to help employees log their hours  (but I don’t quite have the time to assemble it, sadly). The way it would work is pretty simple: first, an administrator registers the ID of each (unique ID) card associated with a particular person in a company database (people could then add whatever card they wish, so to be able to use  their football card on a day they left the OV at home, etc), then the person beeps one of these cards on the sensor when they come in and when they leave. At closing hour or opening hour, the presence flag is automatically reset, so overtime should be done by hand, I expect. It seems a cool system to have, on an opt-in basis (people who really really want to fill in Excel sheets are free to do so)…

Ego

Along the same lines of “how to make our life easier”, I’ve had basic automation running on my computer since I own a computer, first under Linux (bash scripts, voice synthesis, voice recognition…) then under Mac (Automator & alii). While Siri is mind-blowing (especially the US version), it does make the inner geek in us itchy to not be able to tinker with it… So, when I saw Jasper, which is basically a more advanced version of technology I used on Linux when I was in engineering school, I thought this would be absolutely awesome to integrate. However, this was just the beginning of my thought-trip. I’m now considering the use of much more fun technologies to virtualise reality and connect virtual information to the real world!

Using the Adobe Flash sprite sheet generator for .plist files

I have worked a lot with Adobe Flash during my internship at Astute Monkey Studio so far. But since we are making the games for iPhone and iPad we need .plist files for the animation sprite sheets.

How to do this:

Generating the sprite sheet

A way to create a sprite sheet is to right-click over the (movie clip) symbol listed in the Library panel and select Generate Sprite Sheet from the pop-up menu.

Where to click to generate a sprite sheet.

The Generate Sprite Sheet will open in its own panel­.

Generate sprite sheet window

Incorporating the sprite sheet dynamically in a game

To prepare the sprite sheet for incorporation in a game, select the appropriate data format (see pictures below). The data format describes the xy, width, height and other info for each frame of animation in the sprite sheet. The developer uses this data to produce an animation from the sprite sheet for whatever framework they are using. (we use cocos2D v3)

cocos2D v3

If you click Export now you will get 2 files. The .PNG of the animation and the .plist file.