« WinCVS | トップページ | 小鳥と風とバイオリン »

2005年2月 7日 (月)

RGSS・・にちょっとばかしクエスチョヌ

最近ゲームづくりが、いきづまっている。

なんだかなかなかよいシナリオが浮かばない。
浮かんだとしても、それを表現できる自信がない。。

根本的解決にはならないとは思うが、
逃げるのもいやなので、シナリオはちょっと後回しに
して、この週末、表現力をつけるべくRGSS勉強をした

RGSSとは、何の略だか知らないが,
エンターブレイン(ファミ通の出版元)が出してる
RPGツクールXPという、ゲームづくりソフトのなかで
用いるスクリプト言語だ。

ヒジョーにニッチだ。。
コレを覚えたところで
他に何の役にたつのか。。

いや、しかし、侮ることなかれ。
このRGSS、ベースはあのRUBYなのだ。
そう、RUBYといえば、今を時めく
日本発オブジェクト指向スクリプト言語!
ちょっと良いじゃないの^^

さて、そのRGSSつまり、RUBYで何をやったか。。
昨日・今日で私のやったことは、

セリフを出す噴出しのなかで、
ドラクエみたいにプププと音をたてながら、
セリフが一文字ずつ出てくるようにする

というものだ。

んーステキ、ニッチだ^^
でもね、神はディテールに宿るのだよ。
ディテールにこだわってこそプロってもんだろ
アートってもんだろ。(プロじゃねぇだろ!)
いや、正直、ものすごいがんばったw


いつもWEB系の「リクエスト受けたら返す型」
いわば関数型のプログラミングしかやっていない私にとって、
RPGとはいえ、ゲーム、つまり、
「時間軸があって、さまざまなオブジェクトが
同期をとりながら作用しあう」プログラミングは
正直畑違い。難しかった。

しかし、このRGSSというもの。
ゼロからつくるのではない、

そこに、ツクールの作者の書いた、
ルビースクリプトが、どーんと存在していて、
これを改造するのだ。。

その、そこにどーんと存在しているRUBYスクリプト。
これをRGSSというのか、RUBYをRPGツクールXPからいじると
それが、RGSSと呼ばれるのか、はたまた、そこにどーんと
存在しているRUBYスクリプトで書かれたクラス群のスーパークラスを
RGSSというのか、そのあたりは定かではない。

が、とにかく、そのRGSSというやつでゲームを作るというのは、
そこにあるスクリプトを改造することなのだ。

さて、改造というと楽に聞こえるかもしれない。
確かにゼロからつくるよりは楽だろう。

しかし、そこにどーんとプログラムが存在している
ということは、つまり、そこにあるものを、まず
”解読”しなくてはならない。

これが、今回の作業の一番大変な部分だった。


プログラム言語なんていうものは、どれも似たり寄ったり
なもので、RUBYという初めての言語も、ここ数年
私の触ってきた言語、JAVA&C#&PERLの
和集合の中に、ほとんどの概念は含まれている。

したがって、学習はきわめてスムーズで、
WEB上のリファレンスマニュアルを見れば、
何とでもなる。

問題は、その上のレイヤー
そこにある、巨大なプログラム、、
である。

どこで何をやっていて、どういう設計思想でそのような
ものになっていて。。どこをいじるとどういう風になるのか。。
そこそこ巨大なプログラムな訳で、これを解読するのは
カンタンではないわけだ。

しかしそうはいっても、そこは、私も曲がりなりにも
プログラミングに関しては、いちおうそれで
飯を食っているという意味で「プロ」なわけだ。

この週末まるまる、ほぼコレばっかりやってたこともあり、
さすがに、全体像は見えた。

RGSSというのが、何者であるのか。。
どのオブジェクトが何してるのか、
どんな継承関係にあって、どんな設計思想に
なっているか、などなど。

また、RUBYという言語にもだいぶ慣れてきた。
RUBYはJAVAっぽくもかけるし、PERLっぽくも書ける。
非常にFLEXIBLEな言語だ。なかなか面白い。
(すべて明示的に宣言してゆくことも、
 色々省略しまくることも可である。)


奮闘すること2日、無限ループで固まったり、
音が永遠に止まらなかったり、まあ、考えられる
あらゆるエラーを経験したのち、私の求める
「プププメッセージウィンドウ」は
やっと動くようにはなった。

勝利である。しかも、
「偶然動いちゃった」系の勝利ではない。
どん底まで落ちて、大革命(大手術)を計画し
実施したことによる勝利である。

正直、
なかなかの満足感である。
つかんだ!という想いが大きい。

そして、勘違いやもしれぬが、
「つかんだ!」という高揚した気持ちの私の頭の中には、
今、ひとつの記号が浮かんでいる

それは、「?」
クエスチョンマークである。

クエスチョンとは、対象を持つものである。
疑問をもつ対象物が存在し、そこに
クエスチョンとは向けられるものである。

さて、今、このクエスチョン、
どこに向けられているかといえば、
そう。私の格闘した相手、RGSSの元プログラムだ。

また、クエスチョンとは、詳細・理由
あるいは内容というものを持つものである。

その内容とは、なにか。。!
恐る恐る書いてしまいましょう。

いや、待て.
このクエスチョン、思えば、2重の意味でのクエスチョンだ。
疑問というのは、物事の本質を突いた、立派な疑問と
誤解に基づくぼろい疑問がある。

私は、今私の持つ疑問が、このどちらに属する
種類のものであるか、まだ自信がない。

つまり、現在私の頭に浮かぶクエスチョンマークには
もうひとつ、この命題自にむけられた
メタクエスチョンという意味合いもある。

したがって、以下は、
おそるおそる。。である。いや、、 です。

文体も、畏れ多く行きたいものです。

さて、核心に迫りましょう。。


ぼそぼそ )私の早とちりかもしれないけど、、
ぼそぼそ )この元プログラム。。
ぼそぼそ )「なんかオブジェクト指向っぽくなくない?」
ごにょごにょ) んー。。わかんないけど。。


 なぜ?


ぼそぼそ )なんか、変数が、、いろんなところにあって
ぼそぼそ )カプセル化あんましされてないような。。
ぼそぼそ )  だから、読みづらい。。
ごにょごにょ)  いや、僕が馬鹿なだけという噂も。。

いっちゃった^^
畏れ多くも!


私は、中学生のときから起算すると、
ベーシックやら、Z80やら、フォートランやら
パスカルやら、、その後、MATLABやら
PERLやらJAVAやら、、と言語を渡り歩いてきた。

この系譜を見ればおおかた予想がつくとは思うが、
こういう人間にとって、「オブジェクト指向」といえば、
JAVAが原点だ。

オブジェクト指向というと、すぐにJAVAを連想するのだ。


そして今回のRGSS.

その基となる記述言語、RUBYは、
その名前からしてPERLを強く意識しており、
PERLとの差は、「はじめからオブジェクト指向である」
ことである、と読んだ。

すると、私の中で、RGSSは、
JAVA的な価値観のなかでの分析・検証が
始まってしまうのである。

まず、グローバル変数。。 ピクッ

 いや、まあ、スクリプト言語なんだ。。
 それは、あたっていいだろう。 (どうどう。。)

 JAVAは理想主義に走りすぎているきらいが
 あるという批判が多い。
 どこからも短い記述で参照できるグローバル変数
 というものを使うのは、やりすぎでない限り
 悪いことではない。

 JAVAのプログラムは、長い。
 
 アクセサにgetだのsetだのつけて定義するのは、
 死ぬほどアホらしくてつまらない作業だ。
 
 IDEを使っているから気にはならないが、
 時々ゲリラ的にJAVACするときに、
 何をするにもタイピング量が多いのに少々
 つかれることがなくもない。

 スクリプト言語というのは、堅牢さを少々犠牲にしてでも
 手軽さが欲しいときに使うものであって、あれはアレで
 よいのだ。

 さて、RGSSだ。。きっと、RUBYだから、
 JAVAじゃないからあれでいいのだろう。。


いや、ホント、すごくよく出来てると思う。
「ゲーム」という、私の知らない分野、、
ふーん。こういう風にオブジェクト化するのねぇ。。と、
非常に勉強にはなった。。

んー。。しかーーーーーし!

やっぱ何か腑に落ちない
私がJAVA畑純粋培養だからだろうか。。
なんだか、こころのどこかで、何かが違うと
思うのだ。

ひとことでいえば、
「オブジェクト指向のお買い得ポイントである、
 カプセル化、メッセージパッシングを使った
 可読性の高さ、保守性の高さの実現」

が出来てないと思う。

いや、意図して
してないのかもしれない。。
なんか、別の理由があって、

でも、やっぱ、

 ・グローバル変数使いすぎでね?
 
と、思うよ。


とにかく、自分、前述のように、週末ずーーーっと、
「RGSSの元プログラム書き換えて、
 ドラクエみたいなプププせりふウィンドウ実現」
という課題に取り組んでたわけなんだけど、

とにかく、処理がみえない。。

いや、ホントいうと、なんとか、
見えてきたよ。。確かに、200回ぐらい
エラーだしながら試行錯誤したり、
シーケンス図でも書いてみようかとおもってみたり、
色々したかたら。。

でも、だからこそ思うんだよねぇ

あ、まず、あれ、
シーケンス図、書けねぇわ。。

いや、かけるかも知れないけど、
めっちゃめちゃ入り組んでる。

そうそう、ということは、
自分の畑の価値観で判断すれば、
つまり、モジュール分離が悪いのだよ。


あ、そうそう、自分の一生懸命やってたこと、
こちらのサイト様でさっくり、カンタンに出来てるぞ! 
って思う人がいるかもしれないけど、実は
それではないのです。

まさに、キーワードからすると、
ズバリそれ!なので、当然自分もそのまま
やってみましたよ。。

でも、1点どうしても気に食わなかった。

こちらのサンプルだと、
プププとメッセージが流れている間、
他の人が止まっちゃう。。のだよ。。

これは、なんか、自分の求める仕様ではなかった。

プププとメッセージが流れる間も、世界には
動いていて欲しかったのだ。。

いや、細かいよー。。細かい。。
どうでもいいじゃんと言う世界ではあるよ。。
でもね、そこに拘りたかったのだよ。


んで、そこに拘るとなると、多分
根本的な構造を変えなくちゃいけない。

具体的には、Window_Messageの
修正だけではすまない。
Interpreter、にも修正が及んでくる。

ということで、なるべく小さな修正でなんとか
なるように、ホント、色々試したんだけど、
 =セリフ1行ごとに行う処理
 =セリフ一文字ごとに行う処理
 =フレームごとに行う処理
が入り乱れて、もう、大変なことになってくる。

 #ていうか、なんで、
 #一文字ごとにdraw_textしてるのコレ?
 #みたいな、疑問も湧いてくるし。。


それで、ぐちゃぐちゃになったとき、決心しました。

自分のなじんだいわゆる普通の
オブジェクト指向的構造で、きれいに整理してやる!
。。と。

ぼさぼさの髪の毛に櫛を入れるがごとく、
入り乱れた各種変数を、なるべく
インスタンス変数化するなどして、カプセル化していったら、
きれいに整理できたかはわかりませんが、
なんだか、すっきり、思い通りの処理をしてくれるように
なったと。。

そういうわけで、結構達成感ヤッホーで、ついでに
なんだ、これでスパスパ動くんなら、そっちのほうがヨクネ?
ってクエスチョン確度があがってきてるのだね。

いやね、RGSSのもともとのプログラムで多用されている
パターンとして

オブジェクトAから Bに Cという情報を送るときに、

 1.Dというグローバル変数、(普段はNULLっていうかNIL?)を用意
 2.BはDを毎フレーム監視している
 3.AがDにCという情報をつめる、

というようなものがある。これが、とにかく多用されている。

これで、思い出したのは、半年前の仕事のこと。。
当時、ウチの会社のエラーい人
(エライひとながら現場人間)が推進する
WEB/XMLのフレームワーク?みたいのに関わる
仕事をしていたが、正直あきれ返ったのね。

COBOLだったひとが、JAVAかくと、こうなっちゃうのか。。って

んで、そこでとにかく呆れ返ったうちで、一番
意味不明だったパターンなんだよね。これ。

んー。。 かっこよく言えば、
オブザーバパターンとでもいうのかな?GoF的には、
よく知らんけど。。


でも、なんか、違うだろ!と思う。

だって、こういう処理に、
そんな複雑なパターンいらなくね?

Bに、setC() ってメソッド用意して、
Aから呼べばいいんじゃなくて??


いや、オブザーバパターンを悪だとは、いってないよ。
非同期処理だとかで、きっと、世の中には、オブザーバパターンが、
必要なときってのもあるとは思うよ。。

でも、なんでもかんでもこれでやるのってどうかなと思う。
だって、今それ、いらないもん。

意味もなく複雑な(というか、問題がそこらに分散しているような)
処理を組み込むと、明らかにソースの可読性は下がるわけで、
そうすると、改造が容易でないカタいプログラムに
なってしまうわけで。。

やっぱゲームPGだって、保守性・可読性大事だと思うよ。
だって、たとえば、

「あ! ここ、魔空間から来たコミカル野郎なんだから、
 なんか字を揺らしてみたいなぁ」

なーんて、いうアイディアが浮かんだときに、感性の
赴くまま、1分で、、最悪でも10分で改造できる、、という
状態にしておくことって大事だと思うんだよね。

それが、一箇所手を加えたら、影響範囲がどこまで亘るか
見えないようなプログラムだと、そのあたりのフットワークが
重くなっちゃう。。

ということで、やっぱ、オブジェクト指向万歳人間としては、
えーと、けつろん、

まあ、Window_Messageクラスはほぼ別物になってしまいました^^
Interpreterも、結構コアになる部分の処理が変わりました。

処理が変わること自体はいいことではないですが、
そのおかげで、さまざまな追加機能を足しこむことが
簡単にできるようになりました。

たとえば、ちゃちゃっと実装できたものとして、
イベント名を自動で拾って
ウィンドウに表示(誰がしゃべってるのか表示)する
機能やら、そこにキーワードいれて、

\n[1]の母
おかえり\n[1]、
今日のご飯はシチューよ

という風にもなったわけで、まあ、顔グラっつうのも、
すぐ出来そうだな。問題は、ビジュアルデザインだな。

あとは、しゃべる人間の音の元ファイルと音量とピッチを
ツクールGUIから何らかのカタチで設定できるようにも
したいもんだなぁ。。

問題は、それの外部仕様だわな。
変数。。かなぁ。。それとも、
イベント名に、キーワード設定で、そいつの
声の質を変えちゃうってのもアリだよな。。
同様にフォントも、MS 明朝とMS ゴシックの
切り替えは出来てもいいと思う。
(この二つはウィンドウズ標準で入ってるから)
ボールド、イタリックも。。か

それと、プププ表示じゃない、以下表示にも対応させたい

 1.普通の表示
 2.ボタンを押さなくても、次々と移り行く表示
 3.フェードイン/アウト
 4.ウィンドウのタイプ

うへぇ。。すごい。。 巨大な外部仕様になってきた。
まあ、技術的には、出来るな。。

いかに、設定できるようにするか、
その外部仕様を美しく決めればよい。。

くだらん?いや、くだらなくない!

コレすごい大事。
RPGの中における
メッセージウィンドウのLOOK&FEELって
絶対軽視できないと思うわけさ。。

フォントひとつで、かわいい女の子にも、
ごっついオヤジにもなる。

フンワリフェードインするイタリックの流れるような文字は
神の声になるし、

戦いに疲れ果てた兵士の声は、
ポツポツと、途切れ途切れの、
低い,小さな音になるはずだ。。

「声」という表現手段の代替として、
私の少ない「語彙」というものの代替として、
ドラマを演出するための、メッセージウィンドウUI

そこそこ自由度のあるものに、改造したいものである。

よし、そんじゃ、仕様考えよう。

« WinCVS | トップページ | 小鳥と風とバイオリン »

ゲーム」カテゴリの記事

コメント

『み』です*こんばんは ってまだ日本明るいですが。日が長くなったなぁ。Jの文もあいかわらず長いですがだいぶ慣れたですホメテ。(なにをだ)

ゲーム作り頑張ってますねぇ*息子共々楽しみにしています*

先日ツクールで作られた「.room」ってゲームをやりました。すごく短いのですがけっこう楽しめたです。ただ、一番大事な詰めの部分が少しわかりづらくて「作者の解説(というか攻略法そのもの)」を読んでようやくクリアしました。

作者が介入しないとクリアできない(私がただ単にひらめかなかったんだろうと言われるとそれまでですが、その部分に関してだけは本当にわかりづらかった)のは、作者の思い込みだけで作っちゃったのかなぁという「素人くささ」を否定できないところです。
他の謎解きやトラップ、徐々に明かされる主人公の秘密、などの設定がよく出来ていただけにちょっと残念でした。

こだわりもいろいろ多いと思いますがやはり一人だけで作らず、シナリオができたらKちゃんにでもレビューしてもらうといいと思うです*
私は絶対にプレイヤーしたいので、手伝わないよ~(ぉぃ

大田区に行って来ました。
なんだか寂しいよ。早く帰国してください。

おお、M&Tコメントありがとう!(´▽`)

長い文章、ちゃんと読んで
くれているんですねぇ

ちょっと感動^^

書いてるほうも、実は大変で
書きなぐった後たいてい2回ほど
修正入れてます。

ということで、一度書き出すと
最低1時間は吹っ飛んでおります。
(平均2時間ぐらいかも;;さすがアフォウ人)

ゲーム作り、今月17日にKちゃんが
くるので、たくさん
レビューお願いするつもり^^

#というか、現在も、ちょっと進んでは
#「あそんでぇ~」とテストプレイして
#もらってるんですが

「み」に遊んでもらえるのは、数ヵ月後に
なっちゃいそうだけど、よろしくね^^

T(なおどの)、大田区訪問おつかれさんです
おいらのメリケンステイも3分の2終わり、
そろそろ帰国が見えてきました。
(4ヵ月後だが。。)


おいらも寂しいぞ!また一緒にガッツリ仕事しよう

初めまして。
自分もRGSSスクリプトをいじっているのですが、、他人がカスタマイズする事を前提としているとは到底思えないほどオブジェクト指向から離れた作りになっていて結局ほとんど書き直し~って事が多いです。
オブジェクト指向での本格的なプログラミングはRUBYからしかしてませんけど、そんな私が思うのだからかなりやう゛ぁいのかな、って思っていましたが、自分だけでなくて良かった(笑

はじめまして、まろと申します。
大変興味深く読ませていただきました。
理解度は50%以下と思いますが。。
たしかに、RGSSの標準スクリプトは解読し辛いなぁと感じることが多いです。

シムナフさん、 まろさん
コメントありがとうございます!

BLOG「RPGツクールXPスクリプト」著者様
トラックバックありがとうございます^^


いや、僕も、
自分ひとりじゃなくてよかった^^

現在、シナリオ作りに苦心中でRGSSから
離れてしまっていますが、またすぐに復帰する
予定です。

僕もいずれ、スクリプト配布なんか
してみたいなぁと思います。自分のゲームで
動作チェックしてからね^^

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/34023/2834790

この記事へのトラックバック一覧です: RGSS・・にちょっとばかしクエスチョヌ:

» やっぱり変だよデフォルトスクリプト [RPGツクールXPスクリプト]
やっぱりなぁ、変だよなぁ、オブジェクト指向ちっくじゃないんだよなぁ。 グローバル [続きを読む]

» RPGツクール [ゲーム・DVD・マンガ 本舗]
RPGツクール XPおすすめ平均 遂に登場最終携帯XP!中級者以上向けスクリプ... [続きを読む]

» 2005/3/8 [maroblog]
RGSS学習室でシューティングゲームっぽいプログラムをいろいろいじくっています。 しかし、なかなか思うようなプログラムが書けません。 プリセットのスクリ... [続きを読む]

» RPGツクール [エンタメポータル]
RPGツクール XPおすすめ平均 遂に登場最終携帯XP!中級者以上向けスクリプ... [続きを読む]

« WinCVS | トップページ | 小鳥と風とバイオリン »

Haruya's Violin

2018年10月
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

最近のトラックバック

無料ブログはココログ