WGGの活動log

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

月までボールを飛ばす「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が重いと感じてらっしゃる方がいましたら,是非参考にしてみてください

弾雨ヲ切リ裂ク STG「アカとブルー」が楽しい

ゲーム系の話題は久しぶりかな?
最近サークルだったり研究室だったり,ゲーム会社のエンジニアインターンに複数社参加したりである意味充実した夏休みを過ごしています.


今回は,「アカとブルー」というゲームを遊んでみたのでその感想です

アカブルー

最近Twitterを見ていると,フォローしているゲームエンジニアの方がこのゲームについて頻繁に呟いていらっしゃったので,気になっていました
STGは(主に東方Projectのおかげで)とても好きなタイプのゲームなので,PVを見て「これは間違いなく面白い」と思ったので即遊んでみました

PV

公式のPVです
youtu.be
twitter.com

ゲーム概要

割と昔からある感じの弾幕STGです
暑苦しいおっさんのアカと,クールな女の子のブルーのW主人公からどちらかを選んでプレイします
僕は当然可愛い女の子のブルーを広射弾を撃てるおっさんの方が使いやすかったのでアカばかり使ってました
大量の弾を避けて敵を倒していきます

プレイ画面

遊びながらスクショ取るの難しいのですが,何枚か撮ってみました
f:id:wgg00sh:20170824224926p:plain
f:id:wgg00sh:20170824224951p:plain

見ただけで伝わりそうなのですが,難しいです
ドットスナイパーで世界ランキング1位を獲った僕の動体視力()をもってしても避け切るのは困難でした

弾雨ヲ切ク裂ク

何回かプレイして,「あ~これ気合じゃ勝てないやつだな...」ってのを理解したので,クリアするために何をすればいいか考えてみました.
すると気づいたのが,ボムを撃つとボムが溜まる事でした.書いててよくわからなくなりますが,その通りです.敵を倒したりすると,エネルギーが溜まってボムが撃てるようになります.ボムを発動すると,周辺や前方の弾を消すことができ,消した弾の分で再びエネルギーが溜まります.なのでまたボムが撃てます.そして,Lv2以上のボムを使用すると,前方に飛ばし,軌道上の弾を纏めて消すことができ,まさにこのゲームのキャッチコピーの弾雨ヲ切リ裂クようになります.

↓公式PV内でボムを使っているシーン(静止画じゃ伝わりにくいかも,1:46付近)
f:id:wgg00sh:20170824233008p:plain

多分これは狙って組まれたゲームバランスだと思います.肉眼で避けるのが難しい量の弾幕が降り注ぐ中,ボムで弾幕を切り裂いて活路を開く.
「ボムゲー」とか言われてしまうかもしれないですが,ボムのエフェクトや,キャラクターのボイスと相まってとても爽快でプレイしてて楽しかったです.

ちょこっと攻略アドバイス的な

多分エンディングを見るのは結構難しい部類のゲームだと思うので,自分がプレイしててこんな感じにすればクリアしやすいと思った点を

  • ボムのLvが上がる前に撃つ
  • 弾雨を「切り裂く」ことを意識する
  • 諦めない
ボムのLvが上がる前に撃つ

ボムは,チャージ量によってLvが1-5まで存在しますが,最もおすすめするのはLv2です.
というのも,このゲームのボムは撃っても自機が無敵になるとかは無く,あくまで敵の弾を消す効果だけなんですよね.Lvが高いボムは,消せる弾の量は多いですが,その分次にボムが撃てるまでのクールタイムも長くなります.そのため,Lv5のボムを撃って弾を消したのに,すぐにやってきた次の弾幕を消す手段が無く被弾する,といったことが発生しやすかったです.

そこでボムのLvが上がりきらないうちにこまめに撃つことで,クールタイム中の被弾を減らすことができました.

弾雨を「切り裂く」ことを意識する

上述の通り,あくまでボムは弾を消すのがメインの効果なので,より多く前方の弾を消す(切リ裂ク)ことを重視すると生存率が上がりそうです.
横から攻撃してくるボスもいるので,そこは結構苦戦しました...

諦めない

どんなゲームでも一緒ですが,当然ですね.
ただこのゲームに関しては,当たり判定が見た目以上に小さいので,残機0ボム0の大ピンチになっても,諦めずに気合避けし続ければ立て直せることも結構多いです.

おわりに

スマホゲームの中でも,かなり良くできてる作品だと思いますので,この記事や,PVを見て面白そうと思ってくだされば,是非遊んでみてください!(\960)

(...こんなゲーム作れるように頑張ろっと)

ウィンドウを透過するショートカットキーを作成した

普段作業をしていると,「文章を書きながら動画も見たい」なんて思うことがありました.
かといってウィンドウを分割するとそれぞれの面積が小さくなり文章は書きづらくなります.

そこで,ウィンドウを半透明にできれば1つの領域に2つのウィンドウを置くことができます.

今回作ったもの

www.youtube.com

使ったアプリケーション

www.gigafree.net

TranspWnds

TranspWndsはウィンドウ拡張ツールです.
キー+マウスで以下のような機能を利用することができます.

  • タイトルバー以外をドラッグしてもウィンドウを移動できる
  • ウィンドウの端以外をドラッグしても拡大縮小できる
  • タイトルバーを非表示にする
  • ウィンドウを最前面に固定する
  • ウィンドウの透過率を指定する

今回は,透過率指定の機能を利用します.

TranspWnds単体使用の問題点

TransWndsだけを用いると,ウィンドウの透過はALT/CTRL/SHIFT/Win キー + マウスホイールの回転でしか実行できません
僕のようにマウスを使わないユーザーにとっては非常に使いづらいので,これをキーボードだけで実行できるようにするのが,AutoHotKeyです

AutoHotKey

AutoHotkeyはホットキーへの機能の割り当てなど常駐ソフトの作成に特化したスクリプトエンジン。多彩なコマンドが用意されており、GUIを持ったプログラムの作成も可能。
任意のキーの割り当て変更、マクロ、ウインドウ操作 ...
オープンソースの簡易プログラム言語、Windowsフリーソフト
(AutoHotkey Wiki)

つまりは,スクリプトを書いて実行するだけで,入力内容を変更する常駐ソフトを作成することができます!

スクリプト作成例

今回は,AutoHotKeyとTranspWndsを組み合わせて,「Win+Tでウィンドウを半透明に,Win+Shift+Tで半透明にしたウィンドウを元に戻す」ように実装してみます.
まず,TranspWndsのオプションで「Transparent」の項目をALTだけチェックを入れておきます
次に,適当なファイルを作成し,拡張子を.ahkにして以下を記述します.

;;; Win + T → Windowを半透明に
#t::
  Send,{Alt Down}
  Send,{WheelDown 30}
  Send,{Alt Up}
  return

;;; Win + Shift + T → Windowの半透明化を元に戻す
#+t::
  Send,{Alt Down}
  Send,{WheelUp 30}
  Send,{Alt Up}
  return 


これに対してRun Script を実行することで,Win+Tキーでアクティブウィンドウを半透明にすることができます.
透明度はTranspWndsで上限を設定しておいてください

ahkスクリプトの説明

#+t::

#:Windowsキー

  1. :Shiftキー

t:tキー
の3つを同時に押したときに処理を実行します

Send,{Alt Down}
Send,{WheelUp 30}
Send,{Alt Up}

Send,{Alt Down}で Altキーを押した状態に変更,
Send,{WheelUp 30}で マウスホイールを上に30ミリ秒間回転
Send,{Alt Up}でAltキーを離します

まとめ

こんな感じで,AutoHotKeyを使うと,Windows標準ではできないショートカットの作成など,色んな機能を追加できます.
スクリプトの規則もそこまで複雑ではないのでぜひ試してみてくださいね♪