ブログトップ 記事一覧 ログイン 無料ブログ開設

potio Arabicam amo このページをアンテナに追加 RSSフィード

2013-12-10

MonoGameってのがあるらしいので触った

最近会った人から聞いた何かを無差別に触ってる期間なのだがなんか情報少なそうだったののメモ。

http://monogame.codeplex.com/

MonoGameを開発したいならgithubからclone、MonoGameで開発したいならこのサイトダウンロードイナフ

http://kcat.strangesoft.net/openal.html

Windowsだと32bit版(?) OpenALが要求されるのでOpenAL softをOpenAL32.dllみたいなファイル名にしてsystem32だかsysWoW64だかに突っ込む。

Xamarin Studio(旧MonoDevelop)でAdd-inとしてXamarinStudio.MonoGame_*.mpackを追加したらコードの雛形付きプロジェクトが作れる

雛形はゲームのメインループのみ。Gameのプロパティに応じてUpdateが60times/secDrawが60fpsになるべくなるよう呼ばれたり、ただ単純に繰り返すように呼ばれたりするらしい。

その他の便利そうなクラスリファレンスがあればよかったのだが、Textureとかその辺の使い方はXNAを知ってる前提なのかドキュメントがないような……。

2013-07-10

Rogue Legacy(ローグレガシー)は結構良ゲーム

http://www.roguelegacy.com/

http://store.steampowered.com/app/241600/?l=japanese

SteamRogue Legacyを買ってプレイしたらなかなかよかったので紹介。日本語版はないようだけど、和名はローグレガシーかな。rogue-liteという言葉に釣られたら予想と全然違ったけど良かったよ。

操作は簡単な2Dアクションゲームで、ローグライクゲームのように毎回自動生成される城を悪魔城ドラキュラのように探索しつつ先祖の仇を討つ、いや、お金集めするゲーム

ローグライク風に死んだら終わり。その世代の主人公は二度と帰って来ない。次にゲームを始めると三人の中から跡継ぎを選ばされ、親の遺した金を使って居城拡張したり装備を買ったりして先代より少し有利になった状態で次の城に挑める。

この次世代の主人公を「選ばされ」るのが肝で、身長やクラス、多種多様な形質を持った跡継ぎで城を攻略するのはNethackで"Shall I pick a character's race, role, gender and alignment for you?"にyと答えた時のようだ。特性もなかなかおもしろく、メッセージにハゲ関連ジョークが出る奴(兜で隠してるのに!)、ジャンプ時におならをしてしまうような他愛もない奴、リーチが短いがヒットボックスが小さく狭い通路を通れる奴、画面上下反転してしまうようなきつーい奴までどの世代も違った主人公で城を探索するのが楽しい

初め難易度は馬鹿高いが居城拡張する事で主人公もレベルアップし、ちょっとずつちょっとずつ強くなっていくのでいつの間にか止めどきがわからなくなる。

Steamのストアページにもある通りゲームコントローラに良く対応しており、そういうので遊ぶと楽だろう。公式サイト体験版もあるようだ。

2013-04-07

AndroidをGentoo Linux上でビルドする方法、あるいは不審なバイナリをあまり使わずにNexusのrootになる手順

言いわけ:Webに転がっているいくつかのroot権限を取得する手順で用いているバイナリオープンソースだったりもしますが、覗いてもよくわからなかったしどうせ自前ビルドするからとあまり深く追いませんでした。単にroot権限を取りたいだけならば他所をあたったほうがいいかもしれません。



Googleの推奨している環境はUbuntuで、手順もapt*を使ったものしかないが、gentooも理解すれば楽。

https://source.android.com/source/initializing.html

とりあえずGentooの場合特有なのは

  • Ubuntuでの前提パッケージ名から該当するものを適当に探してemergeする
  • android-sdk-update-managerをemergeする
  • sun-jdkを選んでおく
  • ANDROID_JAVA_HOME環境変数を作る

の四点くらいで、残りは普通の手順のようだった。

以下もうちょっと詳しく。


関連パッケージを入れる

上記URLapt-getの場合のパッケージ名が羅列されているが、それっぽいのを適当にemergeするとなんとかなると思う。build-essensialは多分ubuntu特有のもので、Ubuntuで{lib}hoge-devのようにバイナリと分けられているパッケージはGentooではたいていhogeで一緒に入ったりすることを念頭に入れつつeixなりemerge -[sS]なりで探す。Androidバージョンによっていろいろ変わるだろうし、自分もまっさらな環境から入れたわけではないので本当ならば何を追加すればいいのかわからないので逐一ebuildを挙げたりはしない。

sdkを入れるのはebuildが用意されているので楽。

# emerge -av android-sdk-update-manager
# usermod -a -G android YOUR_LOGIN_USER

ログイン中のユーザだと即時グループが変わったりしないので、再ログインしてandroidグループに入る

$ id (androidグループに入ってるかの確認)
$ android

出てくるGUI画面のToolsあたりにadbが入ってると思うので適当にチェックボックス入れて難しい文面をあなたの顧問弁護士に見せて相談してAcceptすると後は自動でやってくれる。


実機を繋げられるようにする。

実機の方でUSB debugを有効にしておく。Jellybeansあたりから(?) Settings->About phonesのBuild numberを7回タップしたりして開発者向けオプションを出さなければならない。このとき間違えて近くの別項目を数回タップすると……ちょっとニッコリできるかもしれない。

/etc/udev/rules.d/51-android.rules に https://source.android.com/source/initializing.html のConfiguring USB Accessを参考にして項目を追加する。Googleがドキュメントを更新する前にデバイスを手に入れてしまった場合、実機をとりあえず繋いでみてdmesgあたりでidVendorを確認してそれを用いるとなんとかなる。

$ adb devices

でなんか繋がってるらしい事を確認できたら、adbとかfastbootでいろいろできるようになってるはずだ。

$ adb reboot bootloader

ブートローダがなんか画面に出てる状態にして、

$ fastboot oem unlock

で端末に出てる説明をよく読んで操作すればブートローダがアンロックされ、個人情報保護のためデータが全消去された後、自分でビルドした何か(あるいは道端で拾ってきた怪しげなバイナリ)をブートさせる事ができる状態になる。


ソースダウンロードする。

これにはebuildは用意されてない。私も用意する気はない。しかたがないので

https://source.android.com/source/downloading.html

を見てその通り進めていく。repo内部で用いているgitの.gitは.repo/repo下にあるのでgitでの名前とかを変えたい場合はそこで操作する事。ソースのそこかしこに最終更新日から腐臭の漂うドキュメントもちらほら梱包されているが、まだまだたまには参考にはできる。

残念なことにソースのないドライバ類をダウンロードしないといけない。 https://developers.google.com/android/nexus/drivers から自分のデバイスに対応するものをダウンロードソースツリーのてっぺん解凍してできたスクリプトを実行し、表示されたライセンスを懇意にしている弁護士に見せて問題がなければ"I ACCEPT"と入力してvendor/以下にバイナリをもらう。


ダウンロードが終わったらみんな大好きコンパイルの時間

https://source.android.com/source/building.html にある通り、lunchで設定を整えてmakeするだけ。*1

Gentooで行う場合少しだけ注意点がある。

自分は試していないがsun以外のjdkだとコンパイルに問題があるとか言う人もいるので

$ eselect java-vm list

sunのものを使うようになってるか確認しておくといいかもしれない。

lunchがANDROID_JAVA_HOMEという環境変数を用いるがデフォルトではそんなものないので

$ ANDROID_JAVA_HOME=$JAVA_HOME lunch 

するなりANDROID_JAVA_HOMEの設定を.*shrcに書いておくなりする。

デバイス毎のlunchオプションhttps://source.android.com/source/building-devices.html でわかるということになっているが、ここでもGoogleのドキュメント更新が遅い場合オプション無しで

$ lunch

するとよくあるもの一覧が対話的に選べるのでドキュメントには反映されてない端末がちゃんとmanifestにはあるかどうかの確認には良いだろう。-userdebugまでならそのまま対話的に選べるが、"full_デバイス名-eng"は自分でオプションとして渡さなければならない。rootが欲しいだけならば-userで、設定ファイルro.secureを1に手で編集すれば良い。

makeしてAndroidビルドは完了。

out/target/product/デバイス名/にboot.imgとかができている。-engを選んでいれば

$ fastboot boot boot.img
$ adb shell

rootになれてるのを確認できるだろう。-userdebugならばadb rootrootになれる事を確認できそうだ。動作を確認した後、

$ fastboot flash boot boot.img

で焼く事ができる。

外に持ち出すデバイスならば

$ fastboot oem lock

する事が望ましい。アンロックしたまま落としたデバイスを誰かに拾われて、その人が自前のイメージでbootすれば端末の中身は全て見る事ができるからだ。

(おまけ)カーネルも自前コンパイル

さて、上記の方法でビルドするとカーネルgoogleさんの奴のままだから、カーネルhttps://source.android.com/source/building-kernels.html にあるようにデバイスに適切なツリーをcloneして適切なコミットをcheckoutする。checkoutしないとclone直後のmasterは空だったりするから混乱しないように。

toolchain内のgcc*2パスは上記リンクのbuilding-kernelsのドキュメントが古いから prebuilts/gcc/linux-x86/x86/i686-linux-android-*/bin/ に置きかえたり、今後どうなるかわからないがとにかく自分で探さないといけない。(多分普通の人はこれ。自分のコンピュータアーキテクチャによる。)バージョンの違いでビルドできたりできなかったり、いろいろあるから試行錯誤しないといけない。正直私もよくわからない。

(おまけ)自前カーネルを組み入れる

できたカーネルをboot.imgに組み入れる方法なんだけど、実はここからちゃんとした手順を知らない。だから書かない。カーネル動かしたい人はsplit_bootimgで検索したりしていろいろ頑張ってほしい。ちゃんとした方法が本当はあるのかもしれないので、わかったら追記する。

追記 20130424

device/<vendor>/<name>/kernelに移した後、make cleanしてからmakeしたら自前カーネル組み入れられてるみたいでした。うっかり。

多分device/<vendor>/<name>/kernelからbuildのどこかにkernelを移してからmkbootimgされてから${OUT}のどこかに移していたのでしょう。make clean忘れずに。

*1:最近はmake userdebugとかじゃなくlunchなんだね

*2:本当はクロスコンパイルgccも自前で準備したかったが、なんかうまくいかなかった。