環境はたぶんこんなん。 4.2ではgfortranで、4.3からは全ての言語で GMP 4.1+ and MPFR 2.3.0+ が必要 になったらしい。なのでgmp-4.2.2とmpfr-2.3.1を取ってきて使えるようにする。 buildscripts-20060724より、build-devkit.sh のしかるべき場所を書き換えて 走らせる。 1時間ちょっと経過したころ、エラーで止まってた。gcc-4.3-20080228/libgcc/../gcc/config/arm/libunwind.S:50: Error: unknown pseudo-op: `.object_arch'だってさ!ググったら最初にずばりな件名のパッチが引っかかったよ。 binutils からやり直しってのがひでー。あらかじめ知っておけよ俺! (続く) -- (続いた) ワオ!また同じエラーが出てた!もう駄目だ! と言いたい所だけど、ここらへん読んで懲りずにbinutils-2.18.50を取ってきた。 軽く眺めた程度だけど、2.17と比べてgas/config/tc-arm.cのobject_arch関連に (先ほどのパッチよりも込み入った)手が加えられているみたいだ。再挑戦して みよう。 (また続く) -- (また続いた) さきほどのエラー箇所はパスした模様。しかしまた止まってた。checking for shl_load... configure: error: Link tests are not allowed after GCC_NO_EXECUTABLES. make[1]: *** [configure-target-libstdc++-v3] Error 1 make[1]: Leaving directory `/h/gcc/arm-eabi/gcc/' make: *** [all] Error 2 Error building g++えーとshl_loadって共有ライブラリをロードする関数だよね? なんでこんなテストが発生してるんだろ。 http://readlist.com/lists/gcc.gnu.org/gcc-help/1/5370.html http://www.mailinglistarchive.com/gcc@gcc.gnu.org/msg16499.html うーん、要領を得ないな。もう諦めるか。 俺はgccすらコンパイルできない屑人間。 (終わり) -- (終わってなかった) やはりこのパッチでよかった模様 http://www.mailinglistarchive.com/gcc@gcc.gnu.org/msg16499.html 当てても同じ箇所でエラーが出るのでおかしいなと思ったらソースディレクトリ でautoconfしてconfigureを作り直さなきゃいけなかったのね。 というわけで懲りずに再々挑戦……するのは今度にするか。 (また終わる) -- (また続いた) ついに、ようやく、ビルドが完了したよ。間に合わなかった。 リモートマシンでビルドしてたからよかったようなものの、目の前にあるマシン でやってたら発狂してたろうな。$ arm-eabi-gcc -v Using built-in specs. Target: arm-eabi Configured with: ../../gcc-4.3-20080228/configure --enable-languages=c,c++ --wit h-cpu=arm7tdmi --enable-interwork --enable-multilib --with-gcc --with-gnu-ld --w ith-gnu-as --disable-shared --disable-threads --disable-win32-registry --disable -nls --disable-debug --disable-libmudflap --disable-libssp --target=arm-eabi --w ith-newlib --prefix=h:/gcc/devkitARM Thread model: single gcc version 4.3.0 20080228 (prerelease) (GCC)(本当に終わります)
http://gcc.gnu.org/gcc-4.3/changes.html 読んでた。個人的に今すぐ活用出来そうなところ。general
- __builtin_expect no longer requires its argument to be a compile time constant.
C2進表現サポートは嬉しいけど、今更な……。 その他、個人的に今は関係ないけど気になるところ。
- Integer constants written in binary are now supported as a GCC extension. They consist of a prefix 0b or 0B, followed by a sequence of 0 and 1 digits.
C++libstdc++
- TR1のサポート
ARMこんなとこか。C++0xのautoはまだなのね。 右辺値参照ってなんなんだろ。
- Compiler and Library support for Thumb-2 and the ARMv7 architecture has been added.
今日一日は無かったことに!
アライメントされていれば下位2bitは空いているわけで、この部分何かに使えな いかなーと思うわけだ。あ、GBA なら上位4bitも空いているな。WRAMを指すポイ ンタに限定すれば更に2bit増えて、計8bitも使えるのか。ふむむ。
また C++ に手を出してた。 3行で書けたよすっげーなぁとか。コンテナだけじゃなくて色々あるのね。mem_fun の挙動を見ていて思ったけど、ひょっとしてインスタンスのメンバ関数 呼び出しって第一引数に this が入ってるのかしら。だから this を捏造してや ることで、こんなことが出来てしまうと。 なんか理解する順番が逆なような気 もするけど。 しかし delete はどのタイミングですればいいのだろうな。 今は is_killed() でコンテナからの除外判定をすると同時にdeleteしてるけど、 後ほど困りそうな気がするなぁ。shared_ptr でコンテナに入れればいいのか。 -- という話はさておき、絶賛・開発なかだるみ中(すんませんすんません……)の シューティングの話をする。 そろそろ道中を作るのだが、DSもターゲットに入れることを考えると、液晶の残 像がひどいので弾速度の許容範囲を調べておかなければいかん。ので適当なデモ を作ってみた。void TaskGroup::run() { for_each( Tasks.begin(), Tasks.end(), mem_fun(&Task::run) ); Tasks.remove_if( mem_fun(&Task::is_killed) ); for_each( Tasks.begin(), Tasks.end(), mem_fun(&Task::draw) ); }弾速度調整君.zip 弾速、発射頻度、弾アニメなんかを実機上で動かしながら変更できたり、デカい キャラを出しまくってみたり出来ます。ひどいソースも入れておきました。 -- また C++ とかの話に戻るのだが、クラスの継承・委譲なんかを繰り返していく と、 thumb コードと arm コードの使い分けが大変だね。thumb から IWRAM の arm を呼んで、そこからまた ROM の thumb を呼んだりすると(thumb コードは longcall 宣言がされてないので)ハングアップする。クラス内では諦めてどち らかに統一するしかなさそうだ。 DS なら基本的にオンメモリだろうし問題ない んだろうなぁ。
ぎゃおーん。typedef struct { u16 index; // s16 cx; // center x s16 cy; // center y u16 flip; // default flip } SPR_PAT; typedef struct { u16 spr_num; SPR_PAT p[]; } SPR_PATTERN;1: #include "spr_pat.h" 2: 3: static const SPR_PATTERN not_used_sp_ptn = { 4: 1, 5: { 6: { 0, -8, -8, SP_NOFLIP, }, 7: }, 8: };gcc から g++ に変えてみた途端この仕打ち!とりあえずこのソースだけ gcc で コンパイルして凌ぐことにして、あとでコンパイラのバージョンを上げて試して みるか……。 てゆーか、バグリポート先に mingw の URL が示されてるのはいいのかしら?$ make # compiling res/spr_pat.c ... res/spr_pat.c:8: internal compiler error: in tree_low_cst, at tree.c:3313 Please submit a full bug report, with preprocessed source if appropriate. See <URL:http://www.mingw.org/bugs.shtml> for instructions. $ arm-elf-g++ --version arm-elf-g++ (GCC) 3.4.3
http://www.itmedia.co.jp/news/articles/0802/22/news112.html 3/9はミク同人ゲームで溢れかえりそうだな。
機種変更が0円だったので思わず、いやほんとはフルサポになるから0円じゃな いけど……2年もこれ使うのかよオラなんだかワクワクしてきたぞ……という話 はさておき、とにかく入手したのよ。 んでこれ有機ELなのよ。そこで早速、ライデンファイターズ2の動画を入れてみ たのよ。プププー、なぜオタは入手したての携帯電話でゲーム動画を見ますか? などとセルフ煽りを入れてみたのよ。という話はさておき、54fpsを27fpsに落と してxvidで再エンコードして突っ込んだのよ。H264だとワンセグとの兼ね合いか 15fps固定でしか再生出来なかったからxvid化の波は避けらんなかったのよ。 するとどうだ、なんと残像感があまり無いのよ。携帯の癖に生意気なことに意外 と高速弾が識別できるのよ。これはもう断然、有機ELに希望が持ててきたのよ。
http://alohakun.blog7.fc2.com/blog-entry-902.html 記事の趣旨とは全然関係ないけど、本当に全く関係なくて申し訳ないんだけど、 似たような構造体がいくつも並んでいるのを見て自分のコードを思い出してしま い、なんだか溜め息をついてしまった。 自分のコードはこんな状況。(各ヘッダ) typedef struct TASK_ { struct TASK_ *next; struct TASK_ *prev; TASK_PROC proc; u16 wait; u16 phase; u32 work[WORK_SIZE/sizeof(u32)]; } TASK; typedef struct MYSHIP_ { Charactor c; u8 mode; s8 pow; s8 sign; s8 shot_cnt; s8 target_dir; u8 zombie_cnt; } MYSHIP; typedef struct ENEMY_ { Charactor c; coroutine coro; ENEMY_ATTR *attr; struct ENEMY_ *parent; u16 child_nums; s16 xx; s16 yy; u8 move_type; u8 moribund_cnt; } ENEMY;task, myship, enemy から抜粋したけど他にも shot, bullet, item, bgtask... とかあってどれも似たような中身になってる。 何が問題なのかというと、もう題名の通りなんだけど…… 各構造体の先頭に Charactor c があるのは覚えられても、その他に何があった のか、何が無かったのか、覚えてらんないんだ。 ENEMY構造体に xx, yy なんて変数があっても、enemy.c の中で使用した形跡が 無いんだ。なんのために追加したのかすら忘れてしまったんだ。 もう、どうしようもないんだぁぁぁぁぁぁぁ。(各Cソース) static void act_myship(TASK *t) { MYSHIP *w = (MYSHIP *)t->work; ... static void act_enemy(TASK *t) { ENEMY *w = (ENEMY *)t->work; co_call(w->coro); ...
マップとオブジェの当たり判定をしようと考えていたのだが、マップスクロール を自由に自在に行いたい場合、なんつーかめんどくさいっつーか、一番足かせに なっているのがオブジェの座標を16ビット、固定小数点数1:9:6で管理している 点だった。 仕方ないので座標を32ビットにし、ついでに小数部を8ビットに拡張することで 解決した。苦渋の選択だったが、整数部が符号込みで24ビットもあるので色々と 楽になった。 しっかし、苦渋の選択とか書いてるけど x/y でたかだか4バイト×オブジェ数 増えるだけなんだよね。オブジェが1024個なら 4kbytes だよ。頭悪いよなー。 ありもしないメモリ不足を心配して開発が停滞するなんて馬鹿げてるというか、 お前それ単に通ぶりたいだけなんじゃないのかと。とか言って、nmで見てみたら 256kバイトのメモリのうち128kバイトをなんだかんだで使っていたので、ヒープ 用途なんかも合わせて考えると実はちょっぴり心配だったりしてるけど。
Firefoxにて13~15ポイント使用時に半角英数字の文字間隔がおかしい?A と 2 の文字が重なって λ みたいな字に!1!ぬ
カーソルが文字を貫通する!このとき選択範囲も狂うのでイライラする。 詳しいことはよく分からないけど、見かけの横幅と実体の横幅が合ってない気が。 Windowsのフォントラスタライザが腐ってるのかと思って、UbuntuでFreeTypeで 試してみたりするんだけど、同じ条件(フォントサイズ・閲覧ページ)だと発生 しないな……。しかし、ときたま遭遇してイラッとする。
うぶんつでのスクリーンショット。サイズ11かなこれは。
一ページに一日分しか表示しない設定にしてあるはてダリとか阿呆かと思ってた けど、つまりそういう設定にしてる人はAutoPagerizeを使っていて、それを利用 することが前提でそういう設定にしてあるのだなーと気づいたというか、使わず にそういう設定をしてるんだとしたらやっぱり阿呆なのかと思ったり、まー最終 的には人の勝手なわけですが、ってAutoPagerizeと全然関係ない締めになってしまた。
初心者の俺が言うんだから間違いないね。 才ライリー出版の本を紹介しておこう。http://www.amazon.co.jp/dp/4759222197
雲ひとつにつき1タスクを割り振ってプログラムでエフェクトを作っていたとこ ろ、複数エフェクトが同時に出るとシステム上の最大タスク数を超えてしまい、 ハングアップするようになった。無駄に実機で撮ってみた。 ハングアップするほどに大量のエフェクトを出す方法は限られているので、この バグを残すことで、逆に(パロディ元のゲームを)やりこんでいる人間が選別で きる気もする。けど、ハングアップすること自体が普通にダサいよな……。 超連射のようにあらかじめアニメーションパターンを作っておくことで、タスク 一つで賄えるようにした。
こんだけ出しても5タスク!スプライト数にして840個! これでもうエフェクトが出まくっても安心だ!
自分のPCにはゲームデバイスを ゲームポート :自作スティック(6ボタンゲームパッド) DPP改造IF-SEGA :サターンパッド USBポート :復刻版サターンパッド & PS変換ケーブル と繋いでいて、上から順にパッドIDが1・2・3・4と割り振られているのですが、 WindowsXPだとパッドIDが固定なため、ID:1のパッドしか読みに行かないゲーム はどんな内容でもスティックで遊ばないといかんのです。RPGでも。 コンパネから「6ボタンゲームパッド」を削除するとDPPのサターンパッドがID:1 に繰り上がるのでいいんですが、面倒くさい。 全てのパッド入力を合成するか、もしくはゲーム初期化時にゲームパッドが複数 検出出来た場合はどれか一つを選べるように作って欲しいなーと思うのでした。 ちなみに、やたらたくさん繋いで、全てを検出してみた画像がこれだー。