ToDo:
さらになんか書く
https://twitter.com/gusmachine/status/603764063487799297
で「レコードキープできてない」とか言われてるけど、 2ch ではどっちかというとレコードブレーカーとして親しまれている。このあいだはネクロフォビア戦でギルガメッシュが出てきた時に音が変わらなくて悲しかった。ビッグブリッジでは戦闘じゃない時も音楽そのまま、みたいなのをやってくれてたのにな。。
ただ僕はあまりレコードブレーカーというのは賛同してなくて、というのは FF ってもとから割とこういうゲームだった気がするな、ていうのがあって、文句を言ってるがそれなりに楽しい。
難易度については、2時間くらいやりなおしまくってる戦闘があったりして、きついけど、5,6は初プレイからして低レベル気味クリアだったので、まあ僕にとってFFはそういうゲームだった。
あとなんか色々ヘンなことがあるのもバランスがおかしい気味なのも、FFはもともとそういうゲームだったというか。バランスはこうバナン死にまくりの超きつい川オルトロスの後にフェニックスの尾一撃死の魔列車が来たりとか。ボスが厳選されてるDQと比べると、やたらボス数多いから色々すごいのが来るんだよな。
ヘンなとこっていうのもそうで、FF2は仲間殴ってるゲームだった(が、ごく最近教えてもらったけど仲間殴りはよくなかったらしい http://www.geocities.co.jp/SiliconValley-Sunnyvale/6160/ff8/ff8end.htm)し、 FF3 は「た5」しか覚えてないし、 FF4 もセシルが遅い方が有利らしいし、 FF5 も魔法剣乱れうちのファンキーな威力とか、カーバンクルしてから味方に全体魔法かけると2倍とか、そういう。
一番思い出のある FF6 に至っては、もうなんか色々ヘンだったな。バニシュデス、きかい装備、ラ系のエフェクトでガ系のダメージ出してたロッド、HP減ると強い武器のはずなのに別に減らなくても異様に強いバリアントナイフ、バランスとか考えてる気配のない皆伝の証、ソウルオブサマサ、スリースターズ。最強キャラ作ろうとすると必然的に低レベル進行になるし、なんかファイアで9999出したりするし、ホントなんだったんだあのゲーム。
FFRK について。
ガチャで強い武器出てたら無双だったらしい。この頃はあまりよく知らないけど。なんか武器性能のインフレがあまり無いゲームなので、そのへんの武器は今でも強い。
ボスのHPが基本的に低く、そして攻撃力が強かった。普段の攻撃の2倍ダメージを当てる全体攻撃とかを持ってる感じのボスが結構いて、それが2回来ると全滅するので倒せるまでその攻撃が来ないことを祈る、みたいなゲームだった。全体回復が無いことも祈りゲーに拍車を。
FFいくつに出てきたのか知らんけど、かまえるという簡単に作れるアビリティがやたら強い時代が続く。かまえるは、2.5ターンほど、殴られたらそれがミスってカウンターで殴るというアビリティ。これが何故か、かまえてる間に仲間に殴られたら敵にやつ当たりするというおかしい仕様。
と、なんだか、特に課金してない人たちにとって便利すぎるものをずっと使うゲームだった。一人強いキャラを作れれば後の仲間はカスで良いので。あとクラウドがなんか他と比べて強くて、しかもかまえられるので、みんな基本クラウドを杖で殴るゲームだと思ってたと思う。
LV50 がカンストだったのだけど、順次キャラが 65 まで上げられるようになりつつ、50を越えたキャラはレコードマテリアというパッシブスキルが持てるようになる。
それと同時にクラウドが限界突破したので、引き続きクラウドを殴るゲームだった。稀に即死の追加効果があるような武器でクラウドを殴ってて、かまえるが切れた瞬間に殴っちゃってクラウド即死、みたいなことも稀によく起きてかわいそうな人だと思う
友達の必殺技を1-3回戦闘中に使えます、って機能が増える。後で2回固定になる。
必殺技は強いが、キャラが弱いからパーティには入れないけどフレンドとしては便利、みたいなやつらが脚光を浴びる…というか主人公の「鉄壁のグリモア」という必殺技が、仲間全員の全ダメージ6割減、5ターンくらい?持続します、効果持続期間中にもう一度かけるとさらにダメージ減衰率が上がります、みたいなイカレ性能だったので、なんかみんなそれをフレンドにする
つまり友達の必殺技2回使えるというか、10ターンくらいダメージ6割減を実現できますというシステムに思えた。いや他にもいくつか有用なのがあるけど
そのうち、敵の攻撃力が、鉄壁+プロテスorシェル+デバフを2つ以上使ってることを前提としてるような強さになる。戦闘開始時にバフデバフ前にくらうと全員に3000当たるような攻撃が、1ターン経過してバフデバフしっかりするとダメージ300、みたいな感じになる。ここは強いボスなので回復魔法は持たずに行こう、みたいなよくわからないことが起きる
よって1ターン目にこっちが先手取ってバフデバフ決められるまでやり直すのが定着した。やり直すたびに見せられるので、台詞があるボスとかが嫌いになる。
しかし依然としてクラウドは殴られ続ける。たしかこのへんで通常攻撃が連続斬りになる、的なパッシブスキルが増えて、これを白魔につけるとクラウドを杖で殴ってる白魔がパーティ一のダメージソース、みたいなおかしな状況が増えた。
強いアビリティが増えたり、強いアビリティの使用回数を増やせるようになったり、パーティ5人にいきわたる程度のそれなりに強い装備がそろったりしてきて、かまえるが相対的に弱くなっていく。全員の攻撃力が同じなら、かまえるに使ってるターンとアビリティスロットがムダなのである。
あと黒魔導師が順次限界突破していったことと、敵の物理防御が高くなっていったのもあり、なんだか物理より魔法がいいじゃんという感じにシフト。
どんどんそれはエスカレートしていき、クラウド殴り全盛期はクラウド、クラウドに連続斬りをする役割*2、デバフつき攻撃役、暇な時にクラウドを殴る白魔、みたいな構成が多かったのに、気がついたら全員後列魔法使いで、ザコ戦は全体魔法で一掃、ボス戦はアビリティつきるまでにボスが死にますように、と思いつつ魔法撃ちまくるゲームに。
たまに間違ってボスに効かない属性の魔法持っていって、あれアビリティ撃ち切ってもボス死なねーじゃん、みたいな愚かなことが起きたり。そしてめんどくせーから無属性魔法を愛用したりする。
敵の魔法防御を上げつつある…ように見える。まあほど良いバランスになりそうな気がする。
そういえば一貫して UI が遅いという不満があると思う。 FFRK の UI はネイティブじゃなくて webview らしく、そのせいで遅いというように観察されている。つまり悪いのは、これからは web 技術でアプリ作りましょーと奨励した会社と、 webview を作ってるチームな気がして、ええと。。。
(18:16)
そういえばこれがなかなかロックだよね
>>> 'r'=='r' True >>> 'r'==''r'' False >>> 'r'=='''r''' True >>> 'r'==''''r'''' File "<stdin>", line 1 'r'==''''r'''' ^ SyntaxError: EOL while scanning string literal >>> 'r'=='''''r''''' False >>> 'r'==''''''r'''''' False >>> 'r'=='''''''r''''''' True >>> 'r'==''''''''r'''''''' False >>> 'r'=='''''''''r''''''''' True
(21:33)
過去に、まあこれはできるんでないの、って深く考えず書いてたら結構大変だったものがああって。
http://shinh.hatenablog.com/entry/20081109/1226217059
「数字もまぁなんか消せると思う」→1年半以上経過して http://d.hatena.ne.jp/ku-ma-me/20100709/p1
http://shinh.skr.jp/slide/mederu/041.html
「evalはできそうなもんだけどたぶん誰もやってない」→数年の時を減て http://shinh.hatenablog.com/entry/2015/05/09/032904
ええとつまり、言いたいことはこう僕は結構無責任に、うーんそれはできるんでないの、かな、と言いつつやってないことがあるということであり、これはまさしくフェルマー先生気取りと言えるとかなんとか。
というわけで思いつきで誰か研究すれば良いのでないの、ていう事項について書いておきます。ざっくり言って上の方が簡単な気がしている。
http://golf.shinh.org/reveal.rb?Quine/ais523%28genuine%29_1424105627&bef
が既に見事な答えなのだけど、 " を使うと自分を参照してるぽくてアレなので、 p, q, " を使わずに Befunge 93 の範囲で Quine を書くと良いかなぁとか思う。まぁこれは難しくないはず。
http://shinh.hatenablog.com/entry/2015/05/11/012223
の条件で Quine を。クソでかくて良いのなら自明なんだけど。 mame 先生が next(reversed(range(x))) で x-1 が表現できるよ、と教えてくれたのは天啓だったが、しかしこれだけに頼るとパース時の再帰が深くて死ぬ。
printf でフォーマット文字列とバッファの両方を制御下に置いてる場合、普通はまあ任意コード実行にしてしまうけど、 printf 一発で turing 完全なんじゃないかなあとか。特に ASLR 死んでて libc の実装が固定できてる場合など。
昔っからまあできるんだろうなあと思ってるネタ。
zip で展開したら同じものが出てくる、というのはすでにやられているので、 zip で展開して rar で展開するとまた元のが…みたいな感じで、2種類のアーカイバが混じると楽しいと思う。
僕は Quine Relay (https://github.com/mame/quine-relay) にあまり「頑張ったなあ」くらい以上のことを思ってなくて、基本的に printf を繰り返してるだけだからね。
本気で Quine ファンにやばいと思わせるには、それぞれの言語の Quine が混じる必要があるかなあと思っていて、たとえば
AxB は言語Aと言語Bで実行可能で、 AxB を A で実行すると AxC に、 AxB を B で実行すると CxB に…みたいな感じで、常に2言語 polyglot であり、使用する言語によって方向を決められる…とかするとかなり大変な気がする。 4 languages polyglot quine とかは自明にこの条件を満たすので、 10 言語くらいないとこの条件にインパクトは無い。
md5sum X > Y で X と Y が一致しているとかっこいい
(03:46)
ヒルベルトプログラム気取り的なアレやもしれぬ。
まだあった。
http://golf.shinh.org/p.rb?Hello+transposable+world
以前から、縦読み可能なプログラムとは…とか考えてたのだった。あまりコメントとか使わず、縦読みすると大幅に意味が変わるなどすると素晴らしい。
sedlisp/beflisp を作った時に、究極の目標とされていたもの。何がつらいって、仮にできたとして、現世的な時間でこれが BFLisp としてちゃんと機能している、とデモできるレベルの速度で動く気がしないこと…
(04:17)
他のスマホゲーあまりやってないので、他と比べられないのだけど、前のプロテス耐性(http://shinh.skr.jp/m/?date=20150511)もそうだけど、やらかし系のことが起きるたびに面白い。いくつか記憶に残ってるものを。
まあ総じて1-6に対して扱いが雑というか、まぁあまり詳しくないっぽい
(12:42)
あと dis も色々いけてないがまあ
(16:28)
http://blog.practical-scheme.net/shiro/20150401-editing
ふと見当たったこれにすごく同意した。なんか、全画面 screen とかで生活してるとかってすごいなぁとよく思う。
ただ、フォーカス当たってるやつが手前って決められるとうざい、てのも昔はそう思ってたんだけど、なんか広いディスプレイを使ってウィンドウを重ならないように配置したら問題なくなった。
(02:52)
https://twitter.com/tororosoba/status/597748845624172544
なるほど。
新人のみなさんはどんな会話をうんぬん。何を話したら…という方のために、今でも見ることができる50はめんどくさいから5くらいで
どハマりした問題が…というのは建前で好きな問題を並べてみたかっただけです。
http://terje2.frox25.no-ip.org/perlgolf_history_070109.pdf (minesweeperで検索)
http://golf.shinh.org/p.rb?Minesweeper
隣接した爆弾の数を表示する問題だけど、この Perl の異様な強さが好き。
http://golf.shinh.org/p.rb?FizzBuzz
わざわざ FizzBuzz について語るためだけの会合を開くほどでした
http://golf.shinh.org/p.rb?123
入力が無いので乱数頼り。 DOS 祭りになった
http://golf.shinh.org/p.rb?postfix+to+infix#Ruby
Ruby の解がすごく良くて
http://golf.shinh.org/p.rb?Hello+broken+keyboard
文字種ゴルフ。特殊ルールでは一番好きなやつな気がする
(11:24)
FFRK の新しいボス見てわらった。
何に笑ったかというと、この人の「状態異常耐性」として、毒とか麻痺と並んで、プロテスとシェルってのがあること。 FF でプロテスとかシェルってのはバフであってデバフじゃない。なんでそれに耐性をつけるのか。
これはなんかヘンな裏技チックななにかへの対応。具体的には、例えば、敵にプロテスをかけてから、ハイアーマーブレイクっていう防御力40%減らす技を使い、もう一度その敵にプロテスをかけると、相手の防御力が60%減っている。ヘンすぎる。
理解するにはこのゲームの防御力がどうなってるかを理解しないといけない。そのへんの式とかは公開されてないけど、そこらにある情報と僕自身で適当に調べてみた感じでは、こうなってる:
まあ本当は X に対するデバフが無くなる時どうなるのとか考えると他にもパラメータがあるはずだけど、とりあえずプロテスで防御力が減る現象はこれで説明がつく。
まあこの場合は二回目はプロテスじゃなくてデスペルにすれば、 X=2 Y=0 となるので防御力8割減になる。
で、まぁこのくらいなら、防御力8割減でも sqrt のおかげでダメージ2.2倍程度なので、まあ面白くて結構強い裏技くらいなんだけど、デバフは重複させれる種類のものが結構あって、二回のプロテスの間に X を 0 まで減らしてしまえば二度目のプロテスで防御力がゼロになっちゃう。こうなると、防御力は分母にいるため、すっごい弱い攻撃でも 9999 でカンストするようになる。たぶんこれが問題。
でー。まあプロテスかかってる時のデバフを (X+Y) を基準にして X から引く、なんてことをやめて、 X を基準にして X から引いて、プロテスかかってりゃ Y も調整するとか、 X から引くのやめて Y がある時は Y から引くとか、なんかそういうのでいける気しかしない。ただまあデバフも何系統かあるし、現実にはこのへんもっとパラメータがあってややこしいんだろうけど。
既存の課金でも配ったもの系で著しくこの変更で損をする、ってものは無いと思うんだけど、うーんそれでも金払ってもらってアイテムばらまいてる以上、今までの敵に対する変更はしにくいのかな。新しい敵だけ戦闘での計算式変えるとかがしんどくて、とりあえず「プロテス耐性」なんていう素頓狂なものをつけたか。それか次のクライアントリリースでなおるとかかな。
(17:22)
http://www.afpbb.com/articles/-/3047627
を見て思い出したら
http://www.kk.iij4u.or.jp/~kazunori/indexmoto.html
まだ移転前のがあった。
(07:55)
イングレスのFSとかいうイベントに一度行った時に、10万AP増えたと言ってる(L8以上の)人がいた。はて、10万APてコンビニに行くと増えてる程度の量じゃなかったっけ、とか嘘ぶいてた。
ちょうど agent stats に上げたすぐ後くらいに、今さっきコンビニに行って、つまり行き帰りでかなりうろつくわけだけど、ああそういえばどんなくらいだろうな、と見てみたら、だいたい10万増えてた。
なんか割と気持ちよく多重できたなーくらいの感じだったので、ちょっと大袈裟だった感じだな…
(01:41)
なんか安くなってるとのことで、遅らばせながらアセンブラ短歌本を読んでみた。なんか自分でも考えてみたくなる。
で、中の余談の一節のしょうもないことが気になった。
なお正式 には exit() は _exit() を呼び出すためのライブラリ関数であり, _exit() が 本来 のシステムコールの API だ . このため 「exit システムコール」 ではなく 「_exit システムコール」 と表記すべきで , man のカテゴリは exit(3) と_exit(2) になっている . まあでもあまり気にせずに , ここでは 「exit システムコール」と呼んでしまっている .
これはなんか全体的におかしいような気がする。
int 0x80 で呼ぶ文脈なんだから、 linux システムコールというレイヤで見るべきというのは良いと思う。間違ってると思うのは
あたり。いろいろ書いてみる。
まず、システムコールまわりには3つのレイヤがあると考えて良いと思う。
これは歴史的な事情とかで名前とか引数が微妙にヘンだったりする。これらの正式な名前は、 linux kernel のコードを SYSCALL_DEFINE で git grep するか、 /usr/include/asm/unistd_{32,64}.h あたりを見るのが良いと思う。
unistd_32.h を見れば、まぁ __NR__exit なんてものは無いし、 kernel 内でも SYSCALL_DEFINE1(exit, int, error_code) などとなってる。まぁでも _llseek とかは kernel 内ではアンダースコア落ちてるな。。
このレイヤにあるのは exit と exit_group 。 exit はスレッド終了であり、 exit_group がプロセス終了をする。まあ短歌の世界ではどっちでも同じだろう。
基本的に、このレイヤが glibc の man の 2 番目のセクションに載っている、と考えるのが良いと思う。 gettid や futex なんかの、 glibc が提供してないシンボルも man 2 で出るんだけど、やつらはちょっとした親切で載ってるだけという感じで良いと思う。また、 syscall wrapper と syscall の ABI がだいぶ違う場合なんかは、親切で linux 側の方も紹介してくれる時もある。例えば clone(2)
がまぁ、基本的に man 2 が出すのは syscall wrapper 。 x86 には send なんて linux システムコールは無いし (c.f., man 2 socketcall) 、実際には pread64 が呼ばれるはずだけど pread しか書いてない。などなど。
man 2 にはエラー時には errno がセットされるとか書いてあるけど、これなんかも libc がやってること。 errno なんて kernel の世界には無くて、 -4095 から -1 までの数字が返ればそれを errno にセットする、てのを libc がやってる。
このレイヤの仕事は libc の ABI を kernel の ABI に変換する、ってこと。おかげさまで syscall(__NR_XXX, ...) とかしないでも割と簡単にシステムコールを叩くプログラムが書ける。
普通あまりたいした仕事しないけど、 sigaction とか fork とかは割と仕事ありますね。 mmap の第6引数がアラインされてない時 EINVAL 返すのが glibc の仕事とか (c.f., man 2 mmap2)、 x86 含めて、 kernel の sigsuspend で第1,2引数使ってないアーキテクチャがあるとか言い出すとだいぶ libc マニヤ。
これが man 3 で出てくるやつ。普通、単なる syscall wrapper と違って、もうちょっと libc チックなイロイロをする。 fopen(3) と open(2) とかを考えると良いと思う。僕的には exit(3) と _exit(2) は fopen と open くらい違う。 atexit 呼ぶとかをはじめとして、結構いろいろやるんで。たぶん、歴史的には exit(3) が単なる syscall wrapper じゃない感満載なので、 syscall wrapper 足す時に名前かぶらないように _exit としたんじゃないかな。 C99 では _Exit 。
exit(3) も _exit(2) も _Exit(2) も exit システムコールは呼ばない。呼ぶのは exit_group 。 exit システムコールに対応する syscall wrapper は…たぶん無いと思う。一番近いのが pthread_exit(3) と言えなくはないけど…くらい。
と思う。
ただこのへんのレイヤをきちんと分別しないと大変な珍しい世界でしばらく仕事してたので、どうでもいい知識がたくさん身についた。まあ int 0x80 とかする人は上記3レイヤくらいは把握しといてもいいんではないかな。
(22:38)
前 | 2024年 5月 |
次 | ||||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。