「オタ」「きもい」──スタッフのブログ発言、企業を巻き込む騒動に

Posted on

「オタ」「きもい」──スタッフのブログ発言、企業を巻き込む騒動に

どうも最近よくみかける「きんもーっ☆」はここが発祥だそうな.

きもいは「気持ち良い」の省略でほめ言葉です(無謀

まとめサイトはこちら

なかなか大変ですね.ブログで愚痴はきたくてもはこうとしたら特定されるくらいの情報は書いちゃうわけだし.

まあ「チラシの裏」が最適ってことか.

色盲かどうかをチェック!

Posted on

某氏に上の絵について「色使いがおかしい.色盲じゃね?」との意見があったので,

こちらをつかってやってみようかなと.

一応全部正解でしたが,一番上左の25に比べてその横の29がすこし見づらい.

たぶん正常の範囲内ですけど,絵描きには向いてないかもしれませんね・・・.

あ,あとぉ,被害者(涙)を増やさないように言っておくよぉ.

http://www.liquidgeneration.com/sabotage/vision_sabotage.swf

だけは絶対みるなよぉ!!!!!1111

見かけは単なる色盲テストだけど・・・.

一回引っかかった_| ̄|○

ペンタブキタ━━━━━━(゜∀゜)━━━━━━ !!!!!

Posted on

注文してたのが来ました.

これです.

安くって買いました.スクロールマウスはUSBバスの関係で付けられなかったけどw

ハブ買ってくるか~.

「遠隔操作だから難しい」という意見が結構あったんですけど,最初は難しかったんですけど慣れれば簡単なもんですね.

絵が下手だから気づかないのかな・・・.

まともなDSエミュが出てきたら活躍しそうです.

とりあえず君のためなら死ねるの体験版やってきましたけど,中々Good.

どうせなので絵をうpしてみるテストw

f:id:ledyba:20050825044037p:image

・・・アドバイス下さい_| ̄|○

なんでミロカロスなのかっていうと,ヘタクソなのがばれ難いから つД`)

人とかは見慣れたものですから,ヘタクソなのがばれやすいです(‘A`)

DISARMを16進数表示にするようにしたよ

Posted on

disarmというソフトをご存知でしょうか?

こちらで公開されている,ARMの逆アセンブラソフトです.

勿論GBAのROMを解析する時に良く使うわけですが・・・.

このソフトは数字の出力が「10進数」なんです!

で,それを書き換えて16進で表示させてやろうと.

適当に落としてきてgccでコンパイルしてみました.

***>make
gcc -O2 -mno-cygwin -c disarm.c
cc1.exe: Invalid option `no-cygwin'
In file included from disarm.c:19:
dis-asm.h:65: field `type name' has incomplete type
dis-asm.h:67: field `type name' has incomplete type
dis-asm.h:73: field `type name' has incomplete type
disarm.c: In function `dislarm_init':
disarm.c:143: warning: assignment from incompatible pointer type
disarm.c:144: warning: assignment from incompatible pointer type
disarm.c:146: warning: assignment from incompatible pointer type
make: *** [disarm.o] Error 1

工エエェェ(´д`)ェェエエ工

ちゃんとGCCつかったお!?

うーん・・・逆汗でもするか・・・?

と思ってとりあえずソースでも覗いてみたところ,16進数か10進数かの変更は関数の書式設定で設定されている模様.

こちらに書式に関する情報があります.

ということは,逆汗で覗いてもフォーマット情報は残っているはず.

逆アセンブラで覗いてみたところ,案の定こんな感じでした.

00403524   . F7C1 00008000  TEST ECX,800000
0040352A   . 75 05          JNZ SHORT DISARM.00403531
0040352C   . B8 2E2E4000    MOV EAX,DISARM.00402E2E
00403531   > 50             PUSH EAX
00403532   . 68 432E4000    PUSH DISARM.00402E43                     ;  ASCII "], %s#%d"
00403537   > 8B4D FC        MOV ECX,DWORD PTR SS:[EBP-4]
0040353A   . 51             PUSH ECX
0040353B   . FFD7           CALL EDI
0040353D   . 83C4 10        ADD ESP,10
00403540   . E9 50030000    JMP DISARM.00403895
00403545   > 68 4C2E4000    PUSH DISARM.00402E4C
0040354A   . E9 86010000    JMP DISARM.004036D5

ちゃんと残っています.ということは,バイナリエディタで書き換えれば良いんじゃないの?

ということで書き換えたところ・・・.

***>disarm "POKEMON EMER.gba"
00000000 ea00007f       b       $00000204
00000004 51aeff24       movpl   pc, r4, lsr #1e
00000008 21a29a69       movcs   r9, r9, ror #14
0000000c 0a82843d       beq     $fe0a1108
00000010 ad09e484       stcge   4, cre, [r9, -#210]
00000014 988b2411       stmlsia fp, {r0, r4, sl, sp}
00000018 217f81c0       cmncs   pc, r0, asr #3
0000001c 19be52a3       ldmneib lr!, {r0, r1, r5, r7, r9, ip, lr}
00000020 20ce0993       smullcs r0, lr, r3, r9
00000024 4a4a4610       bmi     $0129186c
00000028 ec3127f8       ldc     7, cr2, [r1], -#3e0
0000002c 33e8c758       mvncc   ip, #1600000
00000030 bfcee382       swilt   0x00cee382
00000034 94dff485       ldrlsb  pc, $000004c1
00000038 c1094bce       tstgt   r9, lr, asr #17
0000003c c08a5694       umullgt r5, sl, r4, r6
00000040 fca77213       sfmnv   f7, 4, [r7], #4c
00000044 734d849f       cmpvc   sp, #9f000000
00000048 619acaa3       orrvss  ip, sl, r3, lsr #15
0000004c 27a39758       undefined
00000050 769803fc       undefined

16進数キタ━━━━━━(゜∀゜)━━━━━━ !!!!!

成功です!

こんなんじゃ駄目だ!

GBA用ならベースアドレスを0x08000000にしなきゃ!ということで,

BCC Developer

を使って適当にやろう(駄 と画策したところ,やっぱり同じところでエラー.

どうもヘッダファイル中にenumで何かを宣言しているところで駄目な模様.ってか,enumって何?

というわけで検索してきました.Javaとは案外ちがうもんですね.

こちらの最後の方にあります.

どうもint型で並び方に関係する型らしい.

・・・でも,ソース中にあるのは

enum arch;

普通の変数みたいな宣言です.上のページで紹介されていたような宣言の仕方じゃない.

エラーが出ている所をすべてenum型からint型に変えれば・・・.

わーい通ったー!!

大体の感覚はJavaと一緒なのでカスタマイズするぐらいなら簡単にできますね.

早速完成.以下にうpします.

http://briefcase.yahoo.co.jp/bc/ryotsukankichi2/lst?.dir=/Soft

今後の課題

システムコールを表示してくれると便利かも?

そのためにはソースの解読が必要みたいですね・・・.

またオセロプログラム書いてるんだけど

Posted on

こんな本かって来ました.

とりあえず今の状態を確認してみたところ,家にあった昔のVAIO-C1MRX(クルーソー0.7GHz)で動かしても,今のメインマシンのテトラ君2号(Pen4 3.0GHz)でも大して速度が変わらないんですよ.

CPUが違うとはいえ,クロックがこんなにも違うのに実行速度が同じってことは,別の部分に足を引っ張られて思考ルーチンが遅くなっているということ.

で,真っ先に思い浮かぶのがメモリアクセス.かなり無茶してます.盤面を元に戻すために配列のコピーをしたりとか普通です.

ぱっと本を読んだところ,メモリアクセスを最低にするためのテクなんかも載っているようです.

オリジナリティを無くさないためにほどほどにしつつ,参考にしたいと思います.

修飾キー設定用のJButton拡張クラス・キーリスナを設計しよう

Posted on

タイトルのとおりです.私が色々やった結果を乗っけてます.

ソースは汚いのであまり乗せたくない・・・.

キーリスナに関して

KeyEvent#getModifiers()やKeyEvent#getKeyCode()を使って判断していきます.

何のキーを押しているかどうかを判断するには,KeyTypedかKeyReleasedを使うしかありません.

また,KeyReleasedを使うと,ユーザが

  • 修飾キーを押す
  • 別の普通のキーを押す
  • 修飾キーを離す
  • 別の普通のキーを離す

という順番で入力した場合,修飾キーしか判断されません.

(離す順番が逆なら大丈夫.)

というわけでKeyPressedを使って判断します.

しかし,KeyPressedを使ってもユーザが修飾キーを押せば修飾キーのみを,普通のキーを押せば普通のキーしか判断されません.

というわけで修飾キーの時は無視します.

最終的にKeyPressedのソースはこんな感じ.

public void keyPressed(KeyEvent e){
if(e.getKeyCode() == e.VK_SHIFT ||
e.getKeyCode() == e.VK_CONTROL ||
e.getKeyCode() == e.VK_META ||
e.getKeyCode() == e.VK_ALT){}else{//修飾キーの場合は無反応
/*キーの検出*/
/*ボタンテキストにキーのテキストを設定*/
/*キーの設定*/
/*リスナ(自分)の削除*/
}
}

KeyEvent#getSource()を使うとソースが省略できるかも.

Java:ショートカットをつけよう

Posted on

Frame.addKeyListener(KeyListener e)では取得できない!

とりあえず真っ先に思いつく方法としてキーイベントを使ってみる方法があると思うんですが・・・.

ここを見る限り,フレーム上にキーリスナを取得しそうなコンポーネントがあると,もうだめ.

JFrame#processKeyEventをオーバーライドしてみるが・・・しかし・・・駄目.

このメソッドでキー入力は全て処理しているはずですから,これをオーバーライドすれば良いに違いない!

というわけで,オーバーライドしてショートカット処理をしてみたのですが,どうも呼ばれません.

デバッガで確認済み.ここに通知が来ないということなんですね・・・.

InputMapを使え!

こちらを見てください.これのとおり,InputMapとActionMapを組み合わせて使えば,出来るのではないかな・・・と.

とりあえず実装してみました.

・・・お,出来る!カンペキです.

ただし,問題点があって,ShiftやAltなどの修飾キーだけでは使えません・・・.

これは仕方が無いですね・・・.逆に修飾キーが無くても使えるので,まあ十分でしょう.

ショートカットキーに必ず修飾キーをつけなくちゃいけないというのも面倒ですから.

なに!Javaからネイティブコード使えるの?

Posted on

Javaからネイティブコードを使ったプログラムが書けるらしい!

これなら妄想が実現できるかも!?

ここを参考にBorland C++ Compilerで組んでみますか・・・.

あと問題になるのは,プラグイン方式をどうやって実装するか.

サブクラスの検出とか出来るのかな・・・?

教えてえろいひと.

理想の全自動操縦ソフト

Posted on

どうせ技術から言って出来るわけが無いんですが,とりあえずアイデアぐらいなら出せるわけで.

エミュレータからメモリの値を取得できることが必須条件と思われます.

それによって,

・現在の主人公の場所

・パソコンを開いてるときは今どのポケモンを指しているのか

・個々のポケモンの個体値

・タマゴは生まれているのか,いないのか・・・

などなど様々な情報を読み込んでその情報をもとに操作できるわけです.

とりあえず誰かファイヤーリーフ以降の解析対策について教えて下さい・・・_| ̄|○

個々のゲームごとの解析対策に関しては,プラグイン方式で簡単に対応できると良いですね.

で,メモリを取得してそれを使ってうまくやれば

  1. そろそろ寝る時間だ
  2. エミュレータをおもむろに開き必須の個体値をセットする(めざパゴースト威力 == 70 && 攻撃とすばやさ == 31 など)
  3. 寝る
  4. うわーい良個体値ゲットだぜー

という凄い電気代の無駄使いが出来るわけですw

正直そこまでやるなら改造使ったほうが・・・いや,なんでもない.

規約とか気にせずにいられるから良いんだよ!

もしも電気代を無駄使いしたくなければ喜虎さんがやろうとしてるGBAに専用のハードウェアをつける,という方法が考えられますが,もしもメモリの中身を見たければPARをハックして自由に使えるようにしなければならない訳です.かなり,大変.

またPARはフックと呼ばれる動作を行うためにメモリをほんの一部使うようなのですが,もしかしてゲームが使うメモリ空間と被ってんじゃないの?

などなど結構不安要因は残ります.

あ,いいこと思いついた.

PARでフックを行ったときに飛ばすプログラムをうまく書き換えればPARのみで自動操縦できない?

出来るなら一番気楽ですよね.

それは普通の改造コードとして書き換えられるのかな?持ってないから分からないんですけど>PAR

メモリに手をつけてる点でもう改造になっちゃうから大会には出れない上に*1,メモリ上にそこまでの結構大きなプログラムを書くほどの容量が残ってるとは思いませんけど.

*1:PARで自動操縦したかったら,フックを行って飛ばした先のプログラムでキー入力を保存している所を書き換えなくちゃいけない