コラム

GSD


また2次創作です。すみません。

このゲーム自体は2013年に開発を開始して、2015年に完成させたものです。
ボクの処女作でして、ボクのエッセンスが色々詰まってます。今遊んでもそこそこ面白いです。

で、結局RPGツクールって完成させられるのかという話ですが、ボクは完成まで27ヶ月掛かりました。
いやきついですマジで、正直2013年にタイムスリップできるなら、ボクはボクに「辞めておけ」と言うでしょう。

なにがきついかって、自己肯定感が凄く低いんです。RPGツクールという名前がよくないんです。Unityでゲーム作ってるって言うとなんかおしゃれですが、RPGツクールにはそんなものはないです。名前が絶望的にダサいんですから。

「RPGツクールでゲーム作ってます」って人前で言える人はそうそういないと思います。そんな感じで自分の自尊心が低くなるので、リアルがどんどん腐っていきます。

なんかネガティブなことばかり書いていますが、こういうことは完成までずっと考えていたので、
しょうがないです。RPGツクールには感謝と恨みがたっくさんあります。
前回のデジタルTCG作ったので開発手順とか考えてたことをまとめてみたからも垣間見えるように、ゲーム開発はどろ臭いです。

なんで27ヶ月も掛かるかというと、これはRPGツクールだけでなく他のツールを使ってもそうなります。開発初心者って、自分を客観視できないんですよね。主観でしか評価できず、故にテストプレイに飽きて削除を繰り返します。

これは単純に、初見のテストプレイ時の自分の感想を書き留めておくことで回避できます。プレイヤーは初見なんですから。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

RPGツクールなので技術的な話とかはぶっちゃけないです。スクリプト素材とかイラスト素材とかをふんだんに使っているので、自分の存在意義を問うことになります。
自分って何者なんだろうと自問自答をずっと繰り返しながら制作するので、また飽きて削除とかしてしまうのです。まあ、一本完成させれば自分が何者なのかは分かりますけどね。

答えは……デザイナーです。そう、ゲームデザイナー。リソースを組み合わせてより良いものを作る人。料理人とかMAD動画作成者が近いですかね。

実は実制作期間は5ヶ月です。前半の22ヶ月はRPGツクールの操作に慣れたり、作っては消したりを繰り返してました。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
まとめ
正直RPGツクールだろうがプログラミングだろうがほっとんど何も変わらないから、さっさと完成させてプログラミング勉強して欲しい。RPGツクールでゲーム完成させた後にC言語を勉強しても命令の記述がなにもかも同じでびっくりするでしょう。そして、C++とオブジェクト指向を学んで、これはイベントを作成する機能だと直感で理解できれば最強です。その導入の為のツールとしてはRPGツクールは最高ですね。
このエントリーをはてなブックマークに追加

DMS


開発環境:Win7 & 8.1 + Visual Studio 2015, 17, Eclipse CDT
使用言語:C/C++ + DXライブラリ + WinSock1, 2 + BSDSocket


はい、2次創作です。すみません。
あと、このゲームは今からちょうど1年半前に開発を開始して、そこから5ヶ月で完成まで持って行った作品です。なぜ今になって掘り出して書いているかと言いますと、完成させてから1年が経過して、自分の中で整理できたからです。

システム的にはShadowverseとかHearthstoneとかWAR OF BRAINSとかと同じだと思います。オンライン対戦ゲームはボクの能力の限界を超えていたようで、今見ると酷いコードがたっくさんあります。

まず、オンライン部分の開発は後回しにしました。オフラインで動く部分を全部作りきってから、TCP/IPの勉強を開始した程です。具体的にはデッキを作成/編集して、テキストファイルへ保存する部分です。これは単純に各カードに一意のIDを与え、識別し、エディタ(ゲーム内の)からドラッグアンドドロップでデッキリストへ追加するというものです。
no title


で、保存ボタンが押された時にテキストファイルへそのIDを出力します。
ゲームを起動するとそのテキストファイルからIDを読み込んでデッキリストを生成するのです。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

オンライン部分なんですけど、当初は自宅にサーバーとしてデスクトップを立てて、クライアントのアクセスをそこで受け止め、IPアドレスを交換しあってました。
……のですが、火事が怖いのですぐレンタルVPSへ切り替えました。
さくらVPSを借りて、そこでIPアドレスを交換するマッチングサーバー(プログラム)を動かしていたのですが、HTTPで通信するように書けばさくらサーバーでも運用できたのかもしれません。詳しくは知りませんけど。

マッチングはUDPで行い、IPアドレスを交換した後はTCPで通信していました。ですが、マッチングもTCPでやるべきだったと反省しています。UDPでやる意味がないです。
あと、クライアントプログラムが今見ると本当に酷いです。
WSAWaitForMultipleEventsとWSAEnumNetworkEventsを両立していると言えばその酷さが分かるでしょう。エラー処理もぐちゃぐちゃだし、connectのブロッキングは回避していないしで、書き直す気力も起こりません。
最近WinSockの勉強をやり直してやっとこさきれいなプログラムが書けるようになりました。
絶対に挫折させないWinSock

でもTCPはレコード境界を作らないので、その辺りの処理をプログラマが実装しなきゃいけないのがなんとも面倒くさいというか、レコード境界付きTCPを誰か作ってください。20年待ちます。

あ、あと、WinSockもBSDSocketも中身はほとんど同じなので、参考書の中身が大分被ります。違う部分の方が少ないので学習は楽です。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
カードの効果は……
とりあえずボクは毎フレーム毎にバトルゾーンのカードが効果を発揮していないか確認していましたが、今思えば無駄だったと思います。プレイヤーがアクションを起こした後に1度だけ確認すればよいですね。

カードの情報を保持するクラスを作成して、他のクラスのメンバとして使用していました。例えばデッキクラスから生成されるデッキオブジェクトの実態はカードオブジェクトの配列です。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
グラフィカルじゃないよね……?
はい。DXライブラリを使うのはこれが初めてで……というかそもそも画像の表示とSEの再生にしか使ってないです。

なので演出の凝り方とかよくわかんないです。
でもアニメーションの再生は分かりました。フレームを確保する関数を書いて、その関数へ渡したフレームの間は他の関数の処理を止めればよいのです。
これを利用して呪文を発動した時だけはちょっとだけかっこよく表示されるようにしています。
(51秒目から)


というか当時は数学もIとIIをやった位で、その上なにもかも忘れていたので、画像の斜め移動とかはやっつけで書きました。sinとかcosとかにラジアンすら渡してません。適当に数値を代入して、1時間位掛けて目当ての方角へ移動する値を見つけてはそれを保存しておくという、他のプログラマが見たらドン引きするような手法をしていました。

だってこの為だけに数学やりたくなかったんですもん。時間もありませんでしたし。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
まとめ

すごく楽しかったけど大変でした。
もうオンラインゲームは作りたくないです。考えることがたくさんありますから。
でもまた作りたくなってるんですよね。もし次作るとしたらオリジナルのカードゲームにしようと思います。やっぱり2次創作は精神的に辛いです。
このエントリーをはてなブックマークに追加

まずは下の動画を見て下さい。

※曲は僕の大好きな Lose Yourself です。

閲覧ありがとうございます。このページではオンラインゲームの作り方を解説します。
僕の名前はRyuです。
世界中の誰かとランダムにマッチングして、1:1で対戦するカードゲームを作った経験を持ちます。

http://jamfolder.work/DMS

残念ながらサーバー台を捻出できなくなったり、モチベーションが落ちたりして現在はサービス終了しています。

オンラインゲームを作るルートはいくつもあります。
僕が取ったルートはこちらです。
C言語→C++言語→DXライブラリ→Winsock2→Linux/CentOS7 & BSDSocket

ちなみにDXライブラリはゲームの根幹の部分を制作するのに必要なだけで、通信機能とは一切関係ありません。お好きなライブラリでどうぞ。


他には……
C言語→C++言語→UnrealEngine
C#言語→Unity
Java言語→サーバーサイド

などのルートがあります。

僕が取った具体的なルートを提示します。
ここに書いてある修行を全てこなすことができれば、オンラインゲームは作れるようになります。

C言語→C++言語→DXライブラリ→Winsock2→Linux/CentOS7 & BSDSocket
スラスラわかるC言語 (Beginner’s Best Guide to Programmin)
・表記されているサンプルコードを90%以上写経する。(書き写す)
・読み進める過程で、なぜこうなるのかを理解する。

独習C 第4版
・表記されているサンプルコードを90%以上写経する。
・読み進める過程で、なぜこうなるのかを理解する。

やさしいC 第5版
・ポインタの章, 配列・ポインタの応用の章のみ読む
・読み進める過程で、なぜこうなるのかを理解する。

C言語→C++言語→DXライブラリ→Winsock2→Linux/CentOS7 & BSDSocket
C++ の絵本
・表記されているサンプルコードを90%以上写経する。
・読み進める過程で、なぜこうなるのかを理解する。

独習C++ 第4版
・表記されているサンプルコードを90%以上写経する。
・読み進める過程で、なぜこうなるのかを理解する。
(第9章は第13章の後に取り組んでも可)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)
・1回読む。(サンプルコードの写経は必要ない)


C言語→C++言語→DXライブラリ→Winsock2→Linux/CentOS7 & BSDSocket
https://dixq.net/g/ にてDXライブラリの基礎を学ぶ。

https://bituse.info/game/shot/ にてオブジェクト指向的ゲーム開発(機能分割型ゲーム開発)の基礎を学ぶ。


C言語→C++言語→DXライブラリ→Winsock2→Linux/CentOS7 & BSDSocket
マスタリングTCP/IP 入門編 第5版
・1回読む(サンプルコードの写経は必要ない)

猫でもわかるネットワークプログラミング 第2版
・第1章/第4章/第6章/第7章のコンソールの部分だけを勉強する。
・上記の章の表記されているサンプルコードを50%(コンソールの部分)以上写経する。
・読み進める過程で、なぜこうなるのかを理解する。
・Win32GUIの話は理解さえできればよい。また、サンプルコード写経の必要はない。

WinSock2プログラミング―Windows Sockets APIによるネットワークプログラミングのすべて
・1回読む
・表記されているサンプルコードの内、気が向いたものは写経する。
・読み進める過程で、なぜこうなるのかを出来る範囲で理解する。

DXライブラリもWinsockも、関係ないライブラリとAPIなので、そのままincludeすると競合します。
競合を回避するには下のリンクの記事を読んで下さい。
DXライブラリとWinsock2を併用する方法
http://jamfolder.work/archives/22073653.html


C言語→C++言語→DXライブラリ→Winsock2→Linux/CentOS7 & BSDSocket
Linuxネットワークプログラミング
・表記されているサンプルコードを90%以上写経する。
・読み進める過程で、なぜこうなるのかを理解する。

サーバーサイドプログラムは家の余っているPC等にLinux/CentOS7等をインストールしてEclipse CDT を使用して書く。また、完成したサーバーサイドプログラムはさくらVPS等に載せる。

詰みそうなポイントは当ブログの記事(http://jamfolder.work/Programming)にも書いてある
WSAEventSelectの挙動などで分からないことがあれば参考にして欲しい。


また、本当に分からなくて困った時はこちらのメールへ相談頂ければ対応します。
但し、私も1人の人間なので解決できない問題もあります。
(★を@へ変更して下さい)
duemachine★gmail.com


結局のところゲーム制作は根気と根気と根気である。
簡単に諦めず、なんとか喰らいつこう。
このエントリーをはてなブックマークに追加

RPGツクールでゲームを作るのは良いが、ゲームが完成しない。その理由を現役ツクラーであり、完成経験者である私がまとめる。
少し上から目線に感じるかもしれないが、さっと書いているだけなので許して欲しい。

◆モチベーション編

「俺、こんなことしてていいのか? このゲームの制作者は確かに俺だが、スクリプトは借り物だし、絵も借り物だし、音楽も借り物だし、全部借り物じゃないか……」と考え、自分が無力であるかのように錯覚し、モチベーションを失う。

私はこうなった。結論から言うと全く気にしなくて良い。世の中にはツクール以外にも様々なゲームエンジンがあり、それらを使用してゲームを制作する場合でも、必ず何かしらのお世話になる必要がある。ツクールを使用せずプログラミングでSTGを作るにしても、ライブラリというスクリプトの集合体をダウンロードしてゲームに組み込み、制作するからである。ツクールでゲームを作っていたときは、「結局他人のプログラムを借りているんだよな……」と考えるが、ツクール以外のゲームエンジンやプログラミング言語を用いて制作するにしても、「結局他人のプログラムを借りているんだよな……」という気分に陥る。よって、この感情はゲームを作る上で一生付きまとうため、気にしなくて良い。(ツールを使おうがスクリプトを借りようが制作者はあなたである。どうどうと胸を張ろう)

また、ツクールで使用するプログラミング言語は、正確にはスクリプト言語と言って、比較的かんたんに習得できる言語である。Rubyという言語がベースになっているので、その言語を学べばスクリプト素材を自作することは可能である。3ヶ月もあれば習得できるので、いっそのこと制作を中断して勉強してみてはどうだろうか?
3ヶ月の勉強で、今後のツクールライフにてスクリプトを借りたり、モヤモヤしたりせずに済むならば、充分見返りはあると思われる。

【たのしいRuby】http://amzn.to/2de6NCS


「このゲーム面白いのか? このイベント面白いのか? この敵キャラ面白いのか?」

当たり前だが、制作者は自分の画面を何百回と見るため、飽きるのである。そして面白いか面白くないかの自問自答に陥る。実は東方サクサクエストも、公開した段階では私自身は面白いとは思えなかった。
しかし、面白いと言ってくれた方は割合で言えば結構いた。(もちろん面白くないと言われたこともあった)
この感情に整理をつけるのは難しい。が、ゲーム制作者なら誰もが通る道であり、みんな同じことを考えている。
プレイヤーは初見であることを念頭に置いて(デスクトップの付箋に貼ってもいいかもしれない)、面白いと信じて作るしか道はなさそうである。

実験をしてみるのも良い。自分の好きな動画のネタをYoutubeで探してみよう。
できれば抱腹絶倒できるネタが良い。それを10回見よう。恐らく4回目位には無言でページを閉じるはずだ。

また、人の好みは千差万別、全員に受けるネタを作るのは不可能であると割り切ろう。

必ず失敗する方法は、全ての人に好かれようとすることだ。──哲学者プラトン


◆リアル編

・東方サクサクエストの制作には5ヶ月掛かったが、実は東方サクサクエストには前身のゲームがあり、そっちは2年作っていたがついに完成しなかった。

理由は一つ、自らハードルを上げすぎたのである。
神ゲーを作ろうとし、敵キャラは1500体用意しようとしていた。
東方キャラも全員出そうとしていた。

制作するからには面白いゲームを作りたいのが人情であり、ごく自然なことである。
しかしちょっと待って欲しい、敵キャラが1500体出てくるゲームは果たして本当に面白いゲームなのだろうか?
もちろん面白いのだろう。ただ、その面白さは敵キャラが100体強しか出てこない世界樹の迷宮やドラゴンクエストに勝るものなのだろうか。 作業量は15倍だが、面白さは15倍になっているのだろうか?
残念ながら、作業量と面白さは比例しない。
”無駄”な部分を削ぎ落とし、洗練されたゲームデザインを検討することも必要だろう。

費用対効果が最大になるのは敵キャラを何体作ったときなのだろうか?


・とにかく完成させる

神ゲーを作るのは2作目からで良い。1作目から神ゲーを作りたい気持ちも、せっかく作るなら全てのゲームを神ゲーにしたい気持ちもよく分かる。

が、はっきり言って最初のゲームは、作った瞬間は綺麗に見えても、後から見直せば治したい部分は山ほど出て来るし、そういう部分があるので伸びなくても当然である。

作品を作るのに技術力はいらない。大事なのは2作目を出す精神力である。

個人的には東方サクサクエストの直したい部分はダンジョンの構成と戦闘バランスである。
元々妖々夢ストーリー、永夜抄ストーリーと追加していく予定だったのだが、飽きてやめたため、1ストーリーのみの難易度の低いゲームになってしまった。

ゲーム制作はとても辛い。やれば完成するという訳ではない故、精神的なプレッシャーが大きい。
完成させてもDL数が2000で止まるとかザラである(私の想定は10万DLだった)
しかし一度完成させれば、あなたは類稀なる精神力と強靭な、狂人的な忍耐力を手に入れられる。
これは後々の人生においてはかなり役に立つだろう。
このエントリーをはてなブックマークに追加

↑このページのトップヘ