Jewel-mmo開発日記

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

Rubyで作る奇妙なプログラミング言語 ~Esoteric Language~

アマゾン → Rubyで作る奇妙なプログラミング言語 ~Esoteric Language~

献本していただいた。 何かお手伝いしたわけでもないし突然のことだったので驚いた。 ゲーム本のソースコードの掲載の仕方を参考にして下さったとのことで大変光栄だ。

Rails of Ruby on Railsのときもそうだったけど、いきなり献本されるとうれしいものだ。

はじめから1/3くらいまで読み進めたが、これは面白い。ここ数日アマゾンのRuby部門でもランキング1位のようだ。

最初に「Ruby練習問題」という章があるのだけど、ここでRubyの特徴にさりげなく触れ、Rubyを知らない人が躓きそうなポイントを一通り説明してしまう。これが自然でわかりやすく読みやすい。 ここではRubyの機能だけじゃなくRubyを取り巻く環境にも触れている。たとえば次のように。

「なんでRubyには『++』がないの?」といった質問は定期的にメーリングリストに流れるが、 「オブジェクト指向的に自然な定義をするのが難しいから」というのがRubyの作者、まつもとゆきひろ氏の答えだ。 もちろん、この意見を覆すだけのメリットと一貫性のある仕様を誰かが提示できれば Rubyに「++」が導入される可能性はあるが、今のところそれに成功した人はいないようだ。

こういうところもすごく気に入ってしまった。

そして言語の実装の話に入るわけだけど、言語の実装と言うと難しく思えるが、 これがすごく簡単なところからスタートするので、その手の素人でも問題なく読める。

8命令しか存在しないBrainf*ckと言う超シンプルな言語が登場するのだが、これを見てプログラミング言語とはなんだろうと考えさせられたり。

本を読むのがすごく遅いので、なかなか一気に最初から最後まで読むことはできないのだけど、この本は読みやすくて面白いから一気に読んじゃうかも。 今までに読んだRuby本の中で一番面白い(1/3しか読んでないけど)。

2008-12-25

[アイデア]ロマサガのフリーシナリオをモデルにする案

先日シナリオ担当と打ち合わせを行い、世界観の設定やジョブ、シナリオの組み方等について話し合った。

その日の帰り際に、ロマサガのフリーシナリオをモデルにしてはどうかというアイデアが出た。 そのとき出た話は次のようなもの。

  • マップの構成、クエストの構成などにおいて、ロマサガのシナリオのプロットや地理を参考にする
  • ゲームのスタート地点を8箇所設けて、任意に選べるようにする(これは本ゲームの主人公が、寿命を持った人形に憑依して世界を徘徊するという仕様だから可能)
  • 全体のボリューム感やクエストの流れは、ロマサガくらいの量を目標に作るとちょうど良さそう

もともとロマサガのフリーシナリオシステムは、MMORPGのクエストシステムに似ている。 自由に参加できるクエストと、主軸のキャライベントから構成されるシナリオは、MMORPGでも同じように展開できそうだ。

とまあここまでは単なる思い付きだったのだけど、 実際に実現しようとなると、 あのキャラ選択とフリーシナリオ感をオンラインゲームで実現するには、 いくつかのアイデアが必要になる。

ここ数日考えたところでは、以下のようなアイデアを思いついた。

  • プレイヤーをゲームワールドに召還する召喚士を8人設け、この召喚士はロマサガの主人公8人をモデルにする
  • プレイヤーはゲーム世界に参加する際、好きな召喚士を選んで、そのキャラのもとでワールドにログインする
  • ワールドに参加した際は「自ら選んだ召喚士の操り人形(分身)として世界を冒険する」という体にする(実際はプレイヤーは自由に行動可能)
  • 人形(プレイヤーキャラ)の寿命が尽きたら、再び召喚士を選んでワールドにログインする(自分の肉体以外(仲間やアイテムやスキルの一部)は引継ぎ可能)

そういえば、ロマサガ2は時間を飛び越えて、その時代のキャラに憑依するゲームだったなあ。

2008-12-10

ロマサガ感想

ロマサガ(一番最初のやつ)をプレーしてる。 ゲームの感想はプレーを始めた直後に書かないと、すぐに慣れてしまい、 最初に感じたワクワク感や面白いところや違和感等を忘れてしまう。

アイシャで6人パーティになるくらいまでプレーした。 最初年上のキャラ選ぼうとしたら、妻に「やっぱアイシャでしょう」と言われた。ちなみに名前は「ちゃあ」。

  • 台詞がいいかげん
    • 町の人がみんな同じ台詞だったり、そもそも台詞がなかったり
    • →でも個人的に台詞読むの嫌いだから精神的に楽。全部の人に話しかけなきゃみたいな煩わしさが少ない
    • →テキトーなのにツボは押さえてる。世界観やストーリーは存在感がある。→逆に想像力が刺激されてる?
  • フリーシナリオはやっぱすごい
    • スーファミ以降のRPGはほとんどプレーしてないから、その後のゲームにこのシステムがどう継承されたかわからないけど、少なくともスーファミ時代からPSの初期までには、このタイプのゲームはなかったと思う。独創的
    • 戦闘回数を絶対的な時間軸として、強制的にイベントを進行させてしまうわけだけど、プレー中はそのカラクリが見えない(自然)。普通にやると収拾がつかなくなりそうなシステムのにうまくまとまっている(まとまっていないと見る人も多そうだけど)
  • しかもキャラ8人が並列に存在する
    • 最初からキャラ8人選択可能+フリーシナリオ、よくこれを完成させたと思う
    • →何度も遊べる。長すぎず、短すぎず、キャラの人数と1プレーの尺が丁度いい→つまりバランスがいい
  • バトル
    • どうかな……。特別な面白さはないかな。頭使うようなシビアなものではない。マイナス面もとくには感じない
    • 魔法が軽視されてて、剣技も凝ったシステムではないので、戦闘や育成はあっさりしてる
    • →お手軽(→キャラ育成においてやりこみ要素は少ない)
  • UIはいまいち
    • メッセージ送りにAボタン連打してると、勢いで選択肢を選んで取り返しがつかないとか
    • 町でNPCに触れると勝手に話しかけられるところとか
    • 隊列、装備のUIももう少し工夫できそう。まあ古いゲームだから仕方ないとは思う
  • 未完成、バグが多い
    • 個人的にはこの未完成さが好き
    • 絶対に立ち入れないマップとか入手できないアイテムとかあるけどこれがいい。すべての場所に入れる世界の方に逆に違和感を感じるから
    • 世界観、ストーリー、キャラクター、作りの荒さ、バグ……もろもろ含めて雰囲気が◎
  • バランス
    • 当時バランスが悪くて嫌だという人がいたけど、バランスが悪いとは思わなかった。客観的に見てもそうは思わない。「未完成」とか「不親切」ということじゃないかな
    • すぐ死ぬけど、どこでも手軽にセーブできるからほとんど問題ないし
    • 「回避できない危機状態でセーブ→はまり」とかは辛いかもしれないけど、その辺の理不尽さを割り切れるかどうかで好みが分かれるのかな

初期の仲間にジャミルしかいない状態が辛かった。何とか地下道抜けてミレアム仲間にしてだいぶ楽になったかな。こういう厳しさのあるゲームが好き。

2008-12-01

VMWere Player + Ubuntu on Windows(XP)

VMWere Playerを新規にインストールしてrailsが動くところまでのメモ。 rubyは野良ビルドする。

まずはダウンロードとsshでつなぐための最小限の設定。

  1. VMWere Playerをダウンロード→インストール
  2. ubuntu-ja-8.04-vmware-i386.zip(仮想マシン本体)をダウンロード。→解凍
  3. 解凍したファイルのUbuntu.vmxをダブルクリックで起動
  4. 流れに従って設定。普段使用するユーザー名とパスワードを登録
  5. 登録したユーザーでログイン
  6. デバイス→ネットワークアダプタ→「ブリッジからNATに変更」→そのあと「切断→接続」としたらネットにつながったみたい
  7. 端末を開く(左上の「アプリケーション」→「アクセサリ」→「端末」

端末に以下を入力して、ssh経由で接続できるようにする。 sshサーバーとsambaを入れる。 sambaを入れるのはWindows側からホスト名(デフォルト名はubuntu-vm)でのアクセスを可能にするため。

sudo apt-get update
sudo apt-get install openssh-server samba -y

上記が終わったらもうログアウトしてOK(「システム」→「終了」→「ログアウト」)。後の設定はsshから。

sshクライアントからホスト名ubuntu-vmに接続。 とりあえずパッケージのアップデート(時間かかるけど)。

sudo apt-get upgrade -y

以下必要なパッケージをインストール。現在のUbuntuだと最初から入っていて不要なものもあった。

sudo apt-get install screen -y
sudo apt-get install zsh vim subversion sqlite3 -y
svn co svn+ssh://r2-d2@dgames.jp/home/r2-d2/dan/svn-repos/dan/trunk/ c
ln -s c/.zshrc
ln -s c/.screenrc
ln -s c/.vimrc
sudo apt-get install libreadline5-dev libssl-dev zlib1g-dev -y
sudo apt-get install libsqlite3-dev -y

rubyを野良ビルド。

wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p72.tar.gz
tar xzvf ruby-1.8.7-p72.tar.gz
cd ruby-1.8.7-p72
./configure --prefix=$HOME/local/ruby
make
make install

rubygemsとrailsを入れる。

wget http://rubyforge.org/frs/download.php/45905/rubygems-1.3.1.tgz
tar xzvf rubygems-1.3.1.tgz
cd rubygems-1.3.1
ruby setup.rb
gem install rails sqlite3-ruby