5.1さらうどん

@giginetの技術ブログ。ゲーム開発、iOS開発、その他いろいろ

Kobold2DをXcode6 + iOS8.1向けにバージョンアップする - 『VOXQUEST』アップデートの舞台裏

VOXQUEST

https://itunes.apple.com/jp/app/voxquest/id517568666?mt=8&uo=4&at=10l8JW&ct=hatenablog

今から3年ほど前、『VOXQUEST』という変わったゲームをリリースしました。

元のゲームは48時間のゲームジャム内で開発したのですが、結構いろんな方に遊べてもらえたようで未だにたまに話題に上ってきます。

そこで、先日、こんなつぶやきを発見しました。

開発してから3年も経ってるのに、見ず知らずの人に遊んで貰えて、アップデートを心待ちにしてくれている。これほど身に余る幸せはありませんね。

そうだ、アップデートしよう

そこでiOS8向けにアップデートをしようと思い立ったのですが、VOX1の開発言語はObjective-Cフレームワークは、デファクトスタンダードとなっているcocos2dではなく、それらを拡張したKobold2Dというドマイナーなゲームフレームワーク。ちなみに当時のiOSバージョンは5。ARCがまともに使えるようになった直後で、SpriteKitなんて影も形もありませんでした。

Home - Kobold2D™ - Kobold2D

当時、cocos2d上に乗ったフレームワークとして、非常に高機能で、発見してすぐに飛びついたのでした。

Kobold2Dでググると、3年前に僕が作ったスライドしか出てこない辺りがマイナーさを物語っています。

重い腰を上げて、レガシーコードをアップデートしようとしたら、なんとKobold2Dの更新は2013年の夏ぐらいで止まっている。iOS7が出る前の話なので、今の環境ではビルドすら通りません。今回はこれをXcode6 + iOS8.1に対応させました。

Kobold2DをXcode6でビルドできるようにする

iOS8でいろいろ変わっててビルドが落ちまくるのでまずはビルドを通しましょう。

VQ1のリポジトリはこちら

giginet/VOXQUEST

Kobold2Dの最新版にアップデートする

まず、VQ1はKobold2D 2.0.4が使われていたので、公式サイトにある最新版、2.1.0にアップデートします。

Kobold2Dはデータマイグレーション用の謎GUIツールが付属していて、ボタン一つで簡単にアップデートできます。データ構造は面倒なんだけどアップデートは簡単。

Upgrading Kobold2D Projects - Kobold2D™ Documentation - Kobold2D

Kobold2Dのunstable版にアップデートする

当然、最新版にアップデートしたくらいじゃダメ。

iOS7からのUIAccelerationの仕様変更でビルドが通らない。

調べてみたところ、unstable版でビルドが通るというウワサ。バージョンアップしてみよう。

c++ - cocos2d CCLayer.m UIAccelerometer is deprecated warning - Stack Overflow

kobold2d/kobold2d

単純に、Kobold2Dディレクトリをリポジトリにある物に差し替えるだけ

Kobold2Dにパッチを当てる

これでも当然まだダメ。

APIの変更やLinkerエラーで死にまくって途方に暮れていたのですが、なんとXcode6でKobold2Dのビルドが通るようなパッチを作ってくれている方がいました。

圧倒的感謝。

Xcode 6 fixes for Kobold2D

$ cd ~/Kobold2D/
$ ~/Kobold2D/Kobold2D-2.1.0/voxquest/
$ curl https://s3.amazonaws.com/mgwu-misc/xcode6_kobold_patch.sh | sh

さらに中のコードを書き換える

これでパッチを当てるといけると思いきや、今度はLinkerエラーが。

ObjectALのビルドが上手く通らないので、以下のようにして手動で直してやります。

ios - How to fix OALAudio Library for XCode 6 / Kobold2D (Linker Error) - Stack Overflow

ゲームのバグを直す

ここまで来るとようやっとビルドが通るのでバグ対応。

バグ自体は大したことなくて、CCLabelTTFの仕様が変わっていて、引数の渡し方がまずくて落ちていたようでした。修正はすぐできた。

16:9対応する

VOX1の時代はまだiPhone5の発表前で、当然4:3解像度が主流。

しかし、2013年頃からAppStoreのサブミットには16:9対応が必須になったので、アップデートするためにはこの対応が必須。

cocos2dの2系には、cocos2d-xのように、上手い具合で複数解像度対応をしてくれる機能がなかったようなのでがんばって対応しました。

4:3

f:id:gigi-net:20141208101417p:plain

16:9

f:id:gigi-net:20141208101501p:plain

幸い、元のコードを書いたときにちゃんと相対値指定してる部分が多かったので変更はあんまりありませんでした。また、その他の部分もゲームの規模が小さかったのですぐ対応できました

64bit対応をする

もちろんiPhone5sもなかったので、当時は全て32bitビルドでした。

2015年からAppStoreへのサブミットには64bit化が必須になるのでこれも対応。

こちらも依存ライブラリなどはなかったので、ビルド設定を変えるだけで済みました。

32bitライブラリを含んでいると非常に大変ですね・・・・・・。

まとめ:マイナーなゲームフレームワークヤバい

iOS界隈は、1年単位でAPIがコロコロ変わって、3年前のコードを保守管理するのですら一仕事。

Objective-Cなら、cocos2dやSpriteKitのようにある程度メジャーな部類は、ちゃんと更新に追従されそうなのですが、技術選定の段階でうっかりとこういうよくわからないゲームフレームワークを選定してしまうと後で泣きます。

今後はますますメジャーなゲームフレームワークしか生き残れない時代になっていきそう。

しかし、「誰でもゲーム作れるよ!!!」と言いつつ、こういう事案に遭遇すると、迂闊にそういうことを言えないなあと言う気持ちになる昨今です。

今回、いろいろな対応をしたVOXQUESTバージョン1.3は近日公開予定です!久しぶりにデバッグのために通しプレイしたのだけど、今遊んでもなかなか楽しいですね。

VOXCHRONICLE

今回紹介した『VOXQUEST』には、2作目となる『VOXCHRONICLE』があります。こちらもかなりオススメなのでぜひに!

こちらは実装言語から替わり、cocos2d-xの2系を使っているので、バージョンアップが起こっても対応しやすいかなあと思ってます。その分、複雑すぎて今回のようには行かないわけですが・・・・・・。

音を奏でる奥スクロールRPG『VOXCHRONICLE -オクスクロニクル-』リリースしました - 5.1さらうどん

本出します!

このブログでは何度も告知していますが、本を出します!!!

絶賛予約受付中なのでぜひに!。

『cocos2d-xではじめるスマートフォンゲーム開発』という本を出版します - 5.1さらうどん