■
キャプチャーいじって、配線周りの拡張して、もんもんと考え事をして一日終わる。
■
コントローラのアナログ入力について考える。
最近のゲームには方向入力がデジタル・アナログ両対応のものがある。
アナログ入力は、そのまま使用できるが、デジタル入力はそのまま使用できない。
・押したキーの時間に応じてアナログの押し具合に相当した値に置き換えて、仮想アナログ入力値のベクトルを進める
・離したキーは、時間に応じて仮想アナログ入力値のベクトルを戻す
書いてしまうとまとまっているように見えるが、これらのデータをどのように持てばよいか、ベストといえる案が自分の中でまとまっていない。
悶々と考える。
# 明日以降に続く?
■
仮想アナログ入力?の話の続き。
まず悩んだのが、ベクトルを座標((0,0)からの(x,y))で持つか、角度と長さで持つか。
角度と長さで持つと、ボタンを離したときの戻しが、(現在の長さ - 減算値)で済みます。
全てのキーが離されたときも、角度を持っているので向きが維持できます。
ん? ひょっとしてベクトルとは別に現在の入力情報を維持してないとダメなのか。
向きが45°で入力キーがニュートラルのときに真上を押すと、垂直方向にゆっくりと向いていってくれないといけない。
そんでもって、ベクトルも補正される・・・んじゃなくて、ニュートラル時は(0,0)-(0,0)の45°なんだから、ここから(0,0)-(0,127)の90°になっていけばいいのか。
ベクトルと入力方向は非同期でもいいのか。
なんか小言っぽいなぁ・・・まぁ、この日記はメモだし(w
■
"キー入力"でgoogleしたら引っかかったサイト。
GBAプログラム研究所。
なんかスクリーンショットとか豊富でかなり先進的なんですけど。
つか、GCのディスクをPCのDVDドライブに入れてみたら認識すらしませんでした。CD-Rにも入れてみたけど同様でした。
逆に、GCに8cmのオーディオCDを入れたら認識してくれるのか? 15cmのCDは物理的に入らなかったので、8cmのDVD-Rとか出てくれないと、ブータブルなディスクを作ることは出来ないのか?
ちょっともったいない気がする・・・。
■
唯一のGCエミュレータ?らしい"Dolwin"でgoogleしてみて見つけたサイト。
趣味のRipping。
リッピングがメインのサイトみたいですが、トップのFC pad on USBに漢気を感じました。
有益な情報がありそうなので、帰ってからよく読もうと思います。
この日記、メモだし。
■
ベクトルの角度を算出するにはどうすればいいか。googleして見つけたサイト。
直線(ベクトル)の角度を求める。
rad = ( acos( X / sqrt( X^2 + Y^2 ) ) / π ) * 180
以上の公式で rad は 180 〜 0 〜 -180 になるので、360°で扱いたい場合は、ゼロ度境界軸で(360 - rad)する必要がある。
ちなみに、(X/sqrt(...))だと(0,0)-(1,0)がゼロ°になる。(Y/sqrt(...))だと(0,0)-(0,1)がゼロ°になる。
で、sqrtが遅い。ドリキャスでdouble(and float)なんて使う気にならない。
かといって、テーブルで持てるほど平方根の数値幅は狭くない。
んで、"平方根"と"高速化"でgoogleして見つけたサイト。
高速sqrt()関数(K's Net for PlayStation's Programing)。
高速な平方根のロジックを公式から解説されてます。
帰ったら実装してみよう。この日記、メモだし。
■
韓国から来ているPGの人がビザの更新に帰るらしい。
で、それの案内のメールの文章の添削を頼まれた。
釜山(プサン)を「プサン」と読めずに「'かまやま'ってどこですか?」と聞いたら、かまやまじゃなくてプサンと切り替えされた。
メールが展開される人の半分は読めないだろうから、読みがなつけてもらったんだよーだ:-D
■
平方根のコード。
unsigned long lsqrt( unsigned long lValue, unsigned long lRate )
{
unsigned long lBase, lRes, lNum, lDiv;
if( lValue <= 0 ) return 0;
lBase = lValue;
do
{
lRes = lBase;
lNum = lValue * lRate;
lDiv = (lNum / lRes);
lBase = (lDiv + lRes) / 2;
} while( lBase < lRes );
return lRes;
} |
lValue がルートに入る値で lRate が計算(桁上げ)精度です。
10万倍するとキャリーが発生して解が狂ってきます。
とはいえ、1万倍(ex:√2≒14142)ぐらいの精度があればゲームユースでは不自由しないと思います。
ああ、もう寝るぞ〜・・・。
■
ちょっと訂正。
lsqrt( ((255 * 255) + (255 * 255)) * 1000 ) でキャリーしました。
・・・512倍ぐらい?
■
Perlでhtmlファイル群の特定のタグを置き換えるスクリプトを組む。
Perlなんてやったことなかったので、リファレンス探しながらあーでもないこーでもないと試行錯誤しながら組んでみました。
何とか完成させ、置換え対象のルートに移動して、いざ実行。
・・・感動。
手作業でやったら途中で投げるだろう作業がほんの十数秒。
つーか、スクリプトで置換えがこんなに簡素に出来るなんて、いい意味でショックです。
ソースをまたいで置換えなんて・・・夢のようです。
あと、置換え対象ディレクトリは、階層化されてるんですけど、サブルーチンが再帰呼び出しできるので、下層にも楽に潜れます。
知ってる人からしたら当然、というか既に通過している場所なんでしょうけど。
■
アナログ入力やらacos遅いなぁ問題、の結論。
もうめんどくさいのでfloat使います。
そもそも、身骨削って最適化しても無駄と言う結論に至りました。
作る過程がつまらなかったら形になるまで息が続かないような気がしてきたし・・・今までもそうだったし。
作る過程が楽しくて、さらに完成後もみんなで遊べて楽しい。そんなゲームにしたいなぁ>TurnTurret
# 完成するまで持つかも不明なわけだし
ってことで、だらだら小言書いてもしょうがないので寝ます。
■
朝、久々に寝坊する。
とはいえ、最近の通常出勤ペースからの寝坊なのでコアタイムには遅れない。
■
午前中。
資料をぬぼーっと眺めながらウトウトしかける。
おとついの作業が響いているなぁ・・・。
■
昼。
あまり食うと確実に寝る、と思ったのでがっつりした物は避ける。
それでも眠くなる。
誰か助けて・・・。
■
昼その2。
ミントとガムに助けられてようやくエンジンがかかる。
ごめんなさい、駄目社員で。
■
職場懇談の飲み会に参加。
「IT用語でえろいのはなんだ?」と語る反面、女の子にメイクされる人がいたりはじけまくっていた。
新しく入ってきたリーダーは星野監督に匹敵しそうなぐらいの強力キャラだということが判明するし、このチームもメンバ変わったなぁ・・・。
■
TrunTurret。
移動・旋回周りを実装・デバッグ。
キーボードでも意外にスムーズに動いた。一番操作しにくいのはハットスイッチと十字キーかもしれない。
弾と爆破のエフェクトを早めに準備して、次は攻撃の当たり判定を実装しよう。
■
カウンセリングの日。
昨日は、夜遅かったのだが、意外にもすっきりと目覚めた。
最近、C760をあまり触っていない。
時間が空いたときの日記書きぐらいにしか使えていない。
とはいえ、エディタが持ち歩けるだけでも随分幸せだったりするのだが:-D
■
最近、おぼろげながら朝の目覚まし(コンポ)に一応反応するようになってきました。
忙しかった頃は、ガンガンなっていようがまったく平気(駄目だろ)で、KUMU氏が泊まりに来たときに「俺が起こされたわ!! なんでお前平気やねん」といわれた頃があるぐらい。
忙しすぎるのは駄目ということか。
■
C760。
keyHelperを入れ替える。
ついでに keyhelper.conf と keyhelper.xml を入れる。
# ~/Stting に入れればいいなんて知らなかった。
タスクセレクタがあるのも知らなかったし、知らないことづくしだったりする。
■
SNES9xをC760で動かしたい為に、SDL-1.2.6をビルドしてみる。
・・・動かない? 表示が何か崩れているようである。
1.2.6で試したのが悪かったのか?
調べようとしたらバッテリー警告が出たので、調査ストップ。
素直に1.2.5にしとけばよかったか?
■
帰宅。
んで、9x@C760。
QVGAで動いたんだけど、画面が180度逆転していてゲームにならない。
さっさと1.2.5に入れ替える。
ばっちり、動いとる。ファミ探は問題なく遊べる。
ただ、-hiオプションをつけないと題字がきちんと表示されない。
シミュレーションやらアドベンチャーやら操作系を駆使しなくていいゲーム専用ですな。
■
TurnTurret。
戦車が弾撃てるようにする準備。
if( 1/*リピート制限中でなければ*/ ) Entry_Shot(...); /*箱庭の弾幕リストに登録*/
みたいな処理を書くだけ書く。
仕事でデータのファイル保存・読出をしないといけない。
旧バージョンのデータもちゃんと読めないといけないらしい。
考える力をそちらに回さないといけないので、具体的なロジック実装は週末までお預けだろう。
■
仕事場のT口くんと「リファクタリングとはなんぞ?」という話になる。
自分が「動いているものにあえて手をつけるのはリファクタリングじゃないぞ」と言ったら、「動いているものにも恐れずに よりシンプルに設計しなおす。これもリファクタリングですぞ」と言い返された。
ちょうどスラドで
リファクタリングは趣味の世界?というトピックがあったので、ちょっと考えてみた。
リファクタリングっていうのは、「システムの外郭を変えずに中身をシンプルにする」って作業?であり、それを行うにあたって無茶はしない(エンバグしたり、デグレードしたりしない)のが前提だと思うんですが。
T口君の言っていることは、とても危険を伴う作業なんじゃないかなぁと思います。
# テスト前だから見直すのもありだと思うけど、現状はジョブが山積みで十分に見直す時間がないって背景もある。なんにしても言い方が荒っぽい。
# まぁ、T口君はここ見てないから、関係ないか:-P