「オタ」「きもい」──スタッフのブログ発言、企業を巻き込む騒動に
どうも最近よくみかける「きんもーっ☆」はここが発祥だそうな.
きもいは「気持ち良い」の省略でほめ言葉です(無謀
なかなか大変ですね.ブログで愚痴はきたくてもはこうとしたら特定されるくらいの情報は書いちゃうわけだし.
まあ「チラシの裏」が最適ってことか.
僕は何者にもなれなかった。
いや、僕はついに力を手に入れたんだ。
僕を必要としなかった世界に復讐するんだ。
やっと僕は透明じゃなくなるんだ。
(輪るピングドラム 23RD STATION 「運命の至る場所」)
「オタ」「きもい」──スタッフのブログ発言、企業を巻き込む騒動に
どうも最近よくみかける「きんもーっ☆」はここが発祥だそうな.
きもいは「気持ち良い」の省略でほめ言葉です(無謀
なかなか大変ですね.ブログで愚痴はきたくてもはこうとしたら特定されるくらいの情報は書いちゃうわけだし.
まあ「チラシの裏」が最適ってことか.
某氏に上の絵について「色使いがおかしい.色盲じゃね?」との意見があったので,
こちらをつかってやってみようかなと.
一応全部正解でしたが,一番上左の25に比べてその横の29がすこし見づらい.
たぶん正常の範囲内ですけど,絵描きには向いてないかもしれませんね・・・.
あ,あとぉ,被害者(涙)を増やさないように言っておくよぉ.
http://www.liquidgeneration.com/sabotage/vision_sabotage.swf
だけは絶対みるなよぉ!!!!!1111
見かけは単なる色盲テストだけど・・・.
一回引っかかった_| ̄|○
注文してたのが来ました.
安くって買いました.スクロールマウスはUSBバスの関係で付けられなかったけどw
ハブ買ってくるか~.
「遠隔操作だから難しい」という意見が結構あったんですけど,最初は難しかったんですけど慣れれば簡単なもんですね.
絵が下手だから気づかないのかな・・・.
まともなDSエミュが出てきたら活躍しそうです.
とりあえず君のためなら死ねるの体験版やってきましたけど,中々Good.
どうせなので絵をうpしてみるテストw
・・・アドバイス下さい_| ̄|○
なんでミロカロスなのかっていうと,ヘタクソなのがばれ難いから つД`)
人とかは見慣れたものですから,ヘタクソなのがばれやすいです(‘A`)
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にしなきゃ!ということで,
を使って適当にやろう(駄 と画策したところ,やっぱり同じところでエラー.
どうもヘッダファイル中にenumで何かを宣言しているところで駄目な模様.ってか,enumって何?
というわけで検索してきました.Javaとは案外ちがうもんですね.
こちらの最後の方にあります.
どうもint型で並び方に関係する型らしい.
・・・でも,ソース中にあるのは
enum arch;
普通の変数みたいな宣言です.上のページで紹介されていたような宣言の仕方じゃない.
エラーが出ている所をすべてenum型からint型に変えれば・・・.
わーい通ったー!!
大体の感覚はJavaと一緒なのでカスタマイズするぐらいなら簡単にできますね.
早速完成.以下にうpします.
http://briefcase.yahoo.co.jp/bc/ryotsukankichi2/lst?.dir=/Soft
システムコールを表示してくれると便利かも?
そのためにはソースの解読が必要みたいですね・・・.
こんな本かって来ました.
リバーシのアルゴリズム C++&Java対応―「探索アルゴリズム」「評価関数」の設計と実装 (I・O BOOKS)
とりあえず今の状態を確認してみたところ,家にあった昔のVAIO-C1MRX(クルーソー0.7GHz)で動かしても,今のメインマシンのテトラ君2号(Pen4 3.0GHz)でも大して速度が変わらないんですよ.
CPUが違うとはいえ,クロックがこんなにも違うのに実行速度が同じってことは,別の部分に足を引っ張られて思考ルーチンが遅くなっているということ.
で,真っ先に思い浮かぶのがメモリアクセス.かなり無茶してます.盤面を元に戻すために配列のコピーをしたりとか普通です.
ぱっと本を読んだところ,メモリアクセスを最低にするためのテクなんかも載っているようです.
オリジナリティを無くさないためにほどほどにしつつ,参考にしたいと思います.
タイトルのとおりです.私が色々やった結果を乗っけてます.
ソースは汚いのであまり乗せたくない・・・.
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()を使うとソースが省略できるかも.
とりあえず真っ先に思いつく方法としてキーイベントを使ってみる方法があると思うんですが・・・.
ここを見る限り,フレーム上にキーリスナを取得しそうなコンポーネントがあると,もうだめ.
このメソッドでキー入力は全て処理しているはずですから,これをオーバーライドすれば良いに違いない!
というわけで,オーバーライドしてショートカット処理をしてみたのですが,どうも呼ばれません.
デバッガで確認済み.ここに通知が来ないということなんですね・・・.
こちらを見てください.これのとおり,InputMapとActionMapを組み合わせて使えば,出来るのではないかな・・・と.
とりあえず実装してみました.
・・・お,出来る!カンペキです.
ただし,問題点があって,ShiftやAltなどの修飾キーだけでは使えません・・・.
これは仕方が無いですね・・・.逆に修飾キーが無くても使えるので,まあ十分でしょう.
ショートカットキーに必ず修飾キーをつけなくちゃいけないというのも面倒ですから.
Javaからネイティブコードを使ったプログラムが書けるらしい!
これなら妄想が実現できるかも!?
ここを参考にBorland C++ Compilerで組んでみますか・・・.
あと問題になるのは,プラグイン方式をどうやって実装するか.
サブクラスの検出とか出来るのかな・・・?
教えてえろいひと.
どうせ技術から言って出来るわけが無いんですが,とりあえずアイデアぐらいなら出せるわけで.
エミュレータからメモリの値を取得できることが必須条件と思われます.
それによって,
・現在の主人公の場所
・パソコンを開いてるときは今どのポケモンを指しているのか
・個々のポケモンの個体値
・タマゴは生まれているのか,いないのか・・・
などなど様々な情報を読み込んでその情報をもとに操作できるわけです.
とりあえず誰かファイヤーリーフ以降の解析対策について教えて下さい・・・_| ̄|○
個々のゲームごとの解析対策に関しては,プラグイン方式で簡単に対応できると良いですね.
で,メモリを取得してそれを使ってうまくやれば
という凄い電気代の無駄使いが出来るわけですw
正直そこまでやるなら改造使ったほうが・・・いや,なんでもない.
規約とか気にせずにいられるから良いんだよ!
もしも電気代を無駄使いしたくなければ喜虎さんがやろうとしてるGBAに専用のハードウェアをつける,という方法が考えられますが,もしもメモリの中身を見たければPARをハックして自由に使えるようにしなければならない訳です.かなり,大変.
またPARはフックと呼ばれる動作を行うためにメモリをほんの一部使うようなのですが,もしかしてゲームが使うメモリ空間と被ってんじゃないの?
などなど結構不安要因は残ります.
あ,いいこと思いついた.
PARでフックを行ったときに飛ばすプログラムをうまく書き換えればPARのみで自動操縦できない?
出来るなら一番気楽ですよね.
それは普通の改造コードとして書き換えられるのかな?持ってないから分からないんですけど>PAR
メモリに手をつけてる点でもう改造になっちゃうから大会には出れない上に*1,メモリ上にそこまでの結構大きなプログラムを書くほどの容量が残ってるとは思いませんけど.
*1:PARで自動操縦したかったら,フックを行って飛ばした先のプログラムでキー入力を保存している所を書き換えなくちゃいけない