うー、定時処理周りはやっぱ地雷原になってるなぁ。この辺は1日1ターンの実稼働スケールでのテストがあまり出来ていないので色んな意味で魔窟。
2004年10月アーカイブ
かなり長い間愛用してきたMSのNaturalKeyboardProがぶっこわれてしまったので
ロジクールの2k円弱のキーボードを買って参りました。
……FとJのぽっちり薄すぎ('A`)
タッチはともかく、これじゃホームポジションわかんないよ……
α2に比べるとずいぶんと開発ペースが落ちたものだ。
とりあえず、一見まともにうごいてるっぽい状態になった。
2.5からの変更点。
・死亡後に次の村に入れる
・各キャラの発言数が表示される
・メッセージフィルタ(各キャラのメッセージを表示・非表示出来る)
・コピペ対策を少しましにした
・「今日」以外はページわけされずに1枚のHTMLで表示されるようにした
・更新時刻を半固定式にした
・最終日にアクションが使えるようになった
・キャラクターが正式版に差しかわった
その他の細かい修正はたくさん。内部的なパフォーマンスは細かい処理が増えた分ややおちたかも。
ロール希望とりあえず実装。一応動いてると思う。
先日書いた手順とは全然違う実装になったけど、結果が同じならいいや。
サポート用の板で出てた話題だけど、支援ツールを本体に組み込んでしまうというのはどうなんだろう。
俺自身はイラチの関西人なので「機械的に出来ることはボタン一発で出来るに越したことはない」派なんだけど、萎えるって人もいそう。
発言数を数えるとか、発言をマスクするとかくらいは、付いてても別に有害ってことはないと思うんだけど、どうなのかなぁ。
愚直な実装に関するメモ
・各ロールの割当数を算出
・まず「ランダム」志望者をデフォルトの割り当てからくじ引きする。
(つまり個別のロールを希望した人より、ランダムでたまたま当てた人の方が優先)
具体的な実装としては割り当てを配列化してシャッフルし、前から順に取っていく、とかで十分
・各ロールの残数を数える
・1人以上残っている各ロールについて希望者を抽出し、希望者数がロール残数以下なら全員当選。
ロールが余ったら余剰ロール配列にpush。
希望者の方が多ければ希望者をシャッフルし、前からロール残数だけ当選。余った希望者は余剰プレイヤー配列へpush
・余剰ロール配列をシャッフルし、余剰プレイヤーに割り当てる
これが一番素直かな?
ランダム希望者を最優先にするのは、「ランダム希望にすると人気ロールには一生当たらない」という状況を無くすため。
ところで、俺自身が自分の作った人狼に参加するのもどうかと思うので人狼BBSの方に参加してるのだけど、
どうも最近マンネリ感が漂っている気がする。
人数やロール配分が硬直的なせいか、合理的なパターンはほぼ網羅されてしまっていて、
リアル狂人が出てきた時に多少揺らぐ以外はどこも「どっかで見たパターン」を歩んでいる節がある。
その結果、プレイ内容はほぼ説得ゲームに終始することになるが、
これはプレイヤーのオンライン時間の物量などに大きく左右されてしまうため
ゲームとして面白いかどうかはともかく、プレイしている方は辛い。
で、何が言いたいかというと、うちの人狼は、村毎にロールのアサインを変えられるとかドラスティックなシステムにしたいなと。
16人に人狼3・占い師1・狂人1……みたいな配分は一発で遊ぶ分にはきっと最適な配分なのだろうけど、
全く定石の研究されていないような、例えば人狼3狂人2占い師2みたいなピーキーなアサインにして
大混乱でもいいと思うのデス。
まあもちろん、定番のアサインの村は常時用意した上での話だけども。
複数村仕様についてメールも対応。意外と余裕だった。
それ以外の時間はコミットの仕様をどうするか迷走中。
あー、ロール希望も実装しないとな。α3の予定はとりあえずこんだけだ。
他になんかいるかなぁ。
「ウェアウルフ」のスペルがwarewolfではなくwErewolfであることに今気付いた。
やべえ。
複数村参加仕様に携帯モードを対応させた。概ね動いてると思う。
ついでに恐ろしくずさんなコードが何箇所か見つかったので修正→α2.5にバックポート。
次はメールか。
analogの解析結果に出てくる検索ワードを日本語化してみた。
出てくるキーワードのトップ
「見つかりません」
(;´Д`)?
3年ほど前に作ったこんなネタページにいまだに1日20件もアクセスがあることに驚いた。
プライマリのキャラが、死んでいるか、村がエピローグ以降なら、
新しい村に入った時にプライマリをセカンダリに落として、プライマリを新しい村で上書き。
ログインするとプライマリ村のインデックスが表示され、セカンダリ村はそこにメニューとして表示。
まあこんなもんか……
携帯はしょうがないから愚直に、ログイン直後に村をリストにして出すか。
メールは……メールがなぁ……。キューの持ち方自体を変えるかぁ。
メール配送機の書き直し一応完了。
テスト環境で動かしてみてからα2.5にマージする予定。
今のところ動いてるように見える。
次は死亡後の村入りかな……
(続)
うーん、結構面倒だな。
今のシステムはプレイヤーが1人1村の状態を決め打ちにしていて、
例えばトップページからIDとパスを入力してログインすると村に直行するし、携帯用も村直行。
メールも1村決め打ちでキューを生成してる。
んー、(生存中の)プライマリ村は最大1個だからこれを今の決め打ちとして扱い
携帯はまぁ愚直にやるしかないか、メールは……うーん、困るな。メールはプライマリ村のみ、でもいいけど。
(続)
とりあえず死んだら新しい村に入れるとこまで実装。
まともに動いてるか全く分からないけど細かい検証はまた明日……
やらかした……
リアルに胃が痛いです。
とりあえず自動バックアップ機能を実装してきます……
実装完了。
あとα2.5はmod_perlでの挙動が全く予想付かないのでmod_perlは今は外そう……
どうにか落ち着いた。
今更嘆いてもしょうがないからfail safeを充実させて先に進めよう
携帯、メール、を新しい関数に追従完了。
これで一応α2相当の機能は全部使えるようになった(と思う
あとα3で実装予定の項目
・メール送信機の時間設定部をもう少しエレガントな実装にして、「20分ごとに配信」を追加する。
・ロール希望が出せるようにする
・死亡後に次の村に入れるようにする
パーサとレンダラを完全にリメイク、パフォーマンスは劇的に改善された……はず。
とりあえずメイン部は動いた。
メールと携帯への対応は今から……
新仕様のアクションが好評なのはいいが、みんながもの凄い勢いでRPするせいでログがバースト中。
まあ、負荷的にはまだまだ許容範囲なんだけど、当初想定していた負荷と比べると既に1桁食い違ってきてる。
とはいえ、遠からずこうなることは目に見えていたわけで、俺の先見の明がなかったというか何というか
スケーラビリティ向上のためα3はオーバーホール版になりそう。
まずやるべきことは、1日を複数のページに分けること。これでレンダラが3倍早く、HTMLのダウンロードも3倍早くなる(当社比
次に、同じデータを人数分(15回とか)パースするという富豪コーディングそのものなアホパーサとアホレンダラを分けて、パーサは1回で済ませる。これでまぁパーサは単純に15倍早くなる。
んー、内部の会話ログはどうしようかなぁ。今んところ1ファイルだけど、今のところ1日70kくらい。盛り上がってくると1日100k超の村も出てきそう。んーまぁ毎回愚直に読んでも構わないけど、日ごとに分けるくらいはした方がいいかな?インデックス振ってもいいけど、分けた方が楽かなぁ。
ところでこれを言ったら身も蓋もないけど、プレイヤー用のページって無理にプリレンダリングしなくても、最終ページだけスタティックにして、残りはダイナミックにした方が良かったかも。まあ負荷的にはプリレンダリングが強いけど、どうも全ページスタティックにしたせいで配布CGIとしての敷居が上がってしまった気がする。
メール配送は1時間ごとにキューをはき出す方式にしたけどはっきり言って糞チック。
やっぱ1発言1通の方がいいな、更新チェッカ代わりになるし。
死者の叫びは激しく糞チック。あまりに糞なので早々に廃止決定。
http://www.juna.net/game/wolf2/index.html
公開。
メール配信機能は仕様を深く考えないまま実装したので、なんか中途半端なものになった。
まあ今はこれでいいか……
デザインが見づらい見づらいとsrin様に執拗にいぢめられるので、そろそろデザインの方も考えないとなぁ。
携帯用インターフェース概ね動作。
はて、次は何を書こう。
発言10個制限というのをどうしようか非常に迷い中。
ポイント制で
1~30=2pt(0.5~15)
31~75=3pt(10~25)
76~140=4pt(19~35)
141~200=5pt(28~40)
(左の数字は2バイト文字換算での文字数、各個の数字は1ptあたりの文字数)
みたいにして1日50ptくらい与えるってのはどうかなぁ。
1人がオンステージで推理しまくるという形はなるべく避けたくて、でも発言数を絞りすぎるとRPが阻害されるし、微妙なところだ。
でも短い発言を連発されるとログが長くなって1日のログを分割することを検討しなければならなくなる。
うーむ。
追記。
あまりに不連続だと「76文字で話す奴はバカ」みたいになるので、もうちょっと綺麗な線にしたほーがよさげだ。
1~30文字 3文字で1pt(30文字で10pt)
31~70文字 5文字で1pt( (n-30)/5 + 10) // 80文字で18pt
71~110文字 8文字で1pt( (n-70)/8 + 18) // 110文字で23pt
111~200文字 10文字で1pt( (n-110)/10 + 23) // 200文字で32pt
とか……考えることがみみっちいですかそうですか。
更に追記。
「○○に話の続きを促した」とかいうアクションを追加、これは1日1回しか使えなくて、促した相手の発言ptを少し回復する、というのはどうか。
更に追記。
とりあえず実装した。単純に、60バイト(30字)まで40pt、そこから4字ごとに1pt。
100字で75pt、200字で125pt。1日が1000ptくらいで、100字なら13回、200字なら8回発言出来る計算。
更に(ry
特殊アクション「話の続きを促す」を追加。1日1回だけ使えて、相手の発言ptを200pt回復出来る。
自分の発言ptは減らないのでガンガン使えという方向。
絵を某くそみそ鯖の中の人が描いてくださるようです。
しかもメッチャ上手いです。感動……
あ、キャラの名前なんかは好きにしちゃって構わないんですが、家族は何組か作っておいて頂けると助かります……。間柄は何でもいいですが(左右違いの双子とかでも)
で、開発状況。
携帯用インターフェースは、ログを進んだり戻ったり見回って、発言・遠吠え・(死者の)呻き・アクション、まで使えるようになった。
後は行動入力を携帯から出来るようになればとりあえずOKかな。
独り言はPCの前でじっくり書けばいいし、死者の叫びもあまりリアルタイムに入力するものでもない気がする。
mod_perl2にものを言わせて全アクセスを動的に出力してるけど、携帯はやっぱメールでpushした方がエレガントかなぁと思う。
常時メールが届くのはウザイから、オン・オフの切り替えをエレガントにやるインターフェースがいるなぁ。どうしたもんか。
ページのどこにもメールアドレスがない(!)に気付いたので追加。
公開するとSPAM来まくる(netドメインだし)けど、まぁもう今更どうでもいいくらいSPAM来るんで隠しても変わらんやろ……。
ついでにアクセスカウンターを撤去。邪魔なだけだ。
人狼(仮)はα1(現在の公開版)からα2へ開発を移行。
α2での実装項目は
・mod_perl2への対応
・携帯への対応
で、前者はほぼOKな感じ、後者は今コード書いてる最中。
人がなかなか来なくてα1のテストが滞りがちなので、コアのコードがなかなかFreeze出来なくて困り。
正直あまり複雑な処理でもないので、ほぼ大丈夫だとは思うのだけど……
拡張予定(妄想含)
(1)パスワード付きのプライベート村
(2)時間制限を村毎に設定出来るように(1ターン15分の高速村、1ターン2日の超まったり村、など)
(3)メールによるリプライの受け取り
(4)プロローグ時点なら村から出られるように
比較的簡単→(4) 面倒だけどやりたい→(3) 要望があれば→(1)(2)
メールは一番最初がちょっと面倒。こっちからメール送って、それを送り返して貰ったら認証~ってやつ。qmailのハンドラを書かなきゃいけない。
そこから先は……その先も結構面倒かなぁ。
細かい調整。一通りまともっぽく動くようになった。
mod_perl(2)対応に挑戦しようと思ったけどドキュメントがないので投げ。
どうしても重いようなら考えよう。
perlccはコンパイラ通るけど実行するとセグフォって死。
http://www.juna.net/game/wolf/
で、公開α(?)テスト開始。
まあゲームが破綻するようなバグはあまり残ってないと思う。
つつがなく最後まで遊べる可能性の方が高い。
人がいないとどうしようもないゲームなんで、適当に友達とお誘い合わせの上どうぞ。
しかし人狼BBS方面に宣伝しにいく勇気はない……