今回TAを担当したsea314です。
6/22に部内で行われたハッカソンの参加記です。
はじめに
今回のテーマは「あい」「わ」だったので、ボスとして哀川翔が出てくるアイワナを作りました。
アイワナはとにかく理不尽でユーモアのある仕掛けでプレイヤーを殺しに来る2Dアクションゲームです。
アイワナシリーズについてはこちら
メンバー
- kamecha
- Tarara
- sea314 (TA)
- Madai
- shioyakioh
全員プログラミング担当で、グラフィック・サウンド担当が0という偏ったチームになりました。
5人のID名の先頭を持ってきて、チーム名は「かたせまし」にしました。
開発環境
全員が共通で使える言語でC++、macとwindowsが混在していたのでライブラリにOpenSiv3dを使うことになりました。
OpenSiv3dが結構くせ者で、macでもwindowsでも使える開発環境(VS Codeとか)に対応しておらず、windowsはVisual Studio、macはXcode指定でした。何が困るって、win側でソースファイル追加しても、mac側ではプロジェクトに使いされてないのでコンパイル失敗するんですよね。逆も同じです。
さらにmacとwinの改行コードの違いをVisual Studioが吸収できず、文字コードもSHIFT-JISだとgit関連が原因(?)で不具合が発生する場合があることがわかりました。これについては改行と文字コードを変換するプログラムを自作し、マージ時に自作プログラムでファイル形式を矯正することで対応することにしました。
事前準備
アイデア
TAである自分が出したアイデアを除いても、これだけのアイデアが出ていました。
- アイ ワ な(あいわな)
- わ + あい → わあい → ばんざい
- あい→ai→AIって事でAIっぽい何か? ロボット
- あい+わ→あいかわ→哀川→哀川翔 ということでVシネに出てきそうなお兄さんの家にピンポンダッシュして逃げるゲーム的な
- i → 複素平面 回転とか、輪
- I wanna be the Aikawa?
- 背景を和(わ)風に
全部アイワナに繋げられるというまとまりの良さ
開発時間が1日と短く、比較的初心者が多いチームだったので哀川とアイワナだけ採用しました。
担当決め
簡単なゲームを作ってきてもらい、そのコーディング力を見て担当を決めました。
- sea314
シーン遷移、マップ読み込み、マージ - Tarara
ゲームのメインシーン - shioyakioh
ボスシーン - Madai
オブジェクト定義、マップ作成 - kamecha
オブジェクト定義、マップ作成 - 手が空いた人
グラフィック、サウンド
実装方法決め
担当の割り当てが結構ギリギリだと感じたので、当たり判定やマップのファイル形式など決めておくことで無駄が省けそうなところは事前に決めました。特に継承されるクラスは、定義が決まってないと継承先を作れないので、かなり仕様を確定させました。
このおかげで、当日になって実装方法の違いによるコンフリクトは最小限ですみました。使っている型が違うとか、前提となっている関数がなかったとかもほとんど起こりませんでした。
ハッカソン当日
午前
朝は全員時間どおりに来ました。絶起されると空中分解する予感しかなかったのでひとまず安心。
ですが、SourceTreeがフリーズしたり、Xcodeプロジェクトがコンフリクトしたり(私はwindowsなので直せない)に時間を取られ、あまりコーディングできませんでした。gitの管理にはソースファイル以外入れないほうがいいかも?プロジェクトファイルを途中からgit管理から外して対処しました。
午後
怒涛の問題ラッシュが過ぎ去り、自分の担当をする時間ができたので、マップ読み込みを作りました。ダンジョンエディタを自作したことがあるので余裕です。実装が進んできたので、ちょいちょいマージ要求も来るようになりました。エラーでコンパイルが通らない状況なので、エラーのうちいくつかを直しながらmasterにマージすることを繰り返していました。このあたりからブランチ切るのが面倒くさくなって、masterで作業しています。
昼ごはん
あまりに忙しくてご飯を食べる暇がなかったので、3時くらいにshioyakiohと二人でマックに行きました。ほか3人は用意していたor食べるのを諦めたようです。忙しくてもご飯はちゃんと食べたほうがいいと思うぞ?
最後の追い込み
昼飯から戻るとマージが溜まっていたのでマージします。普通のコンフリクトはそんなに多くなかったのですが、コンパイルエラーが大量なので、コンフリクト解消の場面でエラー対処していました。プル→コンフリクト対処→エラー対処→コンフリクト対処済みプッシュをひたすら繰り返した結果、16時半についに初めてコンパイルが通りました!!
マージ後も同じブランチ使い続けてたのでツリーが汚い
デバッグもしていないし正常に動くわけがない
当たり判定がバグっていたため、ジャンプできなかったり移動できなかったり床抜けて落ちていったりしてました。ボスシーンもshioyakiohのブランチでは動作していましたが、マージ後は動かず。自分はアクションゲームの当たり判定なんて書いたことないので、どこを直せばいいか分からずshioyakioh、Tararaに任せることに。kamecha、Madaiはマップ調整とオブジェクト定義の修正をやってもらいました。自分も一か八か30分で当たり判定を作ろうと別ブランチを作って試しましたが上手くいきませんでした。その後もいそいろ試行錯誤しましたが、当たり判定とボスシーンのバグは発表までに直すことは出来ませんでした。
発表
仕方ないので、強制的にシーン遷移するコマンドを実装してマップだけ紹介し、ボスはマージ前のshioyakiohが書いたコードそのままで見せました。
テーマ説明やボスである程度の笑いがおきたものの、ゲームとしては全くプレイ不可なのでこうしたかったああしたかったという理想を述べるだけです。
結果
グラフィックもサウンドも満足に無い状態で、正直、メンバー全員結果にあまり期待していませんでした。
しかし、まさかのテーマ賞「わ」をいただけることになりました!
景品は巨大バームクーヘンです。一人1つずつもらいました。あまりに大きすぎて自分一人では食べれず家族で分けました。
「あい」「わ」を別々に無理やりこじつけたチームが多かった中、比較的自然に2つとも取り入れたテーマを考えたこと、それを実現しようと努力したことが評価してもらえたのだと思います。
Emoineスタンプ数についても「神」「すこ」「草」にて3位、2位、3位でした。
感想
開発環境統一を優先してVSCode使うとか別ライブラリ使うとかするべきでした。DXライブラリとOpenSiv3d以外だとTAにできるほど使ったこと無いから実質エディタ統一の一択ですが。
あとは開発時間がもっと欲しかった。去年2日なかったっけ?もう一日あればゲームになってそう。というより、時間足りなそうなのが事前にわかっていたのに何とかする術を考えなかった自分が一番悪いですね。
とは言いつつ、楽しかったのは間違いないので、またTAとして参加したいと思います。