スキップしてメイン コンテンツに移動

3カ月のゲ制無気力から脱出してUnity1週間ゲームジャムで全力でゲームを作ってみた

Unity1週間ゲームジャムあけで、眠くてぼーっとしていますが、久しぶりに超がんばってゲーム制作したので記憶の新しいうちにブログに感想とかを残そうと思います。
宇宙に数名のファンの人たちにも楽しんでほしいです。
後半は個人的なネガティブな話もありますが、応援してくださったみなさんのおかげで気分が上がっているので感謝をしてから始めます!

作ったゲーム

今回のunity1week(お題「つながる」)では、「FairyBravers(フェアリーブレイバーズ)」を作りエントリーしました。



レトロなRPG風のマップを冒険するアクションゲームです。

ちなみに最後にある動画でも暗示していますが、マップにはツナガルとu1w(unity1week)が描かれています。
どのキャラたちを仲間にしてクリアするのかを吟味する楽しさのほかにも、マップのメッセージを探してもらえるとうれしいです。
それと黄色い花は南に、白い花は北になど少し環境も意識しています。

仲間を集めてスカッと気持ちよく敵を倒すのがメインですが、わずかながらメッセージも残してあるので見つけてもらえたら良いかなと思います。

3カ月のゲ制やる気ない状態からの脱出

実はゲ制したくてもできない期間が3カ月くらいありました。
他の作業に頭を使っていたのもあるのですが、ゲ制が好きなはずなのにやる気がでなくてわくわくしないのはつらかったです。

2月に参加したあほげーも、ゲ制の情熱が出ない状態だったけれど、参加はしたいという想いだけで、短時間省エネで作れそうな企画を考え、なんとか作った感じでした。

そして、3月のunity1weekが迫る中、ゲ制無気力状態は続いていました。
少しUnityを起動したりするものの、何もせずに閉じるような感じで、確かツイッターで「石ころを動かす程度だけでいいから、ゲ制のやる気でてきてくれ」みたいなことを苦し紛れに言った気がします。

そして、unity1weekのお題が発表された月曜日の朝、ダメ元でアクセスしてお題「つながる」を確認。
文書ファイルに、思いつくネタを3つほど書きました。

その3つ目のネタを思いついたとき、アイデアが勝手に膨らみだし、急にゲ制のやる気スイッチが入り、作りたい・いける・楽しいというわくわく感がでてきてくれました。
ある意味3か月分の蓄積したゲ制の情熱がわきでた感じで、すごくうれしかったのを覚えています。

制作過程の思い出

ネタのもととなったのは、古典的なスネークゲームです。
ただし、このスネークゲームには敵がでてきて、プレイヤーのキャラはシューティングみたいに玉を出して攻撃できるイメージでした。

月曜日は、確定していた「球が敵にぶつかるとダメージをうけHP0で消える」という処理を始めに実装しました。
ゲ制無気力だったちょっと前までとは大違いのやる気で楽しく作りました。
攻撃している感じや楽しさを増やせるように、ダメージの数字が飛び出るような演出も実装しました。
この日の成果をツイートしてみると、いつもは0~3件程度のいいねなのに、軽く10件以上のいいね、RTがもらえてすごくうれしかったです。

火曜日は、キャラを移動させ、倒れた敵がアイテムをドロップする処理を実装しました。
これは月曜日に膨らんでいたゲームの仕様の実装です。
結局、公開したゲームには盛り込まれませんでしたが、敵の種類ごとに一定確率でアイテムをドロップさせ、それをコレクションにしようと思っていました。

ここらへんは、先月プレイした寸前みやこさんの「幸せのバレンタインデー」のコレクション集めにはまったのも影響していると思います。
コレクションしたアイテムを見ると、ゲーム本編では語られないストーリーの一部がナラティブな感じで読み解けるようにしたいと思っていました。
ボスに死者を操れそうなリッチを選んだのも、このときの裏ストーリーが影響しています。

結局コレクションは実装できなかったので、ここで話すと、毛皮が欲しいとか研究のためなどといって罪のないモンスターたちをいともたやすくあやめることに怒りを感じたリッチが、反魂の術を使いあやめられたモンスターを復讐者として復活させたという感じです。
死者に近い存在だったリッチには、その嘆きや、人間の身勝手な理由での暴挙が許せなかったのです。

水曜日は、朝に少し大きな仕様変更のアイデアが思いつきました。
攻撃はフェアリーだけが行い、仲間はステータスアップをしたのちはただ着いてくるだけだったのですが、そうじゃなくて一人一人が攻撃をしたほうがRPGっぽいかなと思ったのです。
せっかく、フェアリーが球を発射する実装ができたのですが、それは敵に移植すればいいだろうと思いました。
しかし、その前に、まず味方が自分の後ろをついてくる実装を試行錯誤しました。
最初は Joint2D を使ってみたりしたのですが、うまくいかず、結局自前のスクリプトで移動した場所をリングバッファで覚えさせておき、過去にいた場所に仲間を配置するようにしました。


木曜日になると、もう残り時間も半分ということで、少し焦り始めましたが、火曜日に考えていたフェアリーや仲間が体当たりで攻撃して敵を倒す実装をすることができました。
本当は、このあたりで、最小限の実装、「仲間見つける」「雑魚倒す」「魔王城に移動」「ボス倒す」の一通りの流れを実装したかったのですが、なかなかそこまではいけませんでした。
だけど、ツイートの反応が良くてテンションはあがりました。でも本当に作れるのかというプレッシャーも強くなりました。




金曜日は仮ではありますが、やっと魔王城も作り、ボスを倒すところまで作りました。
それとウィンドウメッセージを実装しました。

最初は魔王城とワールドマップでシーンを分けようと思っていたのですが、魔王城からワールドマップに戻ると同じ仲間が増えてしまったり、順番をおぼえておいたり、仲間にしてないものだけをワールドマップに配置するとかいろいろと面倒だったので、ボス1体だけだし、同じシーンの離れ小島みたいな感じで魔王城を実装し、位置だけのワープをすることにしました。
このあたりから、時間もなくなってきているので、だんだん妥協が増えてきます。


土曜日は、いよいよやばくなってきて、コレクションは無理、キャラも出現条件とかなしにして最初から配置するなどいろいろと妥協をしまくり実装を進めました。
ウィンドウメッセージにも表示されるのですが、仲間には増加するHPと最小攻撃力と最大攻撃力が設定されています。

剣士、僧侶、魔法使い、武闘家はパラメータ合計値が200になるように設定されていて、隠しキャラよりも弱いけど仲間にしやすいという形にしました。
隠しキャラは薬師、踊り子、巫女、忍者で、こちらはパラメータ合計値が350あり、かなり強くなります。

しかし、薬師はスライムを8匹以上倒す、踊り子はすべての街を訪れる、巫女はすべての祠を訪れる、忍者は16コンボを達成する(コンボシステムも結局あきらめました)という条件を達成すると出てくるような設定がありました。
そのヒントがマップ上にコレクション要素としておいてあり、それを読み解くとかいろいろ考えていたのですが、時間がないので割愛しました。

結局土曜日は、HPバーなどの下のステータス表示を実装して、あとは、それぞれのキャラごとに攻撃エフェクトや効果音を変えたり、敵の攻撃のバリエーションを増やしたりして終わりました。
地味に数がある作業で時間がかかりましたし、てんぱってきています。

だけど、以前なら敵の攻撃はみんな球を出すだけで、違いは絵柄とかスピードだけでいいやと妥協していたのを今回は、ハーピーは周囲を一周するミニ竜巻を発生させたり、スライムは漂う毒を発生させたり、リッチはプレイヤーの近くにナイトメアを発生させたりとバリエーションをもたせることができました。
ゴーレムの球は、最初フェアリーが使っていたやつのおさがりです。
しかし、これで敵も味方もそれぞれに個性的な攻撃を出すようにすることができました。


今日はこれでおしまいと思っていたのですが、間に合わないとてんぱっていたからか、夜も遅くまでゲ制をして、この日のうちに効果音や音楽の設定、ランキング・ツイートの設定まで行い、明日はマップ制作を残すのみになりました。

日曜日は、とにかくマップを作ることにしました。
3分でクリアできることを目標にしたので、まず適当にぐるっと移動してみて2分程度になる大きさをワールドマップにしました。
あとは、適当におおざっぱな形をつくり、敵や仲間の配置場所とかを考え、最初はおおざっぱに、そのあとは森や町や山岳や火山地帯や砂浜を少しずつ細かくして作っていきました。

マップには一部隠し通路(地形がつながっていたりヒントはあります)があったりします。あと、踊り子のいる町はモンスターの侵入を防ぐため、わかりにくくされているという裏ストーリーがあります。

途中で、敵を倒したときの最後のダメージカウントが表示されないバグなどを発見したり、ビルドエラーに遭遇してあたふたしましたが、なんとか10分程度でどちらも直すことができました。

あとはひたすら、何週もプレイして敵のHPや攻撃力を調整して、少し歯ごたえがあったり、仲間増えたら強くなる実感を持たせたり、気持ちよく敵を倒せる感じの強さに調整をしました。

そして16時ごろ、アイコンも用意してアップロードして動作を確認。
少しの修正はありましたが、その後、プレイ動画から宣伝用のgifを作ったりして、20時に作品が公開されました。


20時から1時間ちょっと他の11作品程度をプレイして、そのあとは疲れも出てきて眠かったので寝ました。
本当は公開したその日の楽しいテンションのときに日記を書きたかったのですが、その余力はなく、明日にはきっと200作品という圧倒的な数にうもれて、徒労を感じ落ち込んでいると思っていました。

しかし、今回はunity1weekのシステムが変わったのもあるのか、朝起きてみるとゲームページ内コメントも4件もあり、ツイッターでもいつもとは違い反響(もちろん良い評価)があって、とても救われました。

weekがあけて

たいてい、リリース日の翌日は疲労感に加えて、埋もれてしまった落ち込みに苦しんでいた(unity1week以外も含めて)のですが、今回は疲労感だけですみました。
どっと疲れがでたのは以前と同じですが、落ち込まず、うれしい気持ち、あえて大げさに言うならば「もう死んでもいい」という気持ちになれました。
もちろん、一銭ももらえるわけではないし、私の社会的な不安が取り除かれることはいっさいありませんが、1週間寝る時間も少しけずって頑張った作品が評価されたことがとてもうれしかったです。

疲れのせいか、情緒不安定になりましたが、プレイしてくださった方たち反応をしてくれた方たちのおかげで今日は落ちおこまずに済んでいます。
本当にありがとうございます。

また今週からは、ゲ制はほどほどにして、試みている活動をメインにしていきたいと思いますが、ゲ制のほうももっと精進して、もっと良いものを作れるように頑張りたいと思います。
それが何になるかはわかりませんが、私は子供のころからノートにオリジナルのゲームを書いて見せるのが好きでした。
だから、最近4年間近くゲ制を頑張り、あげく無気力になりゲーム制作をやる気になれない時期が3カ月も続いたことは、かりそめの生きがいすらも失ったような絶望でした。

今後も私はどう生きていくのかわかりません。
会社をやめて無職で体調なども不安定だし、周囲の支えてくれる人たちに感謝をしつつも、将来は不安しか感じられません。

だけど、ゲーム作りが好きなのに精進をあまりしない怠け者の私は、それでも、できる範囲でのゲ制をか細い声で存在を訴えるようにつづけるのでしょう。
いつかはデザインもできて、今回のつながるで最初にあきらめた通信も含めてゲームを作りたいです。

今回は、例えるなら、落下し続け海面に落ちる直前に動き出したラピュタのパズーがのったフラップターのような感じがします。
無軌道にだけど一心に進んだ結果、今作ができました。
まだ、そういった意味では、中盤に差し掛かる前なのかもしれません。
僕には主人公のような強さはないので、ムスカに金貨をもらってびびってエンド、それ以前にドーラたちと渡り合うこともなく終わるかもしれません。
他の真人間からみればさげすまれる存在ですが、落ちて戻れなくなった空の上の無数のレールにいつかまたのぼり、まわりを安心させたいです。

ゲーム制作や、ほかのパソコンでできる仕事をがんばって、自分の体でもなんとか自立したいです。
今回は、たまたま最後までやり通すことができましたが、これからは自分のペースで作品をゆっくり作るかもしれません。
本当に今回もありがとうございました。



コメント

このブログの人気の投稿

QTableView で表を表示してみる

タイトルは駄洒落を狙っているわけではありません。 こんばんわ SakuraCrowd です。 今回は今作っているソフトの経過報告です。 最近のブログのパターンは、 「XXX作ったよ。これがスクリーンショットね。あとこんなこと思ったよ。」 という流れですが、 今日はできていないソフトの部分的な話なので、 いつもよりもプログラムちっくな話になると思います。(´Ծ_Ծ´)メガネノトキハマジメブッテル QTableView は GUIライブラリ Qt のクラスです。 それを Python で使うための PySide というライブラリを使っています。 某表計算ソフト っぽい表の GUI です。 このデータの日付が 09/01 なのでおそらくその日に   QTableView 使うぞ!(`・ω・´) とサンプルデータを作ったのでしょう。 Qt Designer という GUI エディタを使うとポトペタでウィンドウを設計できます。 選択できる GUI の中に QTableView と QTableWidget があります。 どちらも上のような表の GUI です。 QTableWidget は 簡単 に値をいれたりできます。 Qt Designer 上で直接編集 することができるので、 サンプルの表を簡単に作ることができます。 それに対して、 QTableView は Qt Designer 上では値を編集できません。たぶん。 QTableView の強みは MVC の構造 を使えることです。 名前のとおり QTableView は View です。 これにデータを管理している Model オブジェクトを設定して使います。 Model クラスを作る手間がかかりますが、 GUI の細かな操作をしなくても Model に応じた表を表示してくれます。 Model は QAbstractTableModel を 継承 して作ります。 コンストラクタで基底クラスの処理を呼び出し、いくつかの純粋仮想関数をオーバーライドします。 def __init__ ( self , parent= None , *args):

LibreOffice Writer 文書の差分 (WinMerge x TortoiseGit) + 社畜PCの原因と対策

お久しぶりです。皆様におかれましてはお風邪などをひかれてはいませんでしょうか。 春と秋だけあればいいのにヽ(`Д´)ノとつい思ってしまう SakuraCrowd です。 今日はいつものような製作日記ではなく、ちょっとした役立つメモを書きました。 タイトルにもあるとおり、 TortoiseGit への WinMerge の導入の仕方です。 今まではソースコードくらいしか差分で確認しなかったので、 TortoiseGit 標準の Diff ツールで問題なかったのですが、 LibreOffice の Writer が最近自分の中で便利だと話題になっていて、それを差分表示するためにちょっと調べてみました。 #Writer は、文章書いて、ちょっと絵をいれたり表を作るのに便利だと思います。 #リッチテキストのエディタを探していて、これが一番よさそうな気がしたので使ってます。 それとブログを書くときはあまり長く書かないつもりだった、 Win7 PC が社畜PCになってしまった際の原因と対策も後半に書きました。割と有用な情報かもしれませんので、時間がありましたらご覧下さい。 まずは TortoiseGit で Writer の odt ファイルを管理して、差分も普通に表示させる方法です。 WinMerge(+plugin) 導入手順 すでに TortoiseGit はインストールしてある前提ではなします。 1.信頼と実績の窓の杜様から WinMerge 日本語版をダウンロードします。 WinMerge - 窓の杜ライブラリ 私の PC は 64 ビット版なのでそちらを選びました。 2.WinMerge をインストールします。 フォルダを指定し普通にインストールできます。 インストール直前の設定で TortoiseGit をチェックしておくと自動的に TortoiseGit の利用する Diff ツールの設定を置き換えてくれるようです。 これの設定は TortoiseGit の設定の Diff ツールの項目で確認できます。 3.LibreOffice Writer のファイルを読むためのプラグインをダウンロードします。 ぐぐって出てくる英語版のDLサイトは応答がなかったりしましたが、日本語版は大

QWidget の選択時のデザインを CSS で変える方法

ひさびさに書きやすいネタができたので、1ヶ月ぶりくらいに書きます。 ここ1ヶ月の作業内容 タイトルのとおりなのですが、 テーマがいきなりマニアックでとまどったり、 デスチェリー農場の続編はどうしたんだよおおおお! とか新作を楽しみにしている生命が宇宙のどこかにいるかもしれないので あらかじめ書いておくと、 ここ1ヶ月は日記ソフトを作ろうと python + pyside + sqlite の勉強をしていました。 勉強というか、ウィンドウ起動から初めて、 GUI をせっせと作ったり、ファイル保存と復元を作ったりしてます。 Copy & Paste や Redo/Undo など未実装の処理も多くあります。 今回は、タブ遷移とかクリックで選択されたウィジェットの、 背景色が変わるとか、 枠線が出るとか そんな設定を CSS で実現します。 PySide と CSS について PySide は前も Raspberry Pi 2 で使う mount コマンドの GUI ツールで使いました。 Python の GUI フレームワークです。 さすがに HSP ほど簡単にウィンドウを出すことはできませんが、 かなり楽だし、 GUI の種類や機能もかなり充実しています。 ある程度 GUI を作っていて、 こんな露骨なウィンドウだと受けが悪いんじゃないかな と思いました。 なんか今っぽいおしゃれなデザインにしたい。 そんな誘惑にかられて調べていると、 CSS でお手軽にデザインを変更 できることがわかりました。 QWidget 派生のオブジェクトを作る際に、 setStyleSheet(str_css)で css を読み込ませることで簡単に実現できます。 次の例では file.css というファイルに書いた css を QWidget 派生クラスのオブジェクトに読み込ませます。 # css の読み込み with open("file.css","r") as f:     self.setStyleSheet("".join(f.readlines())) いろいろな G