Jewel-mmo開発日記

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

大林さんに連絡がつかない件

献本の件でメールしたのですがお返事をいただけなかったので、一応その旨をここに書いてみる。

2007-06-24

[Rails]ShootingStar

3.0になったみたいなんだけどやっぱり先日と同じエラーでスタートできなかった動かなかった。なにがいけないんだろう。

2007-06-23

メールアドレスだけのspamが

とりあえず「@」を禁止してみた。

2007-06-20

[Rails]ShootingStar

すごく気になってきた。もしかしたら激しく使えるかも。

ちょっと試してみた。あれ動かない。よく調べてないからセットアップを間違ってるんだろうな。

[dan@] $ shooting_star start -d                                                                   [~/c/2007/0619/jewel]
/home/dan/local/ruby/lib/ruby/gems/1.8/gems/shooting_star-2.0.2/bin/../lib/shooting_star.rb:71:in `run': Function not implemented (RuntimeError)
        from /home/dan/local/ruby/lib/ruby/gems/1.8/gems/shooting_star-2.0.2/bin/../lib/shooting_star.rb:71:in `start'
        from /home/dan/local/ruby/lib/ruby/gems/1.8/gems/shooting_star-2.0.2/bin/shooting_star:61
        from /home/dan/local/ruby/bin/shooting_star:16:in `load'
        from /home/dan/local/ruby/bin/shooting_star:16
/home/dan/local/ruby/lib/ruby/gems/1.8/gems/shooting_star-2.0.2/bin/../lib/shooting_star.rb:65:in `sleep': Interrupt
        from /home/dan/local/ruby/lib/ruby/gems/1.8/gems/shooting_star-2.0.2/bin/../lib/shooting_star.rb:65:in `start'
        from /home/dan/local/ruby/lib/ruby/gems/1.8/gems/shooting_star-2.0.2/bin/shooting_star:61
        from /home/dan/local/ruby/bin/shooting_star:16:in `load'
        from /home/dan/local/ruby/bin/shooting_star:16

チャット画面はジェネレートできて、発言を書き込めるんだけど、ブラウザをリロードしないと書き込みが見えない……。

2007-06-20

[Ruby]ピタゴラ装置

[ruby-list:43630] の「ピタゴラ装置をかんたんにRubyでつくれるような簡易的なラッパー」

↑こういうのに興味あります。

何度か言ってますが、ネットワークゲームの次、4年後はこっちに進む予定です。

2007-06-19

[プラポケ]DBをMySQLからSqlite3に変更

vim config/database.yml を編集したら動いた。

production:
  adapter: sqlite3
  database: db/pockets_production

これだけ。すばらしい。

2007-06-19

[Rails]rails:freeze:gemsを使ってみる

1.1.6とか古いRailsで開発していたものを 久々に動かそうとRails環境を構築したらRailsのバージョンがあがってて(1.2.3) 起動すると警告メッセージが一杯出ちゃってやばそうなときの対策。

ちなみに自分でコンパイルしたRuby+gemの場合の話。

Rubyとgemを消して入れなおしてから以下を実行。

gem install rails --include-dependencies --version 1.1.6

次にプロジェクトのディレクトリに移動して以下を実行。

rake rails:freeze:gems

これでvendor/rails以下にrails系のライブラリがコピーされる。 アプリ側はこっちを優先的に使うらしい。

railsのバージョンは最新に戻しておく。

gem update rails --include-dependencies

--

もしかしたらわざわざ消さなくてもgemの機能で任意のバージョンに変更できるのかもね。

2007-06-18

[プラポケ]キャラクター設定が消えた

パッケージデータはDBに入ってる情報だから、Subversionから復帰できない……。キャラ設定はコツコツ書いてたんだよな。 うーん、どっかにメモしてなかったっけ。

あーアイテム設定もかー。

2007-06-18

[アイデア]Webベースの戦闘システム

↑の続き。

たとえばこんなのは?

  • ある人と戦闘モードに突入すると一定時間は他者との戦闘が不可能な戦闘モードに入る
  • たとえば60分以内に一手を打つ。打たないとノーアクション。(→リアクションをプログラミング)
  • 牛歩戦術がいやだから、攻撃は平行して何人にも同時に仕掛けられる。ただし受けはひとりだけ

むむ、思いつきだけど新しい発想だ。さらにパーティ戦ができるようにしないと。 受けをひとりに限定したままだと、ワンピース的展開だな。 離脱と仕掛けを見方同士でうまくやればなんとかなるか?

  • 離脱→仕掛け→即攻撃

このコンボはつらい気がする。離脱から次攻撃間に時間的制約を設けるとしたら……

  • 離脱→仕掛け→(仕掛けた側は後攻となり、受け者は最大60分間相手のアクションを遅延できる)即攻撃

ん、ちょっと待て。離脱っていつでも 勝手にできちゃまずい。それじゃ逃げ放題だ。スペルカードかな。

  • スペルカード『離脱』……戦闘状態を解除する。離脱を行った後は60分間戦闘突入を回避できる

粘着されたら?

  • 離脱→ログアウト→一定時間後にログイン→仕掛けられる→離脱→ログアウト→繰り返し→スペルカード切れ→死亡

はまる。まあいいかあ。それがいやなら性格をニュートラルにしろってことで。

  • 見せ掛けの戦闘でお友達を守れるよ!
    • →ノーアクションが続いたら戦闘解除(これじゃ解決しない)
    • →プレイヤー同士で戦闘可能なエリアは一部に制限(現実的)
  • NPC はふくろ叩きにしてOK?
  • 同時接続者数(戦闘受付数)を自分で設定できるといいのかも
2007-06-18

[アイデア]ベース画面のUI

↑の続き。

着眼点を切り替え。viewをデザインしよう。 一番重要なのはキャラクター表示だ。

#/character

キャラ0
キャラ1
キャラ2
キャラ3
キャラ4

悩みどころなのが/homeと/characterの使い分け。ホームにキャラクターリストを表示すべきかどうかとか。 プラポケだとホームにキャラ一覧があるからキャラに関してはあれで十分なんだけど、 ホームにキャラを出さずに/characterをキャラ表示のメインにするUIはありえるだろうか。

#/home
・キャラクター一覧

そうだプレイヤーキャラクターだけ表示したらどうだらう。 キャラが複数いてもPCがはっきりするし。うん、そうしよう。 そうだ、PCのアイコンをプレイヤーアイコンにすればいいんだ。

#/home
+-----+ name
|     | lv.job
|     | hp 8/8
+-----+ mp 2/3

・キャラクター一覧

...:青石ああと一個!
...:ログ
...:ログ
...:青石あまってます。レス(1)
...:ログ
...:ログ

あとは戦闘の表現をどうからめるかだな。

  1. 絡めない。完全別UI
  2. 全部ここでやる
  3. その他

うーん。理想的なのはWebのノンリアルタイムなテンポで複数人同時対戦ができちゃうようなシステム。 つまり可能なら全部ここでやるタイプが理想。 戦闘システムの落としどころに悩み始めて早4年。

2007-06-18

[開発]jewel-mmoのモデルの複雑なところ

  • Ghost …… キャラクターの魂
  • Doll …… 憑依する媒体

前に実装しかけたときはこんなモデルがあって、キャラクターがGhostとDollに分かれてたんだけど、 うまくひとつにまとまらないかなあ。 さらにDollの型を決定するCardってのもある。

前に書いたらなんか複雑になっちゃったからもっとすっきりさせたいなあ。

--

プレイヤーは複数のキャラクターを所有するから、これとは別にPlayerというのがあって、さらにUserというのもある。

--

PlayerとUserはしょうがないとしても、キャラクターをすっきりさせたいなあ。

class Character
  attr_reader :name
  attr_reader :str, :agi, :mag, :life
  attr_reader :at, :ac
  attr_reader :hp, :mp
  def attack(target)
  end

  def special_attack(target)
  end

  extend Forwardable
  def_delegators :@gost, :name
end

いや、attackはコントローラかな。

2007-06-18

コメントの認証ってなぞなぞじゃダメなの?

なぞなぞというか誰にでもわかるクイズ。

  • 熟したトマトは何色?→「赤」「あか」「赤色」
  • dogの日本語訳は?→「犬」「いぬ」

みんながそれぞれ違う問題を用意する必要はあるけど。

2007-06-17

[気象学]一般気象学

一般気象学(小倉 義光)

本屋で数ページめくったらあまりに面白そうだったので即買い。高かったけど迷いなし。 しばらくは電車の中で楽しめそう。

オレは気象予報士になる!

2007-06-17

[栽培日誌]かぼちゃの種をまきました

種の袋を見たら蒔き時は5月下旬までらしい……。

アスパラの苗を3つ定植。アスパラは10年も寿命があるから場所を悩む。

2007-06-17

[Rails]Rails勉強会@東京行ってきた

悩みが解決。

2007-06-17

[栽培日誌]2007年6月1日の写真

画像の説明

2007-06-17

[Rails]Rails勉強会@東京第19回 ポジションペーパー

名前:だん
所属:日本Rubyの会
ホームページ:http://dgames.jp/dan/

簡単な自己紹介

画像の説明

最近のやりたいこと

  • Sqlite3 + Rails をやってみたい
  • バージョン1.1.6の時に作ったやつを動かすにはどうすればいいですか?
2007-06-16

[Ruby]gem install sqlite3-ruby に苦戦したのでメモ

環境

  • Linux(Debian)
  • Sqlite3 ... apt-get install sqlite3 (sqlite3_3.3.8-1.1_i386.deb)
  • Ruby ... 野良ビルド(ruby-1.8.6.tar.gz)

ローカルのユーザ環境にRubyとgemをインストール済み。次に、

gem install sqlite3-ruby

を実行すると次のようなエラー。

Building native extensions.  This could take a while...
ERROR:  While executing gem ... (Gem::Installer::ExtensionBuildError)
    ERROR: Failed to build gem native extension.

    ruby extconf.rb install sqlite3-ruby
    checking for sqlite3.h... no

    make
    make: *** `sqlite3_api_wrap.o' に必要なターゲット `ruby.h' を make するルールがありません.  中止.


    Gem files will remain installed in /home/dan/local/ruby/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.1 for inspection.
    Results logged to /home/dan/local/ruby/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.1/ext/sqlite3_api/gem_make.out

インクルードするヘッダのパスを環境変数か何かで教えてやればよさそうなんだけど良くわからないので、 Makefileのあるディレクトリにruby.hとdefines.hを置いてやる。

cd /home/dan/local/ruby/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.1/ext/sqlite3_api
ln -s /home/dan/local/ruby/lib/ruby/1.8/i686-linux/ruby.h
ln -s /home/dan/local/ruby/lib/ruby/1.8/i686-linux/defines.h

すると今後は、

sqlite3_api_wrap.c:1064:21: sqlite3.h: そのようなファイルやディレクトリはありません

といって止まるので、手元の環境は debian だから、

su -
apt-get install libsqlite3-dev

を実行。

もう一度 gem install を実行したら無事通った。

gem install activerecord

を実行して下記サイトのサンプルを実行してみる。ちゃんと動いた。

追記(2007/06/19):今日改めてRubyのインストールからやり直したら上記のような問題は起こらず普通に gem install sqlite3-ruby が通った。

2007-06-16

さて

なるほどRubyKaigi2007燃え尽き症候群ていうのか。当日しか関わっていないオレでさえ落ち着いて感想が書けたのが金曜日だもんね。

さて。

あ、明日はRails勉強会か。去年の秋以来かな。ずいぶん活動を停止していたもんだなあ。RHGはいけなかったなあ。でも今年と来年は土曜日はぜんぶ無理かな。

そろそろ次に向けて動き出さないとな。ちょっとまたRails方面も頑張ります。

2007-06-15

[Ruby]メソッド名のコンフリクトの話

メソッド名がコンフリクトすることってあるのかな。 自分の経験ではこれで「ぎゃっ」となったことはないんだよね。 コンクリフトはたぶんありえると思うけど、大事には至らずすぐに原因がわかって問題は解決するんじゃないかな。 そういう心配されるような潜在的な問題があるのなら、さすがに誰か「ぎゃっ」なっているはずだと思うけど、そういった話は一切聞いたことがないから、現実問題深刻な事態にはならないということじゃないかなあ。

誰かが具体的にはまった事例を報告すれば、あーやっぱりあるんだーってことになるんだろうけどね。

2007-06-15

宿題

今週は疲れた。もうヘトヘトで今朝は珍しく起きるのが辛かった。

RubyKaigi2007、幸運にもほとんどのセッションを聞くことができた。やっぱりDaveは印象的だった。 (そういえばあのとき荻野さんが控え室に残っているスタッフに「これは聞いてきなさい!」と命令して自分を犠牲にしてスタッフ皆にその機会を与えてくれたんだった。)

Daveは僕らに宿題を与えた。この宿題がとっても大変なもので、まるでこれからのRubyistとしての活動に大きな使命を課せられてしまったかのようだ。 僕はプライベートでも仕事でも毎日Rubyの恩恵にあずかっている。 もうRubyがなくては生活が成り立たないくらいに(それに比べたら僕がRubyに貢献できていることなんてなってちっぽけなことか……)。 これからは一方的にRubyを使うだけじゃなくて、Daveの宿題を考えながら日々過ごしていくことになりそうだな。

2007-06-13

SourceForge.jpでSubversionを使う

MyGameをSubversionで公開したいのでSourceForge.jpに初挑戦。

鍵とか一切使ったことがなかったのでかなりはまる。Subversionはシェルからsvnコマンドで使いたいのだけど……。

いちおうできたので以下にまとめておく。

結論

手元の環境(クライアント)で、

ssh-keygen -b 2048 -C (ログイン名)@users.sourceforge.jp -f identity -t rsa

上記を実行するとカレントディレクトリにふたつの鍵ができる。

  • identity …… 秘密鍵
  • identity.pub …… 公開鍵

これらふたつのファイルを手元のPCの ~/.ssh に置く

次にidentity.pubの中身をSourceForge.jp→「アカウント管理」→「CVS/SVN/SSHで共有する公開鍵」に書き込む。

以下を実行してログイン。

ssh -l (ログイン名) shell.sourceforge.jp

最初は、

Permission denied (publickey).

と出てたけど、2,3分したらつながるようになった。公開鍵がSourceForge.jpに適用されるのにちょっと時間がかかるみたい。 つながったら鍵を作るときに入力したpassphraseを入力するとログインできる。

シェルによるログイン。

ssh -l (ログイン名) shell.sourceforge.jp

リポジトリへのアクセス。

svn mkdir svn+ssh://(ログイン名)@svn.sourceforge.jp/svnroot/(プロジェクト名)/trunk -m "make trunk dir"
svn checkout svn+ssh://(ログイン名)@svn.sourceforge.jp/svnroot/(プロジェクト名)/trunk
2007-06-13

[MyGame]Ruby/SDLスターターキット

考えてみればMyGameはHPSをオマージュしてきたわけですよ。

yharaさんの発表を聞いて、ということは「Ruby/SDLスターターキット」とMyGameは合体したほうがいいんじゃないかと思うわけですよ。 ということを直接yharaさんに話そうと思ってて忘れてしまった。

2007-06-13

質問者にマイクを届ける係りのメモ

当日はかくたにさんよりマイク係を任命されました。 ここでいうマイク係とは発表の後の質疑応答でマイクをいち早く質問者に届ける役目です。 マイク係は初めてですが去年のスタッフ経験もあったのでいちおうマイク係の長をつとめました。 いろいろ気がついた点があるので何かの役に立つかどうかはわかりませんがメモしておきます。

  • やってみた感じではとくに難しいことはなかった
  • ちょっと難しいのは複数人の方が同時に手をあげたときで、途中から司会者にマイクで質問者を任命してもらうのがよさげだと気づきそうしました
  • 司会に仕切ってもらうのが良いと気づいてからは、私は一番前のかどっこにいましたが、質疑応答が始まるとやや中央に移動して司会者の視界にわざと入るようにしました。連携重要ということで
  • というわけで司会が質問者を選ぶということをあらかじめ打ち合わせしておけばよかったな、と
  • あと、レオさんの通訳(質問者の日本語→スピーカーに英語で)もマイクを通したほうが良かったかも。客席に英語な方もいらっしゃったので

マイク運びに関してはこのようにたいしたことはしてないのですが、一番前の客席をよく見渡せる場所にいることから他にもできることがありました。

  • 当日の午前中から結構席が一杯になり、お昼直前にとびら付近に立ち見、階段に座り見する方が10人くらいいらっしゃいました
  • ので、途中で空席の多かった関係者を一般に開放し、またなるべく奥の席から詰めて座っていただけるようアナウンスしました
  • あと初日から会場が寒いという意見を頂いたので、常時何人かに寒くないか聞いて回り、何度か冷房を弱めてもらいました
  • ただ、寒いという人がいても、うちわを使っている方もいたりして難しいです。でも基本的には寒いという意見を優先しました
  • LTのときはいろいろばたばたするのでサポートにまわる

あーあと、司会の鈴木さんに一番近いという幸運な(ファンですから)ポジションでもありました。

  • 鈴木さん本人は最初とにかく緊張していらっさいましたから、何度も客観的にみて「良い点」をいちいち本人へフィードバックするよう心がけました。特に立ち上がりは
  • 司会者はその立場上そこを動けません。ただ発表がおしたときの時間の確認やその他スタッフと緊急連絡が必要な場合があるので、いつでも近くにすぐ呼べる人を置くべきだと思いました

他にも細かいことはいろいろあった気がしますが思い出せるところのメモです。 マイク係はマイクを運ぶとき以外は余裕があるので、会場内の全体のバランスをみたり、不測の事態に備えるという役目を果たすことができますね。

最後に、このような努力を心がけましたが、もちろん至らない点がたくさんあったと思いますので、もしご意見があればアンケートにてご指摘いただけるとうれしいです。

2007-06-12

幻のRPG編

画像の説明画像の説明

予定では実践編の最後にRPGをやるつもりだったのだけど、実践編がちょっと予想以上に長くなって微妙に無理だった。あれだけのゲーム画面があるのだからもう十分すぎるボリュームなわけで。というわけでこの画像が幻のRPG。

サンプルゲームとしては完成しているのでそのうちRubyライセンスで公開するつもりです。MyGameリーリスのアナウンスのときかな。

ちなみに書籍で解説してるサンプルゲーム(ビジュアルノベルを除く)のソースと画像は改変および再配布の可能なライセンスとしました。ビジュアルノベルの女の子だけは別のデザイナさんに描いてもらったのでちょっと事情が違いますが、他の画像はフリーです。

2007-06-12

Rubyゲーム本表紙

画像の説明

表紙ができました。

表紙のデザインについては編集者さんに何も伝えてなかったのですが、SSをふんだんに用いた理想的な状態に仕上がっています!

おそらく一番最後に選んだと思われる左下の開発途中SSがよいです。

そして、昨日で確認作業もすべて終わり1年3ヶ月にもおよんだ執筆作業がなんとか終了しました。 お世話になったみなさまどうもありがとうございました!

2007-06-11

[MyGame]RejectKaigi2007で発表してきました

日本Ruby会議2007と同時開催されたRejectKaigi2007でスピーカーとして発表を行いました。

「Rubyで作ったゲームデモ」発表資料をまとめておきます。

ゲーム画面

アクションゲーム トロルの幼生 プニャリン競争 ビジュアルノベル GlassCase

デモゲーム補足説明

  • Ruby/SDLをラップしたMyGameで実装
  • アプリケーションはシンプルなピュアRubyで書かれている
  • P3の933(ビデオは貧弱なオンボード)メモリは512Mという5年くらい前のPCでデモしているがサクサク動く

ソース1(驚くほど簡単な画像描画)

require 'mygame/boot'
Image.render "sample.bmp"

ソース2(メインループと画像オブジェクト)

require 'mygame/boot'

class Punya
  (略)
end

bg     = Image.new("images/bg_race.png")
punyas = Array.new(6) {|i| Punya.new(i) }
main_loop do
  bg.render
  punyas.each do |punya|
    punya.update
    punya.render
  end
end

スライド

MyGame


作者


オレオレ


本題


鈴木さんかわ
いいよ鈴木さ
ん
というわけ
で、

本が出ます。


Rubyではじめ
るゲームプロ
グラミング

7月発売
(たぶん)

※TeraPadで発表しました。

宣伝用パネル

宣伝用パネル

※主に懇親会で使用。

2007-06-11

RubyKaigi2007をやってきた

当日のボランティアスタッフとして参加してきた。

コミュニティに参加してきたぞ、という感がすごく残った。 えっとまず自分はRubyが好きで、これはコミュニティとは関係なく、フツーにRubyそのものが大好き。 その次にRubyコミュニティが好きで4年くらい前からできるだけ積極的に参加してきた。その延長で、前回に引き続き今回もスタッフ側の立場からRuby会議に参加したわけだけど、内側からアプローチしたからこそきっと一般の参加者とはまた一味違った雰囲気を感じられたと思う。

それで、感想としては、なんというか、非常にアツい。 アツい人間がいっぱい集まって、それで人間同士が密にひとつの目標に向かってあれこれ行動するという、まあこれはどんなプロジェクトでも必要なことだけれども、うん、でもわれわれの場合Rubyという共有物があるからこういう経験ができるわけだ。 オレにとっては生の人間を最も強く感じる場で、生の人間だけにしんどいこともいっぱいあるし、でも当然そこでしか得られないこともいっぱいあって、うん、とても面白かったです。

Rubyをやっていたからこういう場に触れることができて、それがまた日々のRubyプログラミングにもフォードバックされて……この繰り返し。 コミュニティ、人間同士のふれあい、生きている実感とかそんなものをすごく実感したのでした。

2007-06-08

[Ruby]RubyKaigi2007

日本 Ruby 会議 2007ですが 当日スタッフとして参加します。懇親会その他にも出席する予定なのでよろしくお願いします。

2007-06-04

[Ruby]やりたいこと

やっぱりちゃんとやっていることを書かないといかんなあ。ログが残ってないと不便ででしょうがない。

今後やっていきたいのはRubyを使ってゲームを開発を楽にする試み。といってもMyGame(Ruby/SDL)みたいなRubyそのものでゲームを一本作る話じゃなくて、Cペースの組み込みプログラムの中にRubyを組み込む方法を研究したい。たとえばPS3やWiiのゲームプログラムにRubyを組み込んじゃうということ。

こんな風にしてRubyを起動するイメージ。

//test.cpp
ruby = new Ruby;

こういうの今のRubyでできるのかな。YARVになったらこういうことが可能になるんじゃないかと想像してたんだけど、まだ調べてません。

で、このRubyオブジェクトはたとえば、NPCの行動アルゴリズムを動かすのに使ったりとか、ゲーム全体のシーン管理に使ったりとか、必要に応じていくつもインスタンスを生成して使うイメージ。RubyスクリプトのレベルではDSL的にプログラムを記述してゆく。処理速度が必要でない場面もたくさんあると思う。組み込みで使うのだからいろいろ厳しさがあるんだけど、Rubyが多少不安定で最悪落ちても大丈夫なようにあらかじめ小刻みに生成・破棄するような使い方を設計しておけばなんとか実用にならないかなあ、とか、どうやったらRubyの利点が引き出せるかなあとか、そんなのをちょっと考えたいです。