Tuesday, December 3, 2013

App Store Review Times by Shiny Development

Dave Verwer of Shiny Development has fashioned a net bot so as to trolls Twitter in support of tweets almost App Store re-evaluation time and maintains a running run of the mill of both iOS and Mac re-evaluation time. The results are continuously existing by the side of this website. The more frequent who donate, the better the data will be, so if you care for to donate, precisely tweet your re-evaluation instant using the #iosreviewtime or #macreviewtime hash tags like the instance tweet.

Monday, December 2, 2013

Blender 2.57 Objective-C Export Script

A only some days in the past, the Blender Foundation deposit not worth it the at the outset announce candidate of Blender 2.5. This announce unexpectedly broke compatibility with on the whole existing 2.5 python scripts, counting my Objective-C heading Export Script.

Tuesday, November 26, 2013

MacBook Air 11" as Dev Machine

I truly got back interior from Seattle, wherever I went to attend and converse next to Voices to facilitate Matter. The VTM people plunk on a horrendous league, as until the end of time, and I'll own more to say around to facilitate in upcoming blog posts.

WWDC Mothership Pilgrimage 2011

Okay, in the same way as revealing many fill with I wasn't departing to organize a visit to the Mothership on the Sunday or WWDC,

Appsterdam

You may well own been consideration a quantity of rumors and jokes around Twitter about something called "Appsterdam".

Bus Trip Update

Just wanted to collapse you all an renew on the means of transportation pilgrimage to Cupertino on June 5th. We had a tremendous fair of relevance. Approximately 300 fill with articulated an relevance,

Empty OpenGL ES Application Xcode 4 Template

Jacques De Schepper sent in an updated version of my old Empty OpenGL ES Application Template, updated to consume Xcode 4's completely revamped templating means. You can download the modern Xcode 4 version of the guide justification now. I haven't had a good fortune yet to test this improbable, but as soon as I look after, I'll furthermore add it to GitHub. Thanks, Jacques!

Monday, November 25, 2013

3D Game and Graphics Engines

One issue to facilitate I comprehend asked around a lot in life is whether you must consume a game or graphics engine as an alternative of learning OpenGL ES.

Pre-WWDC Pilgrimage 2011 Update

If you signed the relevance form, you must own acknowledged an e-mail revealing you how to reserve seats on the pilgrimage buses.

Sold Out

Okay, I'm truly around to head to bed, but wanted to give permission you know to facilitate we've officially sold improbable all four means of transportation trips representing the June 5 pilgrimage.

Pre-WWDC 2011 Pilgrimage Additional Buses

Okay, here's the deal people. We're demanding to discovery improbable from the means of transportation company come again?

Pre-WWDC Schedule Update

Lost during Translation: Harvard Geneticist Now Disowns Scheme To Clone Neanderthal Baby -- Evolution News

The Boston Herald assures us to facilitate the geneticist who yesteryear was advocating a project to clone a Neanderthal baby in piece of information not at all called representing such a issue, nor is he seeking a likely and "adventurous female human" to bear the spawn.

Saturday, November 23, 2013

Bus Update

Just to give permission you all know, we're down to eleven residual offered seats on the third and after everything else means of transportation, and they're around equally split amid morning and afternoon. If you missed getting a seat on the chief two buses,

A Few Seats Left

There are a few seats left for the afternoon trip to Cupertino on June 6th. If you're interested, go here.

As I write this, there are less than 15 seats, though, so if you want one, I suggest you hurry.

Thoughts on Unity3D

To the same extent I affirmed in my preceding pole on 3D engines, I'm departing to look after four blog posts giving my judgment on apiece of the four engines to facilitate I looked into using representing a project recently. Those four engines are Unity3D, Sio2, Ogre3D, and Cocos3D. I'm initial with Unity3D, which we selected representing solitary of our contemporary projects.

On Being Excellent to Each Other

Marcus Zarra has a somewhat depressing pole at the moment on the outstanding Cocoa is My Girlfriend blog. It's around the emancipation of The Daily. Because of all the secrecy around The Daily earlier to its endorsed launch, I think not a lot in life of fill with knew Marcus was not truly involved with it, but was in reality leading much of the development effort.

Update on UpdateConf

Just wanted to give permission you know to facilitate I'm speaking next to a further league. I'll be speaking next to the initial UpdateConf in Brighton, UK on September 5th.

Friday, November 22, 2013

Happenings and Prospects

I say sorry representing the comparative shortage of posts now since WWDC. That week in San Francisco until the end of time tends to backlog me pretty severely (I returned from WWDC next to inbox 1138 - and that's in the same way as expenses the return voyage answering e-mails),

Auto-Incrementing Build Numbers for Release Builds in Xcode

I consume the wonderful Test Flight to distribute builds. One issue to facilitate Test Flight is a little picky around is build figures. When you upload a build, it uses the build total to distinguish if you're uploading a replacement or a modern build.

Working for MartianCraft

During argument you missed my tweets earlier this week, MartianCraft is looking to add a a small number of developers.

Online Session Code for Big Objects (Plus a Warning)

During Chapter 9 of extra iPhone Development, we wrote a usual of classes to facilitate mimicked the behavior of GameKit's peer-to-peer connectivity, but representing regular interact contacts (GameKit's single factory with BlueTooth and native interact connections).

Sad Mac

Sad mac

I haven't had much stage representing blogging lately. I own around a half-dozen unfinished blog posts in my queue, but own been too diligent to varnish several of them.

Thursday, November 21, 2013

Respect & Shame

It's been fascinating bearing in mind how many fill with own responded to the death of Steve Jobs exactly the way I did. It's beyond doubt amazing how many fill with who not at all met the man feel not truly to facilitate the globe has lost a big cheese major but to facilitate they themselves own lost a alone.

Disappointing

So, like others, I was tempted to put pen to paper a apology of the iPhone 4S in the same way as all the pundits and naysayers came improbable after everything else week calling the iPhone 4S "disappointing". I'm glad I not at all found the stage. To the same extent it turns improbable the iPhone 4s doesn't need everybody to holder up representing it.

Long Live the King

Jeff Atwood of Coding Horror has an appealing pole at the moment around being a developer representing Apple's ecosystem. We'll leave aside representing promptly the piece of information to facilitate Jeff isn't and has not at all been an Apple developer and is, in piece of information, a strong promoter of Microsoft's developer stack. Despite to facilitate flaw, I typically benefit from recital Coding Horror.

CGAffineTransform Additions

To the same extent you probably know, Apple provides a bunch of functionality representing manipulating objects in 2D universe using CGAffineTransform. Oddly, Apple doesn't provide you with a way to extract the degree, transform, and rotation in sequence from a CGAffineTransform and they don't provide several shearing functionality next to all.

GLKit Examples

I've added three modern projects to my iOS OpenGL ES warehouse on GitHub. They are practically clean examples of how to consume GLKit and GLKBaseEffect. You can discovery them in the GLKit Stuff directory.

Wednesday, October 30, 2013

Objective-C 2.0 Compiler Directives

Steffen Itterheim has posted a really nice list of all the Objective-C 2.0 compiler directives along with examples of how to use them.

Nice!

Flash is Dead. No, Really this Time

It appears that Adobe is going to cease development of mobile Flash.

I'm not ordinarily one to gloat or dwell on I-told-you-sos, but I'm going to make an exception in this one instance. I took an awful lot of heat for those blog rants backin 2009 for saying things like

Comments Gone

I regret to enlighten you so as to I've had to completely disable annotations on the blog. I had to switch to moderation a while back since the spam detectors were failing to catch no matter which meaningful. Unfortunately, the rate of spam annotations has been accelerating recently to the meaning anywhere I simply don't allow the instant to search in support of the only some concrete and bona fide annotations in the known haystack of spam.

Brilliantly Simple Idea: the Treadmill Desk

Software development is not the easiest vocation for getting or staying in shape. For that matter, being part-owner of a relatively young business isn't either.

I've been steadily putting on weight and getting in worse shape since before the dot com boom. Since we started MartianCraft, I've had very few days off, and my average work day has been probably twelve hours, possibly longer. Every time I try and get into a routine of exercising, something happens: a client emergency, a deadline, a build, a new prospective client, a minor family emergency. When there's not enough hours in the day (and there never are), the exercise was always the first thing to get cut.

Treadmill Desk Update

I'm coming up on the end of my second week using my treadmill desk, albeit two relatively quiet work weeks thanks to the holidays. I haven't put together the plans yet for those who might be interested in building a similar one, but the desk does seem to be holding up well. It's still very sturdy and has been working great for me.

Speaking at MDevCon

I'm proud to publicly announce my first speaking opportunity of 2012. I'll be speaking at MDevCon in Amsterdam this year on March 10th. This will be my first trip to Amsterdam and I'm incredibly excited to have the opportunity. I'm so excited, actually, that I'll be staying in the city for several days after the conference to hang out in Appsterdam and visit. When I know exactly which days I'll be in the city, I'll let you know.

Blog Files

As my inbox can well attest this morning, the web server that hosted most of my blog files is gone. I moved all the blog files over to Github, but forgot to post about the new repository.

Unfortunately, I just don't have time to go back and update all the old links, but every bit of code that I've posted that's now missing, can be found at GitHub.

Old code repository at GitHub.

Sorry for the inconvenience.

Tuesday, October 29, 2013

How I Learned to Stop Worrying and Love the iBooks Author EULA

I've been debating whether to position almost the iBooks Author EULA or not. Modish wide-ranging, I've been difficult to pass up emotionally debated and controversial subjects at this point in support of the unpretentious detail so as to individuals discussions have a propensity to lunch up a batch of instant and often aren't very productive. My belief on iBooks Author and iBooks 2 is comparatively close to a little other authors I know. Because this is something that's draw near to and dear to my empathy, however, I be included it's worth a only some expressions. And with me, a only some expressions is mostly more than a only some.

Treadmill Desk Plans

I've been promising this for a while. I apologize for the delay, but it's been a hectic month and I wanted to write up instructions that were easy to follow. I also wanted to make sure my desk continued to be sturdy and usable before writing it up. Finally, I'm ready, and this post will detail how I built the treadmill desk I've been blogging and tweeting about for the last month.

PaintCode

I pulled out up a new-fangled app at present called PaintCode. It's embattled by the side of developers, and all drawing procedures are recorded as drawing code in support of OS X or iOS. This is a highlight already existing in Opacity, but the code generation seems to be the primary right mind in support of PaintCode as disparate to Opacity, which is a drawing train so as to will export could you repeat that? You've drawn to code.

WWDC

When an important person who reads this blog, you probably already know so as to WWDC tickets are on trade. I wouldn't expect them to be existing loan. Apple has taken a little step to slow down down the sales, such as implementing a developer membership requirement and a one-ticket-per-individual-member and five-ticket-per-organization limit on tickets, but I still expect them to set out fast (I've heard rumors they're sold not worth it, but the possession link still shows in support of me).

Monday, October 28, 2013

WWDC Pilgrimage is On

Well, even though I've categorical to sit not worth it the motor vehicle pilgrimage this time, my colleague Scott Knaster (who has ready the unkind product by arranging the buses in the past) has categorically he won't be deterred by my lack of participation, and he's leaving in advance with procedure to organize a motor vehicle trip up from the Moscone Center to the Apple Company Store in Cupertino , the sunlight hours beforehand WWDC starts.

Humane Rigging

I recently on the track watching the Blender Foundation Humane Rigging DVD by Nathan Vegdahl, and I'm almost halfway through it. The DVD¹ is notable, but it doesn't really allow no matter which to act with iOS or graphics indoctrination.

Sometimes, however, you attain amazing things in suspect spaces, and this is single of individual time.

MartianCraft WWDC Shirts

As in past years, the MartianCraft team will  be printing special T-shirts to wear and also some to give away at WWDC. This is what this year's shirt will look like:



Unfortunately, each time, the digit of frequent not good enough shirts way has increased substantially. Last time it became obvious so as to the demand has at the moment far exceeded the digit we possibly will endlessly hope to bring with us. When a upshot, we're making the shirts existing in support of an imperfect instant by the side of http://martiancraft.Myshopify.Com.

WWDC First Timer's Guide


I'm a little slow in getting this up this year, but given how popular it's been the past few years, I thought it was worth updating and re-posting my WWDC First Timer's Guide

Remember that WWDC is different every year, so don't take anything written here as gospel. Things changes every year, and I expect the first WWDC of the post-Jobs era will change things up a little, just as they've done every year. Hopefully these hints and suggestions will help some of you.

The Gospel of Treadmill

Since the treadmill desk conduct experiment I've been engaged in isn't unequivocally connected to iPhone Development, I've been difficult not to fill up this blog with posts almost it, but it has at the moment been several months and I accepted wisdom single keep up position on the field of study was in order.

Appsterdam WWDC HQ

I normally leave treatment of WWDC procedures to other blogs, but I accepted wisdom this was attractive an adequate amount of so as to its right its own position, especially prearranged the digit of frequencies who didn't progress tickets this time but still plot to be in San Francisco socializing.

Sunday, October 27, 2013

2012 WWDC T-Shirts

Well, pre-ordering of the WWDC MartianCraft T-Shirts in support of 2012 is at the moment stopped. We're leaving to leave the order form up until WWDC tops and act single final print run by the side of so as to meaning. After so as to, the 2012 shirt is leaving not worth it of production. We'll be back after that time (or maybe even sooner) with a new-fangled design, but this noteworthy single will be retired in support of fine.

WWDC 2012 Pilgrimage to Apple HQ

Just a reminder: Once again this time, nearby will be a motor vehicle pilgrimage to Cupertino on Sunday, June 10, which is the sunlight hours beforehand WWDC starts. While the morning motor vehicle has sold not worth it, nearby is still a little area on the afternoon buses. If you allow one view of visiting the Apple campus, this is the superlative way to set out if you don't allow a car.  Hell, it's probably the superlative way to set out even if you act allow a car. Bay Area traffic is nix fun, and we service large comfortable touring buses.

Pris

My MartianCraft commercial partner, stick up, at present released a new-fangled, very insincere camera app called Pris. It's existing on the App Store at this point, and you can read Rob's blog position introducing Pris' skin texture and his motivation in support of letters it at this point.

Friday, October 25, 2013

Irksome, but Nothing New

I woke up this morning to a friendly tweet from someone who noticed that another "developer" had taken one of my Github Projects and had put the app on the App Store for money.

Now, I license my source code very liberally.  Generally, using my stuff - even recompiling and releasing it unchanged - is allowable. Modish this holder, the source code headers require nothing except for so as to code redistribution include the copyright notice and license.

More on Wang Ting

I expected a comparatively on time response from AppStoreNotices@apple.Com with regards to the Tile Cutter infringement I blogged almost earlier at present. They've sent an e-mail to Wang Ting, the "developer" fond of taking apps inedible of GitHub and promotion them as his own creations. Apple has asked him to voluntarily take down TileCutter or provide evidence so as to he has the straight to broadcast the app.

An Introduction to SceneKit

One of the things that surprises most people when they first start graphics programming with OpenGL on the Mac or OpenGL ES on iOS is that, until very recently, there wasn't any Apple-provided libraries for loading or managing objects or scenes. You had to roll your own code for loading objects, doing skeletal animation, and managing all your objects.

Thursday, October 24, 2013

GIKPopoverBackgroundView

Gordon Hughes recently released his open source GIKPopoverBackgroundView, which allows you to customize the background of a popover view. Looks handy and well-designed.  You can find the source code on GitHub.

What are you waiting for? Go check it out.

Can you keep a secret?

You might allow noticed something of a need of posts at this point lately. There are a only some reasons behind so as to.

I'd like to tell you almost single of individuals reasons at present.

When a little of you know (or might allow surmised from my cryptic tweets), MartianCraft on track a Skunkworks project almost seven months in the past so as to we've been referring to internally as "Project Boo". It's been quite an undertaking by a comparatively big team. My delicate involvement, other than a only some small code charity, has mostly been to keep the wheels from falling inedible of our existing contracting commercial while the skunkworks team toils away, but I'm still incredibly proud of could you repeat that? We've fashioned. I allow been surprised on more than single occasion by how cool the Project Boo software is, and how amazing it looks.

Broken Links

I've been getting an awful lot of e-mails lately about the broken links on the blog. Unfortunately, there are too many of these e-mails for me to reply to them individually. Instead,  I thought I'd reiterate here that all files with broken links can be found on my GitHub page:

Sunday, October 20, 2013

Project and Presentation from CocoaConf San Jose

Yesterday, by the side of CocoaConf San Jose, I gave a jargon on SceneKit. This jargon was based on my earlier blog position on the field of study, but limited a little new-fangled supplies. The source code and the keynote in support of the presentation are existing on my GitHub story.

Saturday, October 19, 2013

WWDC First Timer's Guide 2013 Edition

Well, this year's WWDC declaration ended up being a little bittersweet in support of me, since a batch of frequent I'm used to since by the side of WWDC didn't progress tickets this time. For individuals of you who did, especially individuals of you attending in support of the at the outset instant, I've categorical to bring up to date my First Timer's Guide to WWDC.

Remember so as to WWDC is another each time, so don't take no matter which in black and white at this point as gospel. Things changes each time, and I expect this time so as to things will amend, precisely as they've ready each time. Hopefully these hints and suggestions will help a little of you.

Friday, October 18, 2013

What a Long Strange Trip

Modish 2009, Briefs began its long, remarkable journey to the App Store. It took a time of sitting in re-evaluation, changes to the App Store rules, and a complete re-envisioning requiring a ground-up rewrite, but by the side of midnight keep up night, Briefs opened its eyes and woke up from its coma.

It has taken a colossal amount of product to progress to this meaning. The version of Briefs that's at the moment existing on the App Store has taken nine months of practicing development to create. It had a heart team of seven frequent, but seventeen another developers and designers were unequivocally involved in its creation by the side of another points greater than the route of individuals nine months. Other than the design of Brief's icons, which was handled by the awe-inspiring individuals by the side of soothing Helm, we did everything in-house. We did both the interaction design and the graphic design. We did the development product. We did the upshot photography, the website and the promotional videos.

Monday, October 14, 2013

Update or Languish for iOS 7

I spent keep up week in San Francisco attending Apple's World Wide Developer Conference. I'm for eternity excited by the new-fangled stuff so as to Apple releases nearby. I use up so as to week both time blocked strongly inside the RDF.

The Turncoat Dev Diary

At MartianCraft, we've ready a batch of product greater than the onwards only some years under could you repeat that? Are called "no-publicity" clauses. That capital we can't jargon almost individuals projects or deposit them in our portfolio. Modish detail, on the whole of the really attractive product we did our at the outset pair years was ready so as to way. That was single of several reasons why, almost a time in the past, we chose to create a products division. By on the increase our own software, we're plus contents not worth it our portfolio with apps so as to we can be evidence for to prospective clients. Of route, that's not the simply right mind we categorical to send a letter to our own software, but the detail so as to we couldn't jargon almost our on the whole attractive projects was certainly a cause.

Origin of the Universe

Once we categorical to turn into a game, the after that mechanism we had to act was be included not worth it could you repeat that? Game we were leaving to turn into. That's a surprisingly unkind mechanism to act, not as it's fractious to come up to up with ideas, but as it's unkind to pick precisely single. We toyed with a only some another genres, but both stick up and I kept back appearance back to science fiction, so we categorical to run with so as to.

The Story Bible and Scrivener

After redeployment the at the outset Turncoat Dev Diary position days gone by, I expected a digit of questions from frequent almost could you repeat that? Software was featured in the screenshot of our Story Bible. The software we're using to send a letter to the Story Bible is Scrivener by Literature and Latte.

Turncoat Dev Diary: Life in the Turncoat Universe

Since much of the Turncoat Universe's history exists to provide the backstory in support of a mystery, I'm hesitant to say too much very definite almost it, but the whole time this succession of blog posts, I'll be conversation almost the process and the motivation so as to went into building our universe as well as the nuts and bolts of building the concrete game. For the earlier to turn into one good judgment, you'll need by the side of smallest amount a little context.

Turncoat Dev Diary: Finding a Smaller Game in the Backstory

After investing a batch of instant into Turncoat, we on track pre-production, with our at the outset task being to be included not worth it precisely could you repeat that? It was leaving to take to turn into the succession of games we had envisioned. We didn't set out too far down so as to road beforehand we realized it was leaving to take an awful batch of product and income. Too much product and too many income: Far more than we possibly will swing lacking outside funding.

Platform Decisions

Modish our original brainstorming in support of Turncoat, nearby wasn't really one deliberate almost which platform we were leaving to target. The iPad was leaving to be our at the outset priority: Our reference platform, if you will. We would plus boat on iPhone if our game procedure worked well on, or possibly will be adapted to, so as to device's less important screen. We'd look by the side of porting to the desktop or to Android procedure soon if we felt the response right it.

Saturday, October 12, 2013

Accessorizer 2.0 is out!

acc_saw_clock_icon_512_version14.png
Accessorizer 2.0
Accessorizer by Kevin Callahan is single my absolute favorite utilities, as I've mentioned beforehand. Well, at the moment, there's a new-fangled right mind to love it. Kevin precisely released 2.0 greater than the weekend. And there's notable news in support of individuals of you who allow bought prior versions: It's a free of charge upgrade.

Tuesday, October 1, 2013

Almost WWDC

wwdc-2010.pngWell, it's the Thursday or WWDC and, as until the end of time, I'm swamped yet super-excited. The Pre-WWDC Pilgrimage is all designed. If you articulated relevance, you must own acknowledged an e-mail with the details around how to salary if you would like to take the means of transportation.

Teaching Again.

banner.png

I'm coaching up with Julio Barros of E-String Technologies to clutch a three-day iPhone SDK indoctrination workshop in New York City the week bearing in mind WWDC. The lesson starts on Wednesday, June 16 and runs through Friday June 18. No preceding iPhone indoctrination experience is necessary, though a little preceding indoctrination understanding and a wide-ranging understanding of C-style language rules is recommended.

MartianCraft Away Team

red_shirt_tease.png
MartianCraft Away Team


This is a teaser photo of part of the MartianCraft T-shirt that Rob designed for WWDC. We've got a small assortment of these to give away at WWDC. We haven't yet figured out how we're going to decide who gets to be red-shirts on our Away Team, but we'll get it figured out before Monday, and hopefully it won't require you to embarrass yourself too badly.

Monday, September 30, 2013

WWDC 10 Update

Well, we're well into the support generation next to WWDC and it is, as until the end of time, amazing, exhilarating, exhausting and, for the most part of all, fun.

Unfortunately, there's not a heck of a lot in life to facilitate I can inform on. Other than the keynote yesteryear, which was heftily covered by both liveblogs and technical media. The iPhone 4 looks amazing. I haven't seen it myself, but I've talked to several fill with who own and exclusive of exception they truly jet larger than the it, especially the screen.

Announcing OpenGL ES 2.0 for iOS 4

Okay, it's to finish stage representing me to announce Super Secret Project B, which is a modern hardback I'm script on OpenGL ES 2.0 representing iPhone, iPad, and iPod stroke.

Yes, I know I held I wouldn't be script several books in 2010, but the pleasant people next to the Pragmatic Programmers approached me in the same way as I made to facilitate statement with an economically feasible way representing me to put pen to paper a hardback this day. I couldn't say rejection.

Sunday, September 29, 2013

Grand Slam!

Apple has set a new record for WWDC video avialability this year, getting them out not even a week after the event ended. Amazing.

WWDC 2010 Post Mortem

WWDC. The Dubdub.

If you've followed this blog for any length of time, you know Apple's annual developer conference is my absolute favorite week of the year, and it just seems to get better every year. For the days leading up to leaving for San Francisco, I'm like a kid on Christmas eve. I can't sleep from excitement and the time passes way too slowly.

Code As If…

Sorry for how slow things have been here lately; I'm still suffering from WWDC work backlog, plus I've been spending a lot of time on the new book. This is the first book I've tried to write while also doing full-time client work and it's taking a bit of a toll on me.

I've had a blog post floating around my head since writing Beginning iPhone Development that has never become completely formed. It's about how the process of writing about code has changed the way I write code. I think the thoughts are finally ready to congeal into solid form. So, here goes.

Modern ABI & No More @Synthesize

I haven't talked about one of my favorite new features of Xcode 4 and LLVM, because I wasn't sure of the NDA status. However, the cat's out of the bag now, so I feel like it's safe to mention. The iPhone Simulator in Xcode 4 now uses the Modern ABI (yet it's still correctly uses 32-bit datatypes!), so we can use synthesized instance variables in our iPhone applications and use the simulator. On top of that, if you choose to use LLVM instead of GCC, one of the (many) benefits you'll get is that @synthesize declaration is now assumed. If you don't need to specify anything on the @synthesize declaration (like a different setter or getter name) and your property isn't @dynamic, you can justleave it off. This feature isn't turned on by default (yet), but see Pilky's blog post for instructions on enabling this feature.

Synthesize by Default

So, in my previous post, I told you I was excited about the "synthesize by default" functionality that's now available in LLVM 1.5. And I am, very much so. But it turns out there's a caveat that tempers my excitement at the moment.

With synthesized iVars, we've had direct access to the underlying synthesized variable for a while now, so if you created a class like this:

Saturday, September 28, 2013

Pressure Sensitive iPad

One thing that I've wished the iPad had from the beginning was the ability to detect different levels of pressure, similar to a Wacom tablet. That would make it much more useful for things like sketching. I've heard from a few people that the hardware supports it, but I've been skeptical of those claims. How could a capacitative touch device detect pressure? But a few people I talked to at WWDC insisted it was possible with the hardware.

Thumb

I thought I had done a post on this at some point, but after Googling around, I guess I never did. There were a couple of Twitter discussions about the subject in the past few days, so I thought it was worth mentioning. You can get more in-depth detail about this subject by watching the two OpenGL ES videos from the 2009 Tech Talk World Tour Videos (iTunes link, requires logging in with iPhone SDK account).

Wednesday, September 25, 2013

OpenGL ES 2.0 Book Teaser

I've been making really respectable progress on the OpenGL ES 2.0 hardback representing Prags, and I'm really content with come again? I've complete so far. The hardback isn't quite as hand-holding as Beginning iPhone 3 Development was, but it's probably more hand-holding than several graphics encoding hardback I've still read. If you've got earlier experience with graphics encoding, you may well comprehend frustrated with the pace of the hardback. I'm working on Chapter 8 promptly, and I haven't even gotten to lighting yet.

On the iPhone 4 Reception Issue…

Until at the moment, I've held in reserve pretty much settle down on the iPhone 4 reception matter. Part of to facilitate was simply to facilitate I didn't own a phone until a week previously what time my pre-ordered phone to finish here. Part of it was truly to facilitate I'm crazy heads-down on the hardback and responsibility client handiwork justification promptly. And part of it is to facilitate I'm having breakdown deciding exactly come again? I feel around it. It feels to me like the matter is being overstated, but I doubt to facilitate fill with who are brutally impacted feel to facilitate way.

iPhone 4 Press Conference

Well, the iPhone 4 press league truly ended, and I notion I'd type up my judgment quickly or diving back into handiwork. Overall, the top effect is exactly come again? I notion they'd look after: Open luggage and refunds representing persons who would like them. Seems very like a trade event response to me.

On Swords, Perspective, and Spin…

Although I thought Apple started off a little too defensive yesterday, when you boil it down, I thought they did the right thing. If you're having a problem and a case can fix it, here, have a free case. If you already bought a case, they'll refund the money you paid for that case. If you bought an iPhone 4 and the problem keeps you from being able to use or enjoy your phone, they'll take it back, no restocking fee, no questions asked.

Tuesday, September 24, 2013

Those Were the Days…

The Computer History Museum has recently posted the original source code for MacPaint and QuickDraw! Apple has given them permission to publish them both, and they're well worth taking a look at if for no other reason than to realize just how good we programmers have it today.

Tuesday, September 17, 2013

Turncoat Dev Diary: Touch Controls are Hard… Let's go Shopping!

I haven't been making my "every week" blog post commitment for the last couple weeks. I apologize for that. There are few reasons on top of the ordinary work life busy-ness that have caused it.

First… well, touch controls are hard. I've got a partially written post exploring the use of touch controls for stealth games, but I haven't been able to hone in on something I'm 100% happy with. I've got something that I like better than any stealth-based iOS game I've found, but it's still nowhere near being shipworthy. Part of that is because this type of game grew up in the console world, where you have controllers like this:

Wednesday, September 4, 2013

Turncoat Dev Diary: Help! I'm Falling and I Can't Stand Up…


Just as I started trying to figure out how the game's touch controls should work, I  began to be really bothered by a couple of problems in the basic movement of my character. One of those things, I've mentioned before, is the funky camera accordioning in the arc right and arc left animations. Turns out, those issues were more than cosmetic; the stuttering camera combined with the fact that stopping isn't instantaneous made it virtually impossible to line up the character precisely as you stopped moving.

Wednesday, August 21, 2013

Turncoat Dev Diary: Prototyping Player Game Mechanics, Episode II


As I started working on the basics of movement, I decided that my prototyping model needed a little something extra. I want my character controller to support "physics bones", which are bones that aren't pre-animated, but instead are controlled by the physics engine. You might use physics bones if a character has a pony tail, for example, so that the pony tail moves naturally. If a character has an item hanging from their belt, you might put a physics bone on it to make the item bounce around as the character walks. You can also use physics bones to fake cloth and hair physics. The results aren't as good as you get from true physical simulations, but those are often too processor intensive to do in real time, especially on mobile devices. You can get surprisingly good results by faking more complex simulations using a number of constrained physics bones.

Monday, August 19, 2013

Turncoat Dev Diary: Prototyping Player Game Mechanics, Episode I

The first game mechanic that needs to be nailed down is player movement. This is the most important mechanic to get right because it's on the screen all the time. Up to this point, I've just been navigating the prototype map using the stock first person controller that Unity provides. It's time to move past that and figure out the actual player movement and controls for the game. I'm sure we'll be tweaking these right up until release, but we at least need to get to a good starting point created.

Thursday, August 15, 2013

Turncoat Dev Diary: Thinking About Characters

(This is part of a series. The first post in the series is here.)

The reason why our original Turncoat concept was going to cost so much to create is that the scope of
the concept was just massive. The squad of soldiers the story follows consists of thirty-four soldiers. They are stationed on an enormous starship with over eight thousand people on board and which is part of a battle group containing about fifty other ships. In addition to the squad, there are many other characters that play into the story, including the Admiral of the fleet and her staff, the ship's captain and bridge crew, the ship's chief medical officer and sick bay staff, the "regular" complement of shipboard marines, and several command officers stationed back at Earth. Then, there's the Seditionists.

There are a lot of fully developed characters required to tell that story and a lot more that would need to be on screen at times in order to make the universe feel as if it was fully populated. On board ships and on an overpopulated planet, space is tight. To convey a proper sense of claustrophobia, we need lots of characters.

Characters are expensive to create.

Characters are also really important to the type of games we want to make. A casual game relies more on the mechanics of the game to generate interest, but a cinematic game puts the story — and thus, the characters — front and center on more equal footing with the gameplay. But, a fully detailed, sculpted, rigged, and facially animatable character like the ones you see in AAA console games might take a single artist a full month to create. We toyed with several ideas for reducing the cost of creating all these characters, such as doing cut scenes with comic-book-like motion graphics instead of fully animated and lip-synched characters and using a lot of close-cropped shots but, in the end, we decided that we couldn't reduce the cost enough without hurting our vision of what the game should be.

When we decided to put the main story on the back burner and start working on the Turncoat Escape game, one of our guiding mandates was to keep the scope of the game down. Way down. That meant having only a single level at first. It also meant keeping the number of characters as small as we could while still making the game work.

That's not an easy mandate to stick to. Stories are about people. If you can get your audience to buy into your characters… to empathize with them and care about what happens to them, you can get those viewers to overlook a lot of other things. But you need that emotional attachment to the characters if your goal is to tell a story.

Or, to put it another way: "It’s the characters, stupid."

There's obviously one character in the Escape game that we just can't do without: the protagonist. The player has to be somebody in the game. There has to be somebody who needs to escape the facility.

In our earliest version of the original Turncoat story, we had one character, nicknamed "Rook", who we envisioned as a customizable character. The player would see events unfolding through this character's eyes, and the player would be able to choose what that character looked like. They could decide what Rook's real name was, whether Rook was male or female, and they could select from a range of skin tones and adjust facial and body proportions and hairstyle.

As the story evolved and grew in complexity, Rook morphed into a specific character with defined traits. I still liked the original idea, but it eventually became clear that the story needed us to know more about Rook.

I like games that let you decide what your character looks like, though. Certainly, there are times when it's important to control the narrative and specify exactly what the main character looks like. Hell, we did exactly that with Rook in order to make our original story work. But, there's also value in making a game welcoming. There's value in telling the player that they can be whoever they want to be in the game, and that whatever they want to be, is okay.

The hero of the story doesn't have to look any certain way.

While we chose to abandon the character customization idea in the larger Turncoat game, the reasons we did that don't apply to the Escape game. This story is less complex. Making the main character customizable won't interfere with our ability to tell the story.

So, that's what we're going to do.

It will add some work for us, which runs contrary to our mandate to keep scope down, but we're still going to do it. It means we need at least two base models for the protagonist - a male and a female - and we need to put some effort into allowing them to be customized. We'll want the player to be able to change the skin tone, body shape, and the facial features in addition to letting them select gender.

So, what other characters do we absolutely need to tell this story? There have to be other people in this facility. Well, I guess there doesn't have to be other people. Through both Portal games, you never see another living person, and that game works extraordinarily well. But we're not making Portal; our story and our game relies on there being more people.

We need guards and inmates. Neither the guards nor the inmates will feature prominently in any cutscenes, so we don't need to make them as detailed as the player model, but we don't want them all to look exactly the same, either. Similar to character customization, we can randomize the features of the guards and inmates to make it feel like there are many different guards and many different inmates in the facility.

We also need a Guard Supervisor. The Guard Supervisor will have a different uniform from the rest of the guards as well as a defined non-random appearance; this character will always look the same every time you play the game. Some of the ways of escaping will require you to either find or avoid the Guard Supervisor, who is more observant and generally more competent than the regular guards.

Finally, we have the "white coats". The white coats are not part of the regular game level. They're never in the cell block or the guard areas. They're only inside "the theater" - that part of the map that the player can see from some of the ventilation ducts, but can't directly interact with. Exactly what it is that the white coats are doing in this facility is one of the things the player will be able to discover if they explore. They won't need to know that information in order to escape, but they'll have a better understanding of why they need to escape and why they're in the facility in the first place if they do.

One thought I had for the white coats was that since the vents are mostly down low at floor level, we might be able to make it so you simply never see their faces. As long as the the characters aren't too far away from the vent, the angle should hide their face from view. This might add to the mystery of these characters, and will have the added bonus that we won't have to fully model or animate the white coats' faces. That should reduce the amount of modeling effort.

So, our tentative list of characters right now is:
  • Configurable female protagonist
  • Configurable male protagonist
  • Randomizable female guard
  • Randomizable male guard
  • Guard Supervisor
  • Randomizable female inmate
  • Randomizable male inmate
  • White Coat Male (no face rigging)
  • White Coat Female (no face rigging)
That seems doable. It's, perhaps, a little longer of a list than would be idea, but as long as we don't go too crazy with the ability to customize / randomize, we should be okay, especially if we try to reüse parts, like faces and hands, between the guards, inmates, and white coats.

While we're going to create some of the characters in-house, I think we've probably got more characters than we can do without some outside help, so if you know any good character modelers with game experience looking for a little freelance work, have them drop me a line at jeff at martiancraft dot com.

Next Up: Prototyping Basic Game Mechanics Part 1
PreviousExperiments in Environment Creation

Monday, August 12, 2013

Turncoat Dev Diary: Experiments in Environment Creation


Today, I'm going to talk about a little side quest I took while prototyping the game: painting and lighting one of the rooms. When I initially planned the level out in Blender, I did it almost entirely with cubes. I scaled and extruded and adjusted vertices, of course, but when you come down to it, it really was just a bunch of boxes. Of course, a lot of buildings in real life are just assemblages of boxes if you look at them from far enough away, but to try and make an environment that feels real, I knew I needed more than just boxes.

Friday, August 9, 2013

Turncoat Dev Diary: Just Getting Something Running

(This is part of a series. The first post in the series is here.)

Once I had made the list of tasks that had to be accomplished in order to get the game created, my brain started going in a lot of different directions all at once. I kept flitting between thinking about different tasks, trying to judge whether I could do the task, one of our existing MartianCraft developers or designers could do it, or if I'd need to go out-of-house to get it done at the level of quality and finish I wanted. A few items, like sound effects and music, I felt comfortable pushing to the back burner for now, but I felt a need to do an informal triage of many of the tasks. Some of them would require finding either freelancers or new hires and that adds time. I wanted at least some idea of what kind of outside talent I would need.

After about a half day of bouncing between the various tasks and just generally being a disorganized mess, I realized I was putting the cart in front of the horse. I need to just get something running to make sure the core idea was even worth pursuing. The greatest art and sound can't rescue a game that's not enjoyable. So, I pushed aside all my other concerns and thoughts to try and get a simple prototype up and running.

Fortunately, with Unity, that can be done pretty quickly. It took me less than day to get a prototype level built so that I could navigate it. Today's dev diary is about that process.

Unity doesn't have a level editor, per se. It has a scene editor with some basic primitives and some really good terrain tools. Levels are generally built in the scene editor using components built in an external 3D program, unless it's an outdoor environment, in which case you can often do everything right in Unity.

From the time I first thought of the escape game concept, I had some idea of how I thought the level should look and about it's overall layout. Now, that layout wasn't really driven by gameplay concerns, but rather by storytelling concerns. I had certain information I wanted to get to the player and some information that I wanted to make available to more adventurous players who explored beyond what was strictly necessary to escape. I envisioned the basic map as looking something like this:
The black area I envisioned as a somewhat standard prison cell block, although probably a little more futuristic looking than a prison you might find today, and the light blue boxes I thought of as solitary confinement cells, some of which would be used as starting points for the level. The darker blue areas would be administrative areas: the guard break room and the supervisor office. Marked in red is a series of ducts that can be used by some characters (those who aren't too big) to hide from guards and navigate around the map where the guards can't see them. The green area I think of as "the theater." The ventilation grates in those rooms don't open and the player can't actually go into them, but if you they are in the ducts and get close to the grates in any of those rooms, it will trigger in-game animation sequences (and not necessarily always the same one). These sequences will hint at additional ways of escaping the level and also fill in more background information about the universe and why the character has been imprisoned.

The goal of the game is to get to the security elevator, which is outlined in gold. It looks like a straight shot up the center from the isolation cells — and it is — but that hallway is well lit and well guarded. Plus, you can never go directly to the elevator. You always have to do something first before you can go there. You might have to disable a force field, find a key, or restore power to the elevator before going to it makes any sense. Once you've done that, then you need to get past the various guards without being detected in order to escape.

Once I saw the map laid out, I realized it wasn't enough. There needed to be more than one way to get to the elevator so that we could give the game some amount of replayability and also give the player more stuff to explore. I felt that there needed to be more rooms outside of the main prison block to give the player places to hide and explore.

I came up with the idea of adding on an "Intake Processing Center". The existing entrance to the elevator would be the one that guards and other staff used, but new inmates would come in a different way. They would come in through a series of rooms where their belongings were stored, mugshots were taken, and prison clothes were issued. I added on a series of rooms to the map for this purpose, as can be seen in purple below.
I originally started trying to draw out the level map old-school style. But, it wasn't really working for me. It was keeping me from thinking in three dimensions. So, I fired up Blender and started planning the map in 3D. The maps above are actually screenshots of the top orthographic view in Blender that I added some color to using Photoshop.  As you can see, it's actually a three dimensional map:
Working in 3D seemed to make sense, since the file I created can be exported right to Unity for prototyping. At least, it can if I built it right. There was only one way to find that out, though: export it from Blender and import it into Unity to try it out.

My first attempt didn't work out very well. I dropped a First Person Controller (something provided by Unity for creating first person games) onto my map so that I'd be able to navigate around the map. For the final game, I won't be able to use the provided Unity component, but it will work plenty well for letting me look around my map. 

I hit play, and saw… nothing.

Oh, right. Lights! The "real" lighting for the game will be done much later in the process, but I needed some light to see anything. I could've just turned on global ambient lighting, but that wouldn't give any shadows to judge shapes or distances. Instead, I dropped a somewhat random assortment of real time point lights onto the map. Performance won't be good, but at least I'll be able to see well enough to navigate the map. Since I'm using my dev machine to navigate around the prototype level right now, I'm not overly concerned about performance issues yet.

Once I had the lights added, I hit play again. And saw… nothing. Again.

Then I swore at my computer.

Fortunately, I realized what the problem was before the swear words were even completely out of my mouth.  Blender (and, I'd imagine, most 3D programs) assume that objects are going to be viewed from the outside, not from the inside. While Blender supports two-sided polygons, Unity doesn't, so when designing interior architecture, you have to make sure your objects are built, essentially, inside out - with the face normals — which mark the forward or visible direction of the polygon — pointing inwards.

You can see in the Blender screenshot below that the normals (the light blue lines) are facing outward. Most 3D objects get created this way so they can be seen from the outside when you're using one sided polygons.

Outwards, in our case, is bad. Outward pointing normals mean you can see this room from the outside, but not when you're standing inside of it. Fixing it was a simple matter of selecting each room in Blender, going into Edit mode, selecting all faces and then hitting the "Normals / Flip Direction" button in the left toolbar.


Once I fixed the normals, I re-exported, went back into Unity, waited for the level to re-import, then hit play. This time, I actually got something:


Well, yay! I've got a map and I can even walk around the level. I haven't written any code yet, but I can actually navigate from the user's perspective and get a feel for the level. I'm really liking my decision not to try and write my own game engine right now.

I found it kind of hard to maneuver, though. It is soooo white in here that it's hard for the eye to grab onto anything, especially when you're not near a point light. Even for a throwaway prototype, I needed some textures for the eye to grab onto, so I pulled down a few tileable images from CGTexture

Using repeating textures won't cut it for the final game. That was the state of the art a decade or two ago, but not today. The human eye is just too damn good at picking out patterns for us to rely on repeating images for very much. But, for testing, getting any kind of texture on the floor and ceiling was going to make a big difference. I also made the cells a different color than the hallways, which helped quite a bit as well.


It's not going to win any awards for level design or aesthetics, but it's a starting point. I can walk around, find the more glaring problems, and get a feel for how the layout will work. The first thing I did was to make sure I could get everywhere I wanted the player to be able to go. I found a few mistakes along the way - polygons that should've been deleted to make doors and normals that didn't get flipped. I also found a few gaps between rooms that were noticeable. Those were all pretty easy to fix in Blender, which I did.

The one thing that did strike me, as I walked around the map, was that the level is too small. Probably a lot too small. At a walking speed that feels natural, you can navigate the entire map fairly quickly. Even accounting for the fact that you'll be sneaking and avoiding guards much of the time, it's still too small. I'll have to go in later and make it bigger. But this is enough for an early prototype - to test out game mechanics and bad guy AI.

Now, if I were focused, this is the point where I would start working on some actual game mechanics. I'd drop in a few bad guys with simple AI so I could start actually playing the prototype and figuring out what works, if anything. But, I'm not focused. I'm the kind of person who…

Ooh, look! A shiny object…

What was I saying? Something something, focused… oh, right. There are some tasks that I know we're going to have to go out of house for, and some that I know we can do in-house. Then, there are the ones that I'm just not sure about yet. One task that I think we can handle in-house with existing talent, but don't know for sure, is painting and lighting the environment. So, I allowed myself to be distracted from the prototype to do a quick paint-up of one room on the level. That room will probably need to get re-done at least once before we ship, but it seemed a worthy experiment and something that would be kind of fun. Plus, it would help me get familiar with some Unity functionality that I've not used before (light maps), some new 3D painting improvements in the latest version of Blender, and it will just generally help with the decisions that need to be made about the overall aesthetic feel of the game. I'm a visual person and sometimes need to see something to know if I like them, because they always look good in my imagination.

Wednesday, August 7, 2013

Turncoat Dev Diary: Deciding on Tools and Frameworks

Once we knew our platform, it was time to start figuring out the toolset or frameworks that we were going to use to make the game. The essential decision we had to make was whether to build our games from scratch, essentially creating our own game engine in the process, or leveraging one of the many existing commercial or open source game engines that are available. Although the idea of creating our own game engine had some appeal, we knew that practical considerations weighed heavily in favor of using an existing one. Although there are costs associated with using many engines, and even though it makes you dependent upon somebody else's work, the cost/benefit equation really makes the decision pretty simple. We want to tell a story and create games; we don't want to reinvent the wheel, and writing a 3D game engine from scratch is very much reinventing the wheel.

It actually didn't take us very long to figure out which engine to use. We ruled out a few very quickly. Cocos2D wouldn't work because we want to create a full 3D game. Cocos3D is still a little too immature for us to be comfortable relying on it. Since we want to keep our options open for releasing on other platforms, some other engines were ruled out. Sio2, although a good mobile engine that supports both iOS and Android, doesn't have desktop or console support.

Ogre3D, a well-regarded open source game engine, just has too many rough edges for my tastes. The cost savings from the fact that it is free and open source seemed to be far more than offset by the additional time and headache involved in using it. I'm all for open source software when it's the right tool for the job — Blender is still my general purpose 3D app of choice — but the gap between Ogre3D and the commercial engines is pretty wide, not in terms of what you can achieve, but in the amount of effort it takes to achieve it.

We very easily got the list down to just three: the UDK, the Source Engine, and Unity3D. Then, two of those three got quickly crossed off the list, as well.

Although the UDK is an amazing engine, we ruled it out for one simple reason: the toolset is entirely Windows based. Although it can create iOS and Mac games, most of the work involved in creating the game has to be done on Windows. We're almost entirely a Mac shop and I, personally, am much more productive and happy when working on a Mac. Even if I didn't mind spending much of my day in Windows, I'd still have to compile, test, and upload to the App Store using a Mac, which seems a rather convoluted and inefficient process. It's probably not much overhead for a large game shop, but it's more hassle than I'd want to deal with.

The Source Engine has similar limitations. Although Valve has been promising Mac tools for a while, they have not shown up yet and there have been no recent comments from Valve about Mac support, leading me to question whether that they've dropped the plan. On top of that, Valve hasn't delivered official support for any mobile platforms yet. There are rumors of a Source 2 engine in the works that will likely address these issues, but we can't develop with something that's not out yet.

Before long, there was only one engine left standing: Unity3D. We've used Unity for a few client projects in the past and I'm, frankly, rather impressed with it. I thought that I would really hate working in C# but it turns out I don't mind it at all. I don't like it as much as Objective-C, but I don't have the kind of hatred for it that I seem to have developed for Java and C++ over the years. Like all languages, it has its quirks, but I don't feel like the language is working against me and I don't have problems context shifting between Objective-C and C# like I do with Objective-C and Java. Objective-C and C# are surprisingly compatible languages given their differences.

Although I've only got a few hundred hours of experience with Unity under my belt, it strikes me as having the right balance between ease of use and power. The development environment runs natively on the Mac (and Windows also) and it is capable of generating iOS, Android, Mac, Windows, and Linux executables. It's even possible to build your apps for the Xbox, PS3, and Wii, though doing so requires contacting Unity and negotiating separate licenses. There is, of course, some work involved to account for the various platform differences, but a surprising amount of it is handled for you.

Once we got the licenses squared away, it was time to get something built. There's one school of thought in game development that says you should try and get a prototype up and running as soon as possible. The earlier you start being able to play, the faster you'll know whether the game's going to work. So, let's get a skeleton of our level hashed out so that we can get our first rough prototype stood up.

Next Up: Just Getting Something Running
Previous: Platform Decisions