Jewel-mmo開発日記

RubyでMMORPGを作る過程を記録する日記。 Yokohama.rb 発起人。
2006-06-26

ゲームだと

> 結局さ、クズなコードからはクズな製品しかできないじゃん?

経験上そんなことないんですね。ゲーム業界特有の外注を使ったデバッグ(一般的にはテストプレーとゆうのかな)手法に何か秘訣があるのだろうか。国内のゲームソフト開発にはビジネス系にはない何かがある気がするのだけど、向こうをまったく知らないからなあ。

2006-06-26

[アイデア]パーティと戦闘の作戦

ユーザー間のコミュニケーションをうまくとることでゲームを有利に進めることができるようにしなければならない。人間同士のコミュニケーションは難しいのでこれだけで奥が深く飽きさせないゲームになる。ソロで遊べちゃうゲームなんてMMOのプレー時間の長さからすればすぐに飽きられる。

  • パーティ共有のMP(パーティポイント)的なものを用意する
    • 強力な技を発動できるが使いどころが難しい
  • レベルアップは町の宿屋
    • 経験値は次のレベルまでに必要な値までしかストックできないので適度に町に帰らなければならない
  • MP(魔法の使用回数)は冒険中は回復しない。宿屋で回復なので計画的に
    • MPを回復させるスペルカードもあるがたいへんレア
  • レアなスペルカード(魔法のスクロール)を使うタイミングと報酬
  • パーティ編成。前衛と後衛の数合わせ

ひとりのプレイヤーが最大7体のキャラクターを所有し、6人くらいのプレイヤーでパーティを組むとキャラが多すぎて戦術が大味になりそうな件について。

  • SAは成熟しないと使い物にならない。ある境界を超えると覚醒するとか。ので2〜4体を出す感じ
  • ターゲットを攻撃するだけの前衛は操作が不要なのでSAで前衛の頭数を稼ぎ、戦略的な操作はPCやPAで、という方向性
  • 魔法やアビのアクションは使用回数制限が厳しいので頻繁に使うものではない。人数の多さを考慮したバランス取り
2006-06-26

[アイデア]アイテム、装備、ダメージ計算、アクセサリとか

戦闘システムだけはリアルタイム性が強くインターフェースに大きく依存するので机上だけではなかなか決まらない。ということに気づいた。

FF11のようなMMO的戦闘システムならチャットだけでも近いものが表現できる。それとは別に前々からWebに適した戦闘システムを作りたいと悩んでいる。さらにチャットベース(即時的)とWebベース(静的)の戦闘システムを組み込むとして、それをどうやって同共存させるかが難しい。インターフェースが絡む戦闘システムの仕様を曖昧にしたまま作りはじめてしまっていることが、開発の進まない原因だと気づいた。ここをよく考えよう。ふたつの戦闘システムを組み込むということが欲張りすぎているようにも思うので、自分が望むものは本質的に何かということを見極めないと。

  • 装備
    • 装備できるアイテムは武器系をひとつ、汎用系をひとつのふたつ
    • アイテムは装備したらはずせない
    • 人形の消滅と同時にアイテムも消滅する
    • ただしアイテムを消滅させない効果を持つアクセサリがある
    • 武器の効果
      • 攻撃基本パラメータの設定
      • 2d6+1
      • at:5
      • ac:5
      • hp:20
  • ダメージ計算
    • 命中判定
      • a = attacker ; t = target
      • 1d(20 + a.lv / 3) + (a.str + a.at) - (t.str + t.ac) > 10
      • ねらい
        • lv:1 ac:2 at:1 => 1d20 > 11 = 10 - (1 - 2)
        • lv:15 ac:10 at:5 => 1d25 > 15 = 10 - (5 - 10)
        • 高レベルでは str の差が大きくなるのでダイスの分母を大きくする
        • ac は ac の2倍が基準
        • 高レベルでは攻撃回数が増えるが命中率は比較的下がる
    • トップ・前衛の通常攻撃
      • ターゲットは100%トップ
    • 遠隔攻撃
      • 前衛・後衛どちらからでも攻撃力は同じ
        • ゆえに前衛は威力の弱い遠隔武器を装備するメリットはない
      • 後衛へのターゲッティング率
        • a = トップ + 前衛の人数 - 後衛の人数
        • -4: 64%
        • -3: 32%
        • -2: 16%
        • -1: 8%
        • 0: 4%
        • 1: 2%
        • 2: 1%
        • 3: 0%
  • 魔法
    • スリープ
    • ダメージ計算
      • 魔法攻撃力 + a.mag - t.mag
    • 属性
      • 風→土→水→火→風
      • ゴーストの属性によってダメージ1.2倍
      • 攻撃魔法(風)……範囲攻撃
      • 攻撃魔法(土)……中ダメージ
      • 攻撃魔法(水)……弱ダメージ。火属性キラー
      • 攻撃魔法(火)……強ダメージ
  • 魔法のダメージ計算
    • 攻撃者.Str - ターゲット.Str
  • 悪魔の契約スクロール(悪魔の契約書・取引)
    • かなりはちゃめちゃな能力が身につく
    • 人形の寿命が尽きるまでのステタース変化
    • 使った瞬間に寿命が半分になる
      • or 魔力が0になる
    • 悪魔と二つ目の取引を行うと恐ろしいことが起こる
      • 寿命が1になる
      • or Str が0にな
    • 効果
      • 不死
  • アクセサリ
    • アクセサリは free ghost の時だけ脱着が可能
    • アクセサリの効果
      • 装備品を消さない
      • 成長力アップ
      • 老化防止
      • 能力値アップ……上限を超えるのが利点
      • HPアップ
      • MPアップ
2006-06-24

[開発ログ]ログイン後のメニュー案

  • Home
  • Characters
    • キャラ詳細
      • 名前変更
      • ジョブチェンジ→ジョブ選択
      • 魔法
        • 魔法選択→対象選択
      • 削除
  • 人形カード
    • 憑依(フリーゴースト表示)→ゴースト選択
  • Item
    • アイテム選択→対象選択
  • Shop
    • 商品選択→買う
    • 売るモード
      • アイテム選択→売る
  • Chat
2006-06-23

日本語文の中に混在する英単語の前後に「いわゆる半角スペース」を入れるのはバッドノウハウなので、それを自覚して使う方が良い

http://www.otsune.com/diary/2006/06/21/1.html#200606211

確かに自覚してなかったけど。

2006-06-20

[Ruby]./configure が失敗していた件

./?date=20060420#p02

自分のツッコミがスパム判定されて書き込めない(涙)のでこっちのも書いておく。

onfig.logに以下のログを発見。

/usr/bin/ld: crt1.o: No such file: No such file or directory

ぐぐっって http://www.machu.jp/diary/20050414.html#p01 を見つける。 libc6-dev を入れて解決。

apt-get install libc6-dev
2006-06-20

[Rails]Rails本ラッシュ

くまくまーさんも出すのか。ほしいかも。

RailsによるアジャイルWebアプリケーション開発

前に買ったこのRails本、最初の1ページしか読んでなかったのだけど昨日から通勤の電車の中で読んでいる。というのは最近またRailsを触っていて、というのはRuby会議で得た有用なネタをJewel-mmoにフィードバックしているから(忘れないうちにやっとかないと)で、気分はRailsモード。というわけで結構久々にRails触ってます。

一昨日の勉強会楽しげだったぽい……。でも鉄の意志で休暇にあてた。

日本がんばれ!オレは応援してるぞ!

2006-06-19

[Rails]楽々ERDレッスン

楽々ERDレッスン((株)スターロジック 羽生 章洋)

http://d.hatena.ne.jp/moro/20060619/1150668791

最近書籍は買わないようにしているのだが必読らしいので注文した。

DB素人な(Webもだけど)オレの弱点を埋めてくれる一冊じゃないだろうかと期待。

2006-06-12

日本 Ruby カンファレンス 2006終了。

終わりました。終わった瞬間は感動でぐっと来ました。 疲労のせいか刺激が多すぎたせいか今日はずっとあたまがぼーっとしてます。書きたいことがいっぱいあったのだけど、何から書けばいのやら。

  • 前夜祭で隣に座っている知らない方がなんと大林さんでした!ラッキー。というわけで例のお話をしてみた……。いきなり今回の最大の目標を達成
  • DHHと直接話したよ。何語でもいいから相手の目を見て声を出す。相手の顔をじっと見ながら話を聞く。それだけ気をつけた
  • うささんの名前の由来、なんか以前にも同じ事を訪ねた気がしてきました
  • 名札が好評で良かった。最低限の仕事は無事にまっとうできた
  • rucilaさんが声をかけてくれた!
  • 打ち上げのノリ。Ruby関係では知っている限り最大の盛り上がりで楽しかった
  • そうそう、たかはしさんはそろそろあっち方面に力を入れるらしい!
  • ささださんがファンらしき女性に写真を頼まれているのを目撃!
  • オレは名札だけだったけど、他の実行委員はとってもて多くの仕事をこなしてました。微力ながら参加できて本当に良かったです
  • いろんな意味でたくさんの収穫がありました

※アンケートにご協力ください。

http://jp.rubyist.net/RubyKaigi2006/enquete.html

2006-06-07

名前の話

http://rucila.s43.xrea.com/memo/?date=20060605#p01

そろそろ本名そのものをトップページとかプロフィール欄に入れたいなと思いつつ、今はまだ無理なのでタイミングを探している所。その流れで今回ふつけるに掲載して頂くレビュアー名を本名でお願いした。

まあだんというのは本名なので、呼ばれて恥ずかしいことも違和感もないし割とユニークで大変気に入っている名前なんだけど、唯一のネックは既にKogai氏という強力なキャラクターが存在するところか。

2006-06-06

[Ruby]Nadokaさんでinviteしたい

Nadokaさんのbotで任意のユーザーを任意のチャンネルに招待する処理を書きたくなった。IRCコマンドに次のように使うinviteコマンドがある。

/invite <nickname> <channel name>

Nadokaさんでinviteメソッドかなにか用意されていないかなと思ってソースをgrepすると何も引っかからない。

bot.rbを見てみるとこんな感じでIRCコマンドを実行しているようだ。

send_msg Cmd.nick(nick)

しかしそれっぽいキーワードでgrepしてもメソッド定義が見つからない。Cのほうからやってきた身としては、メソッドはソースのどこかにちゃんと記述されているものだと思いこみがち。昔の自分ならこのへんでくじけているところだ。最近はその限りでないことを知っている。というわけでソースをもう少し見てみる。Cmdをgrepするとこんなものを発見。

Cmd = ::RICE::Command

ふむ。RICEのほうを見てみる。おぉ。

Commands = {}
%w(PASS NICK USER OPER MODE SERVICE QUIT SQUIT
   JOIN PART TOPIC NAMES LIST INVITE KICK
   PRIVMSG NOTICE MOTD LUSERS VERSION STATS LINKS
   TIME CONNECT TRACE ADMIN INFO SERVLIST SQUERY
   WHO WHOIS WHOWAS KILL PING PONG ERROR
   AWAY REHASH DIE RESTART SUMMON USERS WALLOPS USERHOST ISON
).each do |cmd|
  self.regist_command cmd
end

なるほど。regist_commandの中でevalしているのだ。これじゃあinviteメソッド定義を探しても見つからないわけだ。カラクリはわかったのでbotに以下のメソッドを追加して無事目標達成。

def invite nick, ch
  send_msg Cmd.invite(nick, ch)
end

きっとこれが「ルーク、ソースを使え」ってやつだね。

2006-06-06

[開発ログ]RPGの実装

Nadokaさんと遊んでいてインターフェース部分の目処は立った。

RPGのコアとなる部分、インターフェースに依存しない部分を切り離して実装したい。

2006-06-03

[アイデア]RPG on IRC

仕様を考えてみよう。その前にアイデアの列挙か。

  • bot である
    • バトルbot, データbot, エリアbot, ショップbot と分ける?
  • エリアはチャンネル
  • Partyチャンネルでパーティメンバーを表現
  • 敵(NPC)もいちユーザーとしてIRCにログインしてくれるといいけどbotじゃ無理だよなあ……
  • botの招待でクライアントのチャンネルを移動させたいけど……方法が浮かばない
  • ゲームデータはbotが全部持ってるわけだよな
  • ユーザー登録とか認証かと面倒だからもう単にニックネームでいいだろうか
    • つまりニックネームで find_or_create_by_nick か
    • いやのっとられるよ
  • Jewel-mmo的には1プレイヤーが複数キャラを所有してパーティ編成だけどMMO的には1プレイヤーに対して1プレイヤーなわけでこのあたりチャットインターフェースでどうするのがいいか
2006-06-03

[アイデア]ムラサマとRPG

いまの隊列をWeb上で操作する戦闘システムがどうも気に入らない。もっとWebっぽくできないものか。という思いがあってここ数日戦闘システムをいろいろ考えている。

  • IRC上でNadokaさん使ってRPG
    • 考えたんだけどRPGとして作りたいものってWIZっぽい簡単なものなんだよね
    • だったらテキストのみインターフェースでもいいじゃん
    • 自然とネットワーク対応になるし
  • ムラサマを2人対戦で5試合連続とかどうか
    • 当然ケータイ対応ね
  • で、結局ムラサマとRPGをどう両立させるか、またはどう切り離すか
    • どうもごっちゃになってしまう
    • 結局はRPG。とにかくRPGというのが本質
    • だけども錬金術とか吟遊詩人システムとか戦闘以外のゲーム要素も必要なわけでそのひとつとしてムラサマはありだろう
  • Ruby/SDLのノウハウが蓄積されつつあるのでGUIクライアントもありになってきた
2006-06-03

日本 Ruby カンファレンス 2006

実は実行委員に名前を連ねています。というわけでもちろんスタッフとして両日ともに参加します。主な担当は名札の準備です。デザインは「YUNA Design」さんにつくっていただいたので、ケースを手配してあとはひたすら印刷する仕事です。

一般参加者以外のあらかじめ名前のわかっている方の名札には名前も印刷されます。それも高橋メソッドの名前です!お楽しみに!

私は「だん」という名札を下げているはずなので、みかけたら是非お声をおかけください。

2006-06-02

ふつうのHaskellプログラミング

ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道(青木 峰郎) ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門(青木 峰郎) 昨日近所の本屋さんに買いに行ったのですが置いてないようでした。青木さんから献本のお話も頂いたのですが、たいしたことをしていないのに頂くも悪いので今回ははじめから自分で買おうと決めてました。お金を出して買うだけの価値がありますし。

売り場に行ったときに「ふつりな」っぽい本を立ち読みしている人がいて、もしや!と思って横からのぞいてみると、ふつうの「ふつりな」でした。その人はしばらく立ち読みした後、「ふつりな」買って帰りました。その本の前の方にオレの名前も載ってるんだよ(笑)とか思いながら、なんだか不思議な感じでした。

2006-06-02

[Bilbo]spamフィルター実装案

spam?メソッドを自分で書けるようにすればいいのだろうか。

def spam? entry
  return true if default_filter.spam?(entry)
  entry.body =~ /href/i
end

if __FILE__ == $0
  require 'test/unit'

  class SpamFilterTest < Test::Unit::TestCase
    def test_spam?
      entry = Entry.new(:body => 'aaa')
      assert !spam?(entry)
      entry = Entry.new(:body => '<a href=...')
      assert spam?(entry)
    end
  end
end
2006-06-01

さくらインターネットでSubversion(2)

http://saikyoline.jp/weblog/archives/2005/10/subversion_2.html

既にさくらのサーバーにSubversionはインストールしていた(過去に自分で入れた)ので、サーバーにリポジトリを作って(サーバー側のパスは通してある) Cygwin から svn+ssh とやらでアクセスしてみる。

普通に使えるじゃん!知らなかった……。