猫森集会2012 Aプログラム<天使が森に落ちてきた> 2日目
歌ってる浩子さんの真正面の1列目という素晴らしい席でした。でも、ついつい六角さんに目をやってしまうこと多く。演奏中も、なんかとても演技してるっぽくて、注目しちゃうんです。
続きを読む【ネタバレ】映画『グスコーブドリの伝記』に納得いかない件
絵はきれいだし、音楽も素敵。全体的な雰囲気もよく再現してると思うし、セリフ回しも良いし、それぞれに声もはまってると思う。ブドリが何かにつけて「はい」って返事するところ、原作には書かれていませんが、これなんか脚本ちょーぐっじょぶな感じ。
でも、そこを変えるのは納得いかないんだよって話です。
以下、原作と映画の両方のネタバレですよ。
ISO-2022-JPですか
やっぱり、正しいコードで投げないと、クライアントによっては文字化けしてました。
ということで、まじめにバイナリエディタで文字列を見てみたら、irc.trpg.netの文字はISO-2022-JPで来てました。nadokaさん、および、Brounieの内部コードは Shift-JIS(もっと言うと、Windows-31J)にして、on_privmsg と send_noticeのとこで変換するようにしたら、オールオッケーになりました。
とはいえ、これはマルチバイト対応とは言い難いのですが。でも、IRCが文字コードを規定してないんだからしょーがないと思う。日本語のIRCサーバは、歴史的な経緯でほとんど ISO-2022-JPだそうなので実用上は困らないというのが言い訳なり。
Brounie 1.0を近々リリースするですよ
文字コードの扱いでひっかかってたのですが、一応の解決をみました。
どうもnadokaさんはShift-JIS決めうちらしいのですが、trpg.netのサーバから来るメッセージはShift-JISではなくて文字化けしてた模様。
on_privmsg で受け取るメッセージを、Shift-JISに変換すれば動きました。入力はこれでいいとして、出力はもともとShift-JISで投げてるんですが大丈夫みたいで。ircってこのへん、どうなってるんだろう、というのはまぁ暇ができたら調べる方向で。とりあえず動いてるからいいことにします。とりあえず動いてなかった。。。
def on_privmsg(prefix, ch, msg) msg= NKF::nkf('-sm0', msg).force_encoding('Windows-31J') return unless command= self.map_command(prefix, msg) message= self.do_command(command) message.each_line do |line| send_notice(ch, line.strip) end end
たぶん、なんとか遊べる程度の品質になったので、一度、セッションをしようかと思ってます。オンセの日程を決めてしまって、その日をバージョン 1.0のリリースにしましょうと。やっぱ、〆切ないとずるずるするし。
残件をメモっておこう。まず、1回目のセッションに間に合わせるべきこと。
- botに「ode オーデ」コマンドを実装するの忘れてた
- 全体的に例外処理があまあま。特に、引数が足りない場合は中途半端に失敗してよくないことが起こる
- ヘルプなり、ドキュメントなりを書かないと
将来的に対応したいこと。
その後のBrounie
少女展爛会システム、書いてるそばから新しい思いつきをするので、一進一退なのです。バーンダウンチャートがぎざぎざしながら、下がって行かない感じ。
わりとまじめにunit testを書いてます。ちょっとitを書くのをさぼってて、意味不明な結果表示のとこもありますが。
Brounie 少女展爛会システム
- 提示部
- 展開部
- 出来事表リストを設定できる
- 一覧表示できる
- 有効化/無効化できる
- 出来事表を振れる
- 出目を指定して出来事を表示できる
- キャクターが出来事表を振れる
- 出来事によってオーデが溜まる
- テンションが危険な場合には警告が出る
- 再現部(ショウ・アップ)
- Phase イニチアティブの管理
- next 次
- should == "イニシアティブ・フェイズ"
- should == "きゃら1のフェイズ"
- should == "きゃら2のフェイズ"
- should == "きゃら3のフェイズ"
- should == "きゃら4のフェイズ"
- should == "オーデ・フェイズ"
- should == "イニシアティブ・フェイズ"
- end 行動終了
- should == "きゃら1のフェイズ"
- should == "きゃら2のフェイズ"
- should == "きゃら3のフェイズ"
- should == "きゃら4のフェイズ"
- should == "オーデ・フェイズ"
- should == "イニシアティブ・フェイズ"
- cut_in 割込み
- should raise Brounie::MisplayError
- should == "きゃら4のフェイズ"
- should == "きゃら2のフェイズ"
- 判定(アプローチとリプライ)
- say 判定を宣言できること
- roll 判定を実行できること
- result 判定結果を表示できること
- roll([n]) 振り直しができること
- テンションの管理
- impact テンションを溜められること
- open テンションを開放できること
- delete テンションを消去できること
- テンションが最大値を超えたら陥落すること
- オーデの管理
- sway([target]) 形式のスウェイ
- sway([target], [count]) 形式のスウェイ
- sway([target], [count], [adverse]) 形式のスウェイ
- リーディングの管理
- コンクルージョンの処理ができること
BrounieBot
- #map_command
- 途中に%(半角)や%(全角)が入ってる発言
- 無視すること。
- %unknown 知らないコマンド
- コマンドは:unknown
- %unknown 知らないこと
- 解釈できなかったメッセージを返すこと
- %help
- コマンドは:help
- %h some_command
- 対象のコマンドを返す
- 引数なしのコマンド
- %list
- should == :list
- %一覧
- should == :list
- %next 傍観するので次どうぞ
- should == :next
- %行動終了
- should == :end
- 引数がキャラ名のみのコマンド
- %show 表示
- %show (キャラ指定なし)
- コマンドは:show
- nickからキャラ名を得る
- %きゃら.s (キャラ名前置)
- コマンドは:show
- キャラ名を認識する
- %shきゃら (キャラ名後置)
- コマンドは:show
- キャラ名を認識する
- %exit 退室
- コマンドは:exit
- キャラ名を認識する
- %cut_in 割り込み
- コマンドは:cut_in
- キャラ名を認識する
- #do_command
- MisplayError ルール違反の例外が出た場合
- 例外メッセージを表示すること
- Sessionに転送されるコマンド
- :exit
- :list
- Phaseに転送されるコマンド
- :next
- :end
- :cut_in
- Characterに転送されるコマンド
- :show
- %join 参加
- nickに対して最初のキャラが参加した場合
- キャラが追加されること
- nickにキャラが紐づくこと
- nickに対して紐づいているキャラとは別キャラが参加した場合
- キャラが追加されること
- nickに紐づくキャラは変わらないこと
initialize についての基本をいまさら学んだ
Somthing.new(s) で、Stringをパースしようとしてたわけです。
んで、解釈できない文字列だったら、nilを返そうとしたら嵌ったのです。
newメソッドは問答無用で、selfを返すのねん。
class Something def initialize return nil end end Something.new #=> #<Something:0x1111111>
なんですよ! 知らんかった。
というわけで、パースは、Something::parse かなんかに書くことにしました。