WGGの活動log

都内でゲーム開発だったりVRだったりをしてるかもしれないエンジニアです. WGGは「ワグ」と読みます

Nintendo Switch買った


Switchとマリオオデッセイ買いました. それだけです


それだけじゃつまらないので

色々と雑談を書いていこうかと思います

Switchを買うまでの経緯

今までに遊んできたゲーム

僕自身,今までに遊んだCS機はGB(C)→N64GBA→DS→PS2 って順だったので,発売日的に見たらざっと13年振りぐらいの新作です
実際のところはDS,PS2をやってたのが7年ほど前なのでもうちょっと短いですが.まぁスマホアプリ(主にパズドラ)をやるようになってから長らくCSは触ってませんでした.

CS機を遊んでみたくなっていった

去年の7月に,所属してるサークルに自分が参加したハッカソンの優勝賞品としてOculus Rift CV1が届きました.
Oculusを使った開発はガッツリとはやらなかったのですが,そこで無料で遊べる作品を体験して,今の時代のCGとかを感じられました

そんで次が今年の3月頃
友人と株式会社 闇さんのオフィスに遊びに行くことになり,そこでバイオハザード7のVRを体験させてもらいました.
death.co.jp

www.youtube.com
2つともVRHMD関連ですが,どちらかと言うと自分にとっては「今の時代のフルCGゲーム」として今まで感じたことの無い体験が出来たわけです.


そして同じく今年の1月中旬~3月頭頃
TwitterでVR関係でフォローしている方から,「崩壊3rd」というスマホゲームが凄いと話を聞くようになりました.
実際にやってみるまで,スマホでこのレベルの3Dゲームなんて不可能だと思ってたのですが,このゲームは自分の期待を遥かに超えるクオリティでした.

↓自分で撮影したプレイ動画です(割りと難易度高めのステージなので何してるかよくわからないかも)


とまぁ,幾つかの体験を通して少しずつ,「よりハイクオリティなゲームを楽しみたい」って思うようになっていったわけです
スマホで崩壊3rdのレベルまでできるならCS(据置機)ならもっと凄いんだろうな~って思ってPS4やSwitchをやってみたくなりました.

何故オデッセイなのか

Twitterで時々新作ゲームのプレイ動画や感想が回ってくるんですが,特に印象強かったのがマリオオデッセイゼルダBotWでした.
スプラトゥーンも何回も見ましたが僕はあまり惹かれませんでした.やってみたら変わるのかもしれませんが.

なんでオデッセイやゼルダに惹かれたかというと,「大量のやりこみできる要素が用意されていたから」だと思います.スプラトゥーンPvPがメイン(多分?)なので,「ユーザー同士の戦い」ですが,オデッセイは「ユーザと開発者の戦い」って感じです.
後は,単純にゼルダシリーズはやったことがなくて,マリオはスーパーマリオ64とかからやってたので,オデッセイの方がやりたかったってのです.

オデッセイがやり込めると思った理由

Twitterで流れてきた動画で,「とても高い誰も登れないと思うような所に,色んなアクションを駆使したら実は登れたが,登られることを想定済みでそこにコインを配置していた」動画がありました.

(はじめに見たツイートが見つからなかったので,↓は同じことをしていた動画です)


この動画1本だけで,「開発者がどれだけゲームを作り込んでいるか」が伝わってくるんですよね.だから自分も「開発者が用意した全てを知り尽くしたい」って思ったのでこのゲームがやりたくなりました.

Twitterで「#SuperMarioOdyssey 想定」って検索すると,さっきの動画のように行けなさそうな所に行ったら想定されてた動画がいっぱい見つかります(ネタバレにもなるので注意)

終わりに

こんな雑談でしたが,数年ぶりにスマホゲー以外のゲームを触ることとなったので,存分に楽しんで,全てを遊び尽くしていこうと思ってます
あとSwitch品薄の問題は,Twitterで速報を呟いてるアカウントの通知を入れまくったら無事に最寄りの家電量販店で買えました

「Dune!」Ver2.0アップデートで追加されたボールの入手方法やコツとか

前回に引き続きDune!の記事です
wgg.hatenablog.jp

今回は11月9日に行われた大型(?)アップデートで追加された「スキン機能」のうち,解放条件が難しそうな項目をちょっと解説してみます

解説する項目

  • 0点獲得しよう
  • 51点獲得しよう
  • 触れてないよ!
  • 動かないの?
  • 逆走する?
  • 宇宙空間に到達しよう

このうち動画を撮影した項目は↓においておきます
また,手に入れたスキンで飛ぶとどんな演出がされるかは見せないので,是非自力で取得してその目で確かめてください!

youtu.be

0点獲得しよう

f:id:wgg00sh:20171114180245p:plain
名前の通りゲーム終了時の得点が0だと成功ですが,以外と難しいと思います.
コツは,白線を越えないようにタップして前方向の速度を高めるとやりやすいと思います.

51点獲得しよう

f:id:wgg00sh:20171114183142p:plain
これも同じようにゲーム終了時の得点が51点ちょうどだと成功です.
0点ミッションと違い,「普通に50点取って51点目で墜落して終了する」といったプレイができるので,0点よりも楽だと思います.

触れてないよ!

f:id:wgg00sh:20171114183357p:plain
これに関してはミッション名が説明不足だと思います.
この動画では,攻略条件は「画面に触れずに"SMOOTH"を発動する」と書かれていますが,もう少し緩いみたいで「"SMOOTH LANDING" 発動中に,ジャンプしてから一度も画面にタップせずに "SMOOTH"を決める」で大丈夫なようです.
はっきり言って運ゲーなので,とりあえずSMOOTH LANDINGからのジャンプで何もタップせずに,着地点がいい感じになるまで何度も挑戦するのが最善策だと思います

動かないの?

f:id:wgg00sh:20171114184427p:plain
ゲーム始めてから何も操作せず1分待つと手に入るらしいです(覚えてない

逆走する?

f:id:wgg00sh:20171114184532p:plain
↑でも紹介した動画では,ゲームオーバーになってそのまま左に行けば取れるように書かれていますが,どうも少し違っているようで,コメントにもそれでは出来ないとの発言が見つかりました.

自分で試行した結果,クリア条件は「山を右から左に越える」のようです.
初めの動画でも行っているように,隣接する2つの山で,右側の方が高い場所を選んで,山頂ギリギリまで移動すれば,上手く行くと左の山を超えられます.
f:id:wgg00sh:20171114184859p:plain

宇宙空間に到達しよう

f:id:wgg00sh:20171114185038p:plain
非常に難しいです.「とにかく高く飛ぶ」ことで達成できます.

連続してSMOOTHを決めて速度を上げるのはもちろんのこと,高さを求める場合は,ジャンプする山の種類も重要になってきます.
↓の画像のように,上りの傾斜角が急な山でジャンプすると上方向の力が大きくなるので高度を上げられます
f:id:wgg00sh:20171114185435p:plain
また,落下中にタップすると加速するので,落下地点を早い段階で見極めてそこに合わせて急降下するのも重要になります.

↓の画像ほど高く飛ぶ必要はありませんが,このように画面枠が見えてしまう高さまで飛ぶことも可能です.
f:id:wgg00sh:20171114185616p:plain

終わりに

なかなかテクニックだけでは解決できないミッションもあると思いますが,もしこれをみてクリアできましたら幸いです.

月までボールを飛ばす「Dune!」遊んだ感想とかコツとか

今回は,偶然広告で見かけて面白そうだったのでプレイしてみたらハマったアプリの話です
ちょっと攻略要素も入ってるのでネタバレ注意

Dune!

Dune!

Dune!

  • Voodoo
  • ゲーム
  • 無料

Voodoo というアプリ会社(多分?)が作られたゲームですが,Dune!だけでなく,他のアプリも最近頻繁に広告で見かけました.
↓ちょっと遊んでみたプレイ動画です(この動画を撮影した後に2.0アップデートでだいぶ内容が変わってしまいましたが,気にせず)
youtu.be

Voodooのアプリ

今回Dune!の感想を書くまでに,Voodooがリリースしたアプリを4つプレイしました

いずれも共通点があって

  1. 無音
  2. グラフィックがシンプル
  3. ゲームのコア部分がすぐに楽しめるように作り込まれている
  4. 広告が多い
無音 & グラフィックがシンプル

最近のアプリって結構派手な演出とかで豪華な感じのが多いと思ってるんですが,これは超シンプルになってます.
例えば,Snake VS Blockだとこんな感じで,単一色のボールと,数字が書かれたパネルぐらいしか無いです
f:id:wgg00sh:20171112191643p:plain

ゲームのコア部分がすぐに楽しめるように作り込まれている

ここが超重要なポイントで,無音かつグラフィックがシンプルでも,コア部分がしっかりしているおかげで楽しめるようになっています.
Dune!の作り込みについて後述するのでここでは割愛

広告が多い

Voodooのアプリは,「基本無料 + 課金で広告解除」 の形式が殆どです.
ゲームのプレイに関わる部分では課金要素は一切無いです(Dune!がアプデでスキンが購入できるようになりましたが)
そこら辺の事情があって,日本版は結構★1レビューが多かったです(汗

Dune! について

ここからが本題です
Dune! のルールを簡単に言うと,「坂道でボールを転がして,より高く飛ばす」です.

画面をタップしている間は,ボールが進行方向に力が加わり加速します.空中では下方向に力が加わり落下が速いなります.そこで上り坂の頂上で手を離すことで,その勢いのままジャンプすることが出来ます.地面に勢いよく衝突するとゲームオーバーになるので,地面の傾斜角に合わせて接地する必要があります.

加点要素

Dune!には5つの加点要素があり,それらをクリアして高得点を目指します

  1. 白線の上まで飛ぶ(1点)
  2. 月の上まで飛ぶ「TO THE MOON...」(1点)
  3. 土星(っぽい星)の上まで飛ぶ「...AND BEYOND!」(2点)
  4. 滑らかに着地する「SMOOTH LANDING」(そのジャンプの点数2倍)
  5. 2連続以上smoothlandingを決める「SMOOTH!」(そのジャンプの点数4倍)

SMOOTH!状態で,土星の上まで飛ぶと,(1+1+2)x4= 16点 が1回のジャンプで手に入れることが出来ます.
(補足1:Ver2.0で...AND BEYOND! のボーダーラインが下がって点を取りやすくなったみたいです)
(補足2:Ver2.0でスキンの解放条件に「宇宙空間に到達しよう」というのが追加され,土星よりも遥かに高く飛ぶことでボールの種類が増やせるようになりました,土星が画面の上から3分の2あたりの位置になるまでボールを高く飛ばす必要があるみたいです)

このゲームにハマったワケ

ここからは個人の感想です.
ルールも見た目も非常にシンプルなこのゲームですが,僕がハマってしまったのは,「面白く感じさせる工夫」がしっかりと用意されていたからだと思っています.ゲームを始める理由は色々あると思いますが(ex:好きな声優やキャラクターが出てる,友達に勧められた,etc...),ゲームにハマる理由は,基本的にゲームの中にあるはずです.

多くのゲームにとって,楽しいと感じるタイミングは,「困難な課題を乗り越えた先にある報酬を得た喜び」です.
そして,その課題と報酬はゲームを進めると変化し,課題はより高難易度に,報酬はより豪華になっていきます.
このゲームの場合,初めの課題と報酬は「白線の上まで飛ぶこと」と「手に入る1点」です.そこから最終的には「SMOOTH!から AND BEYOND!を決め続けること」と「手に入る16点と,そのために用意された派手な演出」になっていきます.はじめに上げた動画を見るとわかりますが,このゲームではSMOOTH!を決めた時だけボールからパーティクルが放たれ,とても綺麗に描写されます.これが「報酬」としての役割を果たしているため,SMOOTH!を決めるために練習したくなります.

また,得点を報酬と見立てた場合にも,別の「楽しませる」要素が絡んできます.
このゲームはいわゆる「ランゲーム」スタイルなので,自分が失敗しない限りいつまでもプレイできます.その為,高く飛ばず1点ずつ稼いでいくといった安全策が可能に見えるかもしれません.しかし,動画をよく見ると気づくかもしれませんが,白線の位置が時間が立つごとに少しずつ高くなっています.なので高得点を目指す場合も,基本的には「高く飛ぶ」ことが要求されます.そして,高く飛ぶと落下速度が大きくなるため,ゲームオーバーの危険が高まります.
このように,高得点を目指す場合は,「得点を稼ぐ際のリスク」が大きくなることを考える必要があります.

最後に,このゲームが最も優れていた点は「理不尽な敗北が無いこと」だと思います.例えば,Snake VS Block では,「自分が選んだ分かれ道の先が即死ゾーンで一発ゲームオーバーになった」といったことが起きました.これはおそらく自分のPS不足ではないはずです(分かれ道を選んだ時点ではその先は見えていなかったので).このように自分の努力に関係しない点で不利益を被ると,努力する意味が無いと感じさせられやる気が下がります.
ところがDune!では,僕がしばらくプレイした限りそのようなことは起こりませんでした.
高く飛べば飛ぶほどゲームオーバーになりやすくなりますが,それは自分のプレイに寄与するもので,さらに全ての地面がタイミングを掴めば安全に接地できるため自分のプレイヤースキルで全てが決まります.このようなゲームは,練習すればするほど上達すると,明らかに分かるので,「より上手くなる為に」遊び続けることが出来ました.

終わりに

僕はこのゲームを長期的に遊び続けることは無いと思います(内容が薄いので).しかし,短期間でもマってしまう印象的なゲームだったので今回記事に書いてみました.
もし時間があればVer2.0で追加された達成項目の攻略法の話とかも後日書いてみようと思います.

Visual Studio Code で DxLibの開発をする

最近Unityで複数のゲームを開発してVSCodeがちょっと好きになりました.

今までよく使っていたVisual Studio + DxLib の開発環境ですが,Visual Studio が非常に重いので,VSCode で完結できないか試してみました.

できたもの

こんな感じに,VSCodeからコンパイルして,動作確認するまでできました
デバッグに関してはまだ試していないですが...

手順

大体↓の順序です

  1. VSCodeのインストール
    1. C++用の拡張機能を追加する
  2. Visual Studio のインストール
  3. batファイル, makeファイルの記述
    1. (必要なら)文字コード問題の解消
  4. プログラムを書く
  5. VSCodeからコンパイルする

1:VSCodeのインストール

↓ からダウンロードできます.
code.visualstudio.com

C++用の拡張機能を追加する

ここVSCodeの仕様がいまいちわかっていなくて合ってるのかわからないのですが, "C/C++" ってのと,"C++ Intellisense"ってのを入れました.
f:id:wgg00sh:20170920225000p:plain

Visual Studio のインストール

やり方は複数あると思いますが,今回は既に入ってたVS2015 を利用します
この辺を参考にして,とりあえずVSでDxLibの開発ができるようにします.

batファイル, makeファイルの記述

VSCodeからコンパイルするためのbatファイルおよび,makefileを作成します.

dxlibmake.bat
call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\VsDevCmd.bat"
nmake -f dxlib.mak


VsDevCmd.batはVisualStudioに付属している開発者用のコマンドプロンプトです
自分の場合パスは上記の通りでしたが,バージョンやインストールの方法によって変わるかもしれません.

dxlib.mak

こちらを参考にしました

TARGETDIR=src
TARGETNAME=*

C_FLAGS=/c /TP /EHsc /D "_MBCS" /MT  /I "C:\DxLib" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /W3 /source-charset:utf-8

LINK_FLAGS=/SUBSYSTEM:WINDOWS /LIBPATH:"C:\DxLib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib"

ALL:
  cl $(C_FLAGS) $(TARGETDIR)/$(TARGETNAME).cpp
  link /out:dxlib.exe $(LINK_FLAGS) $(TARGETNAME).obj
  dxlib.exe

実行ディレクトリ内の,srcディレクトリ直下に置いた.cppファイル全てをコンパイル対象とします.
ファイルの構成次第で自由に変えるべきかと思います.

"C:\DxLib" には,ここでいう「プロジェクトに追加すべきファイル_VC用」パスを渡しています.日本語パスが心配だったのでDxLibとリネームしました.

(必要なら)文字コード問題の解消

DxLibでプログラムを書く場合,DxLib.hを含めて基本的に全てShift-JISで書かれるのですが,UTF-8の方が良い場合には,4行目の /source-charset:utf-8 を記述する必要があります.
これをつけずにUTF-8ソースコードを書くと,コメントなどに日本語が含まれている場合に正常にコンパイルできない可能性があります.
また,UTF-8で指定する場合は,DxLibのヘッダファイル5つを全てUTF-8に直しておかないと,同様に大量の警告が表示されます.

プログラムを書く

とりあえずDxLibのHPに載っているサンプルコードを,見やすいように少しだけ書き換えたものを使います.

#include "./DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
	ChangeWindowMode(TRUE);

	if( DxLib_Init() == -1 )
	{
		return -1 ;	
	}
	
	// DrawPixel( 320 , 240 , GetColor( 255,255,255 ) ) ;	// 見辛い
	DrawCircle(320,240,0xffffff,TRUE);

	WaitKey() ;	

	DxLib_End() ;

	return 0 ;
}

VSCodeからコンパイルする

VSCodeから,プロジェクトとするフォルダを開きます.
Ctrl+Shift+Bでタスクを実行できるのですが,プロジェクト内の.vscodeディレクトリにタスクが登録されていないので,「タスクランナーの構成」→「Others」の順にクリックします
task.jsonが作成されるので,commandの内容を,先ほど作成したdxlibmake.batに変更します

{
  // See https://go.microsoft.com/fwlink/?LinkId=733558
  // for the documentation about the tasks.json format
  "version": "0.1.0",
  "command": "dxlibmakebat",
  "isShellCommand": true,
  "args": ["Hello World"],
  "showOutput": "always"
}

これでプロジェクトフォルダ内のdxlibmake.batが実行され,makefileが処理されます.
f:id:wgg00sh:20170920234617p:plain

あとは設定が正しければ正常にコンパイルされ,DxLibのウィンドウが開きます

完成

というわけで,VSCodeからDxLibのコンパイルをしてみました.
もしDxLibを使っていて,Visual Studioが重いと感じてらっしゃる方がいましたら,是非参考にしてみてください