サンズ風バトルゲーム #1

サンズ風バトルゲーム #1
ok-scratch

スクラッチに挑戦している皆さん、どうも!スクラッチコーチです。

Undertaleのサンズ戦をオマージュしたアクションバトルをスクラッチで全実装。骨弾幕・ガスターブラスター・コマンドメニュー・物理演算・ペンフォントを全部作る本格上級チュートリアル。

さぁ、スクラッチでナニ作る!?

動画で見てみよう

ok-scratch ok-scratch
チャンネル登録して応援よろしく!チャンネル登録する

チュートリアルの元になった作品

サンズボス戦

サンズボス戦

by FunnyAnimatorJimTV
プレイしておこう プレイしておこう
今回のスクラッチを作る参考作品にさせていただきました、ありがとう!★攻撃番号ひとつに28の攻撃シーンを全部ぶち込んで、デクリメントしながら順番に捌くって発想がキレッキレ。変数1つで状態機械を回す設計がシンプルなのに、骨弾幕・ブラスター・重力物理・ペンフォントまで全部この仕組みで繋がってるのがヤバすぎる。このバトルシステムの組み立て方、見ていこう。

今回の目標

ステージ初期化とバトルボックス、赤モードの4方向移動、重力つきの青モード移動、FIGHT/ACT/ITEM/MERCYのコマンドメニューまでを実装する

スターター作品をリミックスしよう

このチュートリアルにはスターター作品があります。使わなくても大丈夫だけど、最低限の素材などが用意されてるので便利です。
スターター作品をダウンロード

このチュートリアルでは作者さんの実装方法を尊重して作ってますが、最低限の改善をしてます。(参考作品と同じものが完成するわけではない点はご注意)

#1ステージ: ゲーム開始の準備

まずステージを開いて全てのスプライトで使う変数とメッセージをいくつか用意する

準備

スプライト「stage」を開く

ステージ
スプライトについて
Undertaleのサンズバトルを再現したゲームのステージ。BGM・HPなどの全体変数の初期化と音楽制御を担当する

変数「★HP」を追加

プレイヤーのHP(初期値100、骨やブラスターに当たると減少)

変数「★HP」を追加

実装

step-0

最初にヒットポイントを画面に出るようにしとく

確認プレビューしておこう 確認プレビューしておこう
頭と体と足がそろって画面に出てきたね、こっから作り込んでいこうか

#2ステージ: 全スプライトの一斉始動

変数4つ、メッセージ2つを用意する

準備

変数「■サンズのサイズ」を追加

サンズスプライトのサイズ(旗クリック時に80に設定し以降変更しない定数)

変数「■サンズのサイズ」を追加

変数「★サンズのX座標」を追加

サンズの基準X座標(テレポートや位置リセット時に参照する)

変数「★サンズのX座標」を追加

変数「★サンズのY座標」を追加

サンズの基準Y座標(テレポート後の位置を決める)

変数「★サンズのY座標」を追加

変数「■ダンス速度」を追加

サンズのダンスアニメーションの移動速度(旗クリック時に0.4に設定し以降変更しない定数)

変数「■ダンス速度」を追加

メッセージ「スタート」を追加

メッセージ「スタート」を追加

メッセージ「ハート操作開始」を追加

メッセージ「ハート操作開始」を追加

実装

step-1

サンズのサイズと立ち位置に関係する変数を初期化して、ゲームスタートのメッセージを送る

確認プレビューしておこう 確認プレビューしておこう
たたかうボタンが表示された。こんな感じで残りのボタンも作っていく

#3サンズの頭: イントロの初期化

まずサンズの頭から作っていくよ。

準備

スプライト「サンズの頭」を開く

サンズの頭サンズの頭
スプライトについて
サンズの頭部スプライト。表情コスチュームを切り替えながらセリフをタイプライター風に表示し、攻撃開始の合図を出す
どんな役割か
サンズが喋るよ!表情を変えながらセリフを1文字ずつ表示する仕組みと、攻撃の引き金を引く仕組みを一緒に作ろう。

実装

step-2

「スタート」を受けたら表示していく

ok-scratch ok-scratch

サイズを変数で持っとくと、あとでちょっと移動したり揺れたりする処理がめちゃくちゃ楽になる。

確認プレビューしておこう 確認プレビューしておこう
選択中のたたかうボタンが光るようになった。カーソルが合うと黄色くハイライト、外れると元に戻る。隣にこうどうボタンも追加された

#4サンズの頭: 頭を定位置へ

step-3

定位置にセットして、一瞬だけ待機。

確認プレビューしておこう 確認プレビューしておこう
こうどうボタンも選択でハイライトするようになった。振動や再表示の処理もそろって、ボタンとして一通り動く。3つ目のアイテムボタンも登場

#5サンズの胴体: 胴体スプライトの登場

サンズの頭を画面に出せたから、ここからは胴体スプライトに切り替えるよ。

準備

スプライト「サンズの胴体」を開く

サンズの胴体サンズの胴体
スプライトについて
サンズの胴体スプライト。ポーズ切り替え・ダンスアニメーション・左右へのよけ動作を担当する
どんな役割か
サンズの体を動かそう!腕組みや上向きなどのポーズを切り替えて、ダンスやよけ動作もつけるよ。

実装

step-4

胴体側も同じ「スタート」を受けて、色々調整する。

ok-scratch ok-scratch

頭と体が別々に動いても、同じサイズ・同じ基準位置の変数を使うから、頭と体が連携できる仕掛け。

確認プレビューしておこう 確認プレビューしておこう
OK,これでメニューのボタンが全部そろった。かなり整ってきた感じがしてきた

#6サンズの脚: 脚の初期化

準備

スプライト「サンズの脚」を開く

サンズの脚サンズの脚
スプライトについて
サンズの脚部スプライト。頭・胴体と連動してシェイクや位置合わせを行う
どんな役割か
サンズの足元を作ろう!頭や胴体と一緒に揺れたり位置を合わせたりする脚のスプライトだよ。

実装

step-5

サンズの脚も、同じ感じで整える

確認プレビューしておこう 確認プレビューしておこう
1文字ずつ表示するタイプライター式のセリフ機能が完成。サンズが、きょうはステキな日だ、から有名な煽りのセリフまでしゃべり出す

#7FIGHTボタン: たたかうボタン

ここからは選択肢のボタン本体を作っていくよ。トップバッターは「たたかう」ボタン。

準備

スプライト「FIGHTボタン」を開く

FIGHTボタンFIGHTボタン
スプライトについて
バトルメニューの「たたかう」ボタンスプライト。カーソル選択状態に応じてコスチュームを切り替える
どんな役割か
「たたかう」ボタンを作ろう!カーソルが当たると選択状態になってハイライトされる仕組みを実装するよ。

実装

step-6

「スタート」を受けたらコスチュームとサイズをセットする。

確認プレビューしておこう 確認プレビューしておこう
青ハートの「バッドタイム」本番ができた。ハートが落とされて青モードに切り替わり、箱もターゲット型や拡大形に変形。bad timeになるぞ、の文字も出る

#8ACTボタン: こうどうボタン

準備

スプライト「ACTボタン」を開く

ACTボタンACTボタン
スプライトについて
バトルメニューの「こうどう」ボタンスプライト。カーソル選択状態に応じてコスチュームを切り替える
どんな役割か
「こうどう」ボタンを作ろう!カーソルが当たると選択状態になる仕組みを実装するよ。

実装

step-7

隣の「こうどう」ボタンも中身はほぼ同じ。

確認プレビューしておこう 確認プレビューしておこう
緑の旗を押してテストする。テレポートが成功しているかチェックしよう。シュンって一瞬で移動する様子が見て取れるね。

#9アイテムボタン: アイテムボタンを出す

準備

スプライト「アイテムボタン」を開く

アイテムボタンアイテムボタン
スプライトについて
バトルメニューの「アイテム」ボタンスプライト。カーソル選択状態に応じてコスチュームを切り替える
どんな役割か
「アイテム」ボタンを作ろう!カーソルが当たると選択状態になる仕組みを実装するよ。

実装

step-8

3つ目の「アイテム」ボタン

確認プレビューしておこう 確認プレビューしておこう
BGMが鳴り出して、サンズの頭・体・脚が座標を共有して「ダンス」や振動で1体みたいに連動する。ペン文字であの煽り文も描かれて、戦う箱の準備も整った

#10みのがすボタン: みのがすボタンを出す

準備

スプライト「みのがすボタン」を開く

みのがすボタンみのがすボタン
スプライトについて
バトルメニューの「みのがす」ボタンスプライト。カーソル選択状態に応じてコスチュームを切り替える
どんな役割か
「みのがす」ボタンを作ろう!カーソルが当たると選択状態になる仕組みを実装するよ。

実装

step-9

ラストは4つ目の「みのがす」ボタン

確認プレビューしておこう 確認プレビューしておこう
バトルボックスも連携できた。だんだん素材が整ってきて、アンダーテールっぽさが出てきたね。

#11サンズの頭: セリフ表示ブロックを作る

セリフ用のブロックを作り引数にテキストと速度を持たせる。

準備

スプライト「サンズの頭」を開く

サンズの頭
サンズの頭

カスタム定義「セリフを表示する」を追加

テキストをタイプライター風に1文字ずつ表示し、Zキーで送る

カスタム定義「セリフを表示する」を追加

変数「表示中テキスト」を追加

タイプライター表示で現在画面に出ている文字列

変数「表示中テキスト」を追加

変数「残り文字数」を追加

タイプライター表示の残り文字数カウンタ

変数「残り文字数」を追加

実装

step-10

まず「表示中の文字」を空っぽにして、「残り文字数」に文章の長さをセット。

ok-scratch ok-scratch

この数を1ずつ減らしながら文字を足していく作戦。

確認プレビューしておこう 確認プレビューしておこう
バトルボックスが攻撃の合図で形を変えるようになった。正方形から長方形へ切り替わったり、ガクッと揺れたり。ハートの初期化もここから「スタート」

#12サンズの頭: 1文字ずつ足すループ

step-11

ここが心臓部。「残り文字数」がマイナス1になるまでくり返して、「表示中の文字」のうしろに次の1文字をくっつける。

確認プレビューしておこう 確認プレビューしておこう
S攻撃ブラスターの配置と発射まで完成して、ガスターブラスターがひと通りそろった。ここからハートの「バッドタイム」突入演出、青ハートの落下に入っていく

#13サンズの頭: 画面に出して残りを減らす

step-12

1文字つなげたら「残り文字数」を1つ減らして、いまの「表示中の文字」を吹き出しに出す。

確認プレビューしておこう 確認プレビューしておこう
サンズのイントロらしい動きが少しずつ出来てきた

#14サンズの頭: タイプ音を鳴らす

step-13

文字を出すたび、いまの文字が空白じゃないときだけ音を鳴らす。空白は飛ばす。

ok-scratch ok-scratch

引数でセリフごとにテンポを変えられるのは細かいね。

確認プレビューしておこう 確認プレビューしておこう
緑の旗を押してテストする。画面シェイクをピタリと止めるリズム感ができた

#15サンズの頭: 全文スキップの親切設計

step-14

1文字ずつが待てない人のために、Xキーが押されたら文章をいっきに全部表示。あとはZが押されるのを待って、この表示処理を打ち切る。

ok-scratch ok-scratch

このセリフを1文字ずつ出すやり方は「タイプライター表示」って呼ばれてて、RPGやノベルゲームの定番テク。

確認プレビューしておこう 確認プレビューしておこう
シェイクがアクセントになって攻撃への転換点を演出できてる!

#16サンズの頭: 送り待ちの調整

step-15

Xキーが離されるのを待つ。

ok-scratch ok-scratch

こうしないとキーを押しっぱなしで全部スキップされちゃう。一拍おくことで、誤操作で読み飛ばすのを防いでるってわけ。

確認プレビューしておこう 確認プレビューしておこう
緑の旗を押してテストする。これで画面全体のシェイクもリズムよくおさまったね

#17サンズの頭: あの第一声

step-16

いま作った「セリフを表示する」を呼び出して、おなじみの第一声を流す。「きょうは ステキな日だ。」から3つのセリフを畳みかける。

……アンダーテールは本当にセリフも良いよね!

確認プレビューしておこう 確認プレビューしておこう
テストする。床に埋もれないように魂が枠内に収まってるね

#18サンズの頭: 口を開いて決めゼリフ

step-17

ここがイントロの決め台詞。ガっと刮目して「地獄で 燃えてしまえばいい」と言い放つ。

ok-scratch ok-scratch

おだやかな話から急にこの一言。この温度差こそ、この作品いちばんの見せ場。

確認プレビューしておこう 確認プレビューしておこう
ハートの動きをチェックして壊れてなければOK、続けよう

#19サンズの頭: 最初の攻撃へ

準備

メッセージ「最初の攻撃」を追加

ゲーム開始直後のイントロ攻撃の開始を通知する

メッセージ「最初の攻撃」を追加

実装

step-18

セリフが終わったら、「最初の攻撃」の合図を送っていよいよ戦闘へ。

ok-scratch ok-scratch

イントロから戦いへ、物語が動き出す瞬間。ここから先は細やかなアニメーションとガスブラ波状攻撃で容赦なくプレイヤーを追い詰めていく

#20テレポートエフェクト: テレポート係の初期化

次はサンズが瞬間移動するときのエフェクトを作っていく

準備

スプライト「テレポートエフェクト」を開く

テレポートエフェクトテレポートエフェクト
スプライトについて
サンズのテレポート演出を制御するスプライト。BGM音量の切り替えとランダム攻撃の制御も担当する
どんな役割か
サンズが瞬間移動するエフェクトを作ろう!テレポートの演出とランダムで攻撃パターンを変える仕組みを作るよ。

実装

step-19

「テレポートエフェクト」スプライトは、旗が押されたら画面の真ん中へ行って、いったん隠しておく。

ok-scratch ok-scratch

普段は見えない裏方だけど、テレポートの瞬間だけ仕事をする係。

確認プレビューしておこう 確認プレビューしておこう
長らく組んできたハートの一連の処理をチェック。重力による処理も大丈夫そうかな?赤と青の動きがおかしかったら、このタイミングで見直しておこう。

#21テレポートエフェクト: テレポート開始

step-20

「最初の攻撃」を受け取ったら、シュンッていう、あの瞬間移動の音を鳴らす。

確認プレビューしておこう 確認プレビューしておこう
ハートの「再登場」と赤モード復帰の処理がそろって、ハート操作がひと段落。ここからイントロの骨スプライトの仕込みに入って、「HP」の初期値もセットされる

#22テレポートエフェクト: 位置を送って瞬間移動

準備

メッセージ「テレポートZ」を追加

サンズのテレポートエフェクト開始を通知する

メッセージ「テレポートZ」を追加

実装

step-21

音でテレポートの前後を挟むと、瞬間移動っぽさが出る。

確認プレビューしておこう 確認プレビューしておこう
緑の旗を押してテストする。骨が迫りくる有名な一撃だね!攻撃が見えるようになると一気に進んだ気がするよね

#23サンズの頭: テレポートの目光り

準備

スプライト「サンズの頭」を開く

サンズの頭
サンズの頭

実装

step-22

「テレポートZ」が来たら高さを「サンズのY座標」に合わせて、3回「黄色目」と「青目」を切り替えて目を点滅させる。

ok-scratch ok-scratch

テレポートの不気味な感じがでるっしょ

確認プレビューしておこう 確認プレビューしておこう
サンズの頭が箱の変形に合わせて下がって「ダンス」を始めたり、テレポートで目を黄色と青に点滅させたり。攻撃フェーズに合わせた小さな動きも追加された

#24サンズの胴体: テレポート演出

準備

スプライト「サンズの胴体」を開く

サンズの胴体
サンズの胴体

実装

step-23

ブラスターが出るときの効果音も鳴らす。

#25サンズの胴体: コスチューム逆送り

step-24

コスチュームを番号で指定すると、こういう「1つ前に戻す」処理がスッと書けるやつ。

確認プレビューしておこう 確認プレビューしておこう
この骨とサンズの動きが連携した感じが出せればプレイヤーは一気にゲームに引き込まれていくぞ!

#26サンズの脚: 脚のテレポート

準備

スプライト「サンズの脚」を開く

サンズの脚
サンズの脚

実装

step-25

瞬間移動だから、滑らかに動かさず一発で位置を変えるのがポイント。

確認プレビューしておこう 確認プレビューしておこう
イントロの骨演出が完成。警告音のあと骨が突き刺さって、明るさを点滅させながら画面を横切る導入シーン。イントロのブラスターの準備も始まった

#27バトルボックス: バトルボックスの準備

ステージの裏方が整ったから、ここからはプレイヤーが動き回る舞台「バトルボックス」を作っていくよ。

準備

スプライト「バトルボックス」を開く

バトルボックスバトルボックス
スプライトについて
プレイヤーが動き回る戦闘用の白枠ボックス。攻撃に合わせてコスチュームを切り替えてサイズ・形状を変える
どんな役割か
戦いの舞台になる四角いボックスを作ろう!攻撃によってボックスの形や大きさが変わるよ。

実装

step-26

旗が押されたらいったん姿を隠して、最前面に出してから100層ぶん奥に下げてレイヤーを整える。

ok-scratch ok-scratch

毎回「スタート」位置を同じレイヤーに固定するため。重なり順がブレると、ボックスがハートや骨に隠れて見えなくなる。最初に基準を作っとく感じ。

#28バトルボックス: テレポート後の正方形

step-27

テレポートのたびに位置と形をリセットして、毎回まっさらな状態から始められるようにしてる。

確認プレビューしておこう 確認プレビューしておこう
いったん確認してみる。ok、ブラスターの動きも良さそう。場所は今は気にしなくてOK

#29ハート(魂): ハートの初期設定

ボックスの舞台ができたから、次は主役、プレイヤーが操作する「ハート」いわゆる魂を作っていくよ。

準備

スプライト「ハート(魂)」を開く

ハート(魂)ハート(魂)
スプライトについて
プレイヤーが操作するハート型の魂スプライト。赤モード(4方向移動)と青モード(重力あり)の2種類の操作方式を持つ
どんな役割か
プレイヤーが操作するハートを作ろう!矢印キーで動かして骨やブラスターを避けよう。赤と青で動きが変わるのがポイントだよ。

変数「★ハートモード」を追加

ハートの操作モード(r=赤モード、b=青モード)

変数「★ハートモード」を追加

変数「Y方向速度」を追加

ハートの縦方向の移動速度(青モードで重力の影響を受ける)

変数「Y方向速度」を追加

実装

step-28

旗が押されたら大きさを82にして、「ハートモード」を0、「Y方向速度」も0にリセット。

ok-scratch ok-scratch

リセットを忘れると前回の速度が残ったまま「スタート」して、いきなりハートがすっ飛んでいくバグになりがち。最初に0で揃えとくお約束。

確認プレビューしておこう 確認プレビューしておこう
これでいい感じに動くはず。ブラスターのアニメーションも、うん、いい感じ。

#30ハート(魂): 赤ハートで待機

準備

変数「X方向速度」を追加

ハートの横方向の移動速度

変数「X方向速度」を追加

実装

step-29

「X方向速度」も0にしてコスチュームを「赤」にセット。最前面に出してから「隠す」で隠す。

#31ハート(魂): テレポートでハート登場

準備

変数「被弾判定有効」を追加

ハートの被弾判定が有効かどうか(1=有効、0=無効)

変数「被弾判定有効」を追加

実装

step-30

「テレポートZ」を受けたら「被弾判定有効」を1にして当たり判定をオン、最前面に出して表示する。

確認プレビューしておこう 確認プレビューしておこう
足場のT攻撃とW攻撃も入って、足場スプライトの担当ぶんが完成。続いてイントロのブラスターが、水平・斜め・特大を順に撃つ一斉射撃の演出に入る

#32ハート(魂): 下へスッと滑り込む

step-31

短い時間で動かすと、テレポートで叩き落とされたみたいな勢いが出る。

確認プレビューしておこう 確認プレビューしておこう
緑の旗を押してテスト。よし、イントロブラスターも整ってきた

#33ハート(魂): 着地のシェイク

準備

メッセージ「シェイク」を追加

サンズとボックスをシェイクさせ被弾演出を行うよう通知する

メッセージ「シェイク」を追加

実装

step-32

落下より少しゆっくり戻すことで、ドンッと落ちて反動でちょっと跳ねる、みたいな手触りになる。

#34サンズの頭: 画面を揺らす

次は画面を揺らすぞ!

準備

スプライト「サンズの頭」を開く

サンズの頭
サンズの頭

変数「揺れの強さ」を追加

シェイクアニメーションの振れ幅(12から0に減衰)

変数「揺れの強さ」を追加

実装

step-33

「揺れの強さ」を少しずつ減らすから、だんだん収まっていく感じ。

なんか複雑な演算に見えるけど乱数を使っているだけの単純な計算だから安心してほしい。ちょっとズームが小さいから一時停止して確認してみて

確認プレビューしておこう 確認プレビューしておこう
第二波もできたね。横ブラスターからの斜めブラスター。初見ではなかなかかわせないやつね。ok, 第三、第四の攻撃もやっていこう。

#35サンズの頭: 揺れを止める

step-34

揺らし終わったら定位置に戻して、このスプライトの他の動きを止めて、「空白」コスチュームで無表情にする。

確認プレビューしておこう 確認プレビューしておこう
緑の旗を押してチェック。おおおおいいねいいね!サンズの最初の攻撃コンボができたね!熱い戦いの幕開けって感じ!

#36サンズの胴体: 被弾でシェイク

準備

スプライト「サンズの胴体」を開く

サンズの胴体
サンズの胴体

実装

step-35

胴体も同じように演算を組んで、ブルブルって揺れるようにする

確認プレビューしておこう 確認プレビューしておこう
おとなしくやられると思ったか、っていう煽りのセリフが入った。最後の、じゃ いくぞ、で戦闘開始の合図が出て、いよいよバトルが動き出す

#37サンズの胴体: シェイク後の戻し

step-36

震えが終わったら定位置に戻してからコスチュームをパッと切り替える。

確認プレビューしておこう 確認プレビューしておこう
本当はあの名曲「メガロヴァニア」でかっこよく決めたいんだけど、動画だから控えておいた。気になる人はリミックス元には音源があるからチェックしてみて。

#38サンズの脚: 脚もシェイク

準備

スプライト「サンズの脚」を開く

サンズの脚
サンズの脚

実装

step-37

次は足も同じくやる。同じ「シェイク」の合図で一緒に震えるから、サンズ全体が1体として揺れて見える。バラバラのスプライトを連動するのにメッセージは役立つ

#39バトルボックス: 画面を揺らすシェイク

準備

スプライト「バトルボックス」を開く

バトルボックス
バトルボックス

メッセージ「ヒット判定」を追加

ハートの被弾判定ループの開始を通知する

メッセージ「ヒット判定」を追加

実装

step-38

バトルボックスも揺れる。ヒット判定メッセージもこのタイミングで用意しておく。

#40FIGHTボタン: ボタンを揺らす

準備

スプライト「FIGHTボタン」を開く

FIGHTボタン
FIGHTボタン

実装

step-39

ボタンにも「シェイク」をつける。

#41FIGHTボタン: 定位置に戻す

step-40

揺れの演出と定位置キープ、セットで1つの仕組み。

#42ACTボタン: 攻撃でボタンを揺らす

準備

スプライト「ACTボタン」を開く

ACTボタン
ACTボタン

実装

step-41

行動ボタンも同じようにする。

#43ACTボタン: 揺れを元の位置へ

step-42

揺れが終わったら、きっちり元の位置に戻す。

#44アイテムボタン: アイテムも揺らす

準備

スプライト「アイテムボタン」を開く

アイテムボタン
アイテムボタン

実装

step-43

アイテムボタンも同じ!

#45アイテムボタン: 元の位置に戻す

step-44

定位置に戻すのも忘れずに。

#46みのがすボタン: みのがすを揺らす

準備

スプライト「みのがすボタン」を開く

みのがすボタン
みのがすボタン

実装

step-45

OK、見逃すボタンでラストだ

#47みのがすボタン: 定位置へ戻す

step-46

はい、定位置に戻して完了!チェックしてみようか

#48ハート(魂): 青モードに切り替え

準備

スプライト「ハート(魂)」を開く

ハート(魂)
ハート(魂)

実装

step-47

ここでハートを「青モード」に切り替える。「ハートモード」にbをセットする。処理はこのあと作り込んでいく。

ok-scratch ok-scratch

赤モードは上下左右に自由移動、青モードは重力とジャンプ。同じハートなのに変数の中身ひとつで別ゲームみたいに操作感が変わるのが、この作品の面白いところ。

#49ハート(魂): 赤モードの移動を部品にする(左)

準備

カスタム定義「赤モードの移動」を追加

赤モード時のハート移動処理(上下左右4方向・壁判定)

カスタム定義「赤モードの移動」を追加

実装

step-48

ここからはハートの動き方を部品にしていく。まずは「赤モードの移動」を自作ブロックにまとめる。中身は4方向移動で、左向き矢印で左へ−5動かして、壁の色に触れてたら同じぶん戻す。

ok-scratch ok-scratch

キャラを動かすとき、ただ座標をずらすだけだと壁をすり抜けちゃうよね。

だからこの作品は「動かす、壁にめり込んでたら押し戻す」の2段構えにしてる。この考え方をゲームの世界では衝突解決って呼ぶ。

マリオもゼルダも、根っこはこういう地道なチェックの積み重ねで動いてるんだよ。

#50ハート(魂): 右も同じ作り

step-49

左ができたら右も。

ok-scratch ok-scratch

右も動かした後はさっきと同じことをしていく。

#51ハート(魂): 左右の壁ぎわ補正(仕上げ)

step-50

はい、灰色の壁に触れてたら逆向きに少し戻して、めり込みを直す。シンプルな衝突解決の完成!

#52ハート(魂): 上キーで上に動く

step-51

上下も整えよう。動かす、ぶつかったら戻す、っていう左右と同じ理屈。

#53ハート(魂): 下キーで下に動く

step-52

今度は下向きも衝突解決をしておく。

#54ハート(魂): 床へのめり込み補正

step-53

これで「赤モードの移動」が完成。

#55ハート(魂): 青モードの横移動

準備

カスタム定義「青モードの移動」を追加

青モード時のハート移動処理(重力・壁スライド・横移動)

カスタム定義「青モードの移動」を追加

実装

step-54

次は「青モードの移動」を自作ブロックで組む。まずは横移動。左向き矢印で「X方向速度」をマイナス5、右向き矢印でプラス5、どっちも押してなければ0にする。

ok-scratch ok-scratch

ここ、この作品のうまい設計。普通は矢印キーで座標を直接ずらすけど、いったん「X方向速度」って数字をはさんでる。

速度を経由させないと、壁にぶつかったとき跳ね返す処理がうまく書けないんだよね。

#56ハート(魂): 横に動いて、壁なら1だけ持ち上げる

step-55

横移動を画面に反映。「X方向速度」のぶんだけ動かして、動いた先が壁の色に触れてたら1だけ上にずらす。

ok-scratch ok-scratch

これもさっきやった「衝突解決」だ。重力や壁があるゲームだとだいたい衝突解決が必要だから、きっとこのテクは今後も役に立つぞ

#57ハート(魂): もう1段持ち上げる

step-56

こうして1段ずつ入れ子で重ねていくのが、段差登りの基本パターン。少しずつ持ち上げて、登れる高さを稼いでいく。

#58ハート(魂): さらに上の段差もチェック

step-57

さらにもう1段

#59ハート(魂): 持ち上げを何段も重ねる

step-58

この「上げる、確かめる」のペアを、積み木みたいに積んでいく。

#60ハート(魂): まだ続く段差を判定

step-59

1ずつ刻むから、なめらかに登っていける。

#61ハート(魂): 入れ子の深さ=登れる高さ

step-60

深くするほど高い段差もいけるけど、そのぶんコードは長くなる。どこまで登れれば十分か、で深さを決める感じ。

#62ハート(魂): 登れない壁ならキャンセル

step-61

登れる段差と、越えられない壁を、ここで区別してる。

#63ハート(魂): 来た方向へ押し返す

step-62

登れる段差はスルッと登り、登れない壁はしっかり止める。1つの仕組みで段差と壁を両方さばくうまさ。

#64ハート(魂): 横を止めて縦の番へ

step-63

青モード移動の仕上げ。いったん横の動きを止めて、ここから縦の落下とジャンプの処理にバトンタッチ。

#65ハート(魂): 縦に動かして床で受け止める

step-64

「Y方向速度」のぶんだけ縦に動かして、床の色に触れたら速度を反転させて押し戻し、「Y方向速度」を0にする。

ok-scratch ok-scratch

重力で落ちてくるハートを、床でちゃんと受け止める部分。落ちる、ぶつかったら止める、のセットで地面に立てる。

#66ハート(魂): 移動を回すループを用意

step-65

作った「赤モードの移動」を実際に回すループから。「ハート操作開始」を受けたら「ずっと」でぐるぐる回し続ける。

#67ハート(魂): モードを見て部品を呼ぶ

step-66

ループからは呼ぶだけ。こうしとくと、このあとの青モードも同じループにスッと足せる。

#68ハート(魂): 青モードの判定を追加

step-67

赤か青か、ループの中で毎フレーム見分けて処理を切り替える。1つのループで2つの操作方式を回してるってわけ。

#69ハート(魂): 青モードの移動を呼ぶ

step-68

定義しといた部品を呼ぶだけで、長い処理がまるっと実行される。

これがカスタム定義のいちばんおいしいところ。

#70ハート(魂): ブルーモードの配置

準備

メッセージ「ブルーモード」を追加

ハートをブルーモード(重力あり)に切り替えるよう通知する

メッセージ「ブルーモード」を追加

実装

step-69

ジャンプ系の操作は、まず足が地面についた状態から始めるのが鉄則。床の近くに配置して、落下速度もゼロでリセットしとくやつ。

#71ハート(魂): 表示して判定オン

step-70

見た目を出すのと当たり判定をオンにするのはセットで考えると安全。表示されてるのに当たらない、逆に見えないのにダメージ、みたいなチグハグを防げる。

#72ハート(魂): 青モードを有効化

step-71

手順を「位置を整える」と「モードを入れる」に分けてるのがポイント。準備が済んでから有効にすると、切り替わった瞬間にハートがおかしな動きをしない。

#73ハート(魂): ハート操作の心臓部

step-72

いよいよメインループ。「ハート操作開始」を受けてずっと動き続ける監視ループを作る。

#74ハート(魂): 青モードかどうかを判定

step-73

ループの中で「今が青モードかどうか」を見分けて、青のときだけこの先の重力ジャンプ処理を動かす。

#75ハート(魂): 重力で下へ引っぱる

step-74

青モードの第一歩は重力。y座標を常にマイナス1して、ほうっておくと下に落ちるようにする。

#76ハート(魂): ジャンプの入力判定

step-75

床にいるときだけジャンプを許すのが大事。空中で何度でも飛べちゃうと重力の意味がなくなるからね。地面判定とキー入力の合わせ技、っていうのがミソ。

#77ハート(魂): 押し続けて高く跳ぶ

step-76

ボタンを押してる間だけ上向きの力が続くから、長押しで高く、ちょい押しで低く撃ち分けられる。押す時間で飛ぶ高さが変わる、マリオ系でおなじみのテク。

#78ハート(魂): 加速度でなめらかに落とす

step-77

キーを離したら落下する処理になる。

#79ハート(魂): 床にめり込んだら押し戻す

step-78

床にめり込んだら1ずつ上に押し戻して、地面の上にピタッと立たせる。これでジャンプは完成!

ok-scratch ok-scratch

ゲームのジャンプって、今回みたいに「速度」と「重力」の2つの数字でできてることが多い。

上に飛び出す瞬間に上向きの速度を与えて、その速度を少しずつ減らす。すると速度がプラスからマイナスへ変わって、自然と落下に転じる。

座標を直接いじるんじゃなく、速度を経由させるのが滑らかなジャンプのコツだぞ

#80ハート(魂): レッドモードへ切替

準備

メッセージ「レッドモード」を追加

ハートをレッドモード(通常4方向移動)に切り替えるよう通知する

メッセージ「レッドモード」を追加

実装

step-79

赤いハートへの切り換えメッセージも受け取る。青のときは重力前提で床近くに置いたよね。赤も位置と速度をリセットしてから始める。

#81ハート(魂): 赤モードで判定オン

step-80

あとはモードと被弾判定周りをセットして表示する

#82イントロ骨: イントロ骨の準備

ここからは、イントロの攻撃シーンで飛んでくる骨を作る。

準備

スプライト「イントロ骨」を開く

イントロ骨イントロ骨
スプライトについて
バトル開始前のイントロで登場する骨攻撃スプライト。横方向に高速で飛ぶ骨を担当する
どんな役割か
バトルが始まる前の骨攻撃を作ろう!ゆっくり揺れてからスッと飛ぶ骨でイントロの迫力ある演出をつけるよ。

実装

step-81

旗が押されたら、出番が来るまで隠しておくだけ。

ok-scratch ok-scratch

まずはシンプルな下ごしらえ。

#83イントロ骨: 骨の登場準備

step-82

「シェイク」の合図で骨が動き出す。見た目の効果を全部リセットして、いったん隠して、タイミングを整える。

#84イントロ骨: 警告と出現

step-83

赤い枠のコスチュームを表示して「今から攻撃しますよー」とプレイヤーに警告をする。

#85イントロ骨: 骨が突き刺さる

そして骨が下から「ドンっ!」と突き上げてくる感じを作る

step-84

超短い時間で動かすと、ヌルッとじゃなく一瞬で突き刺さって見える。

#86イントロ骨: 横向きの骨へ

準備

メッセージ「Z攻撃フェーズ1」を追加

イントロZ攻撃の第1フェーズ開始を通知する

メッセージ「Z攻撃フェーズ1」を追加

実装

step-85

骨をいったん消して、攻撃フェーズの合図を出すよ。

#87イントロ骨: 骨が画面を横断

準備

メッセージ「Z攻撃フェーズ2」を追加

イントロZ攻撃の第2フェーズ(ブラスター)開始を通知する

メッセージ「Z攻撃フェーズ2」を追加

メッセージ「通常ポーズ」を追加

サンズを通常ポーズに戻すよう通知する

メッセージ「通常ポーズ」を追加

実装

step-86

横向きの骨が画面をゆっくり横切っていくよ。

#88サンズの頭: 軽く横に動く

準備

スプライト「サンズの頭」を開く

サンズの頭
サンズの頭

実装

step-87

イントロ攻撃に合わせて、サンズが素早く手を動かす。サンズの号令で骨が動くように見えるかっこいいところ!

ok-scratch ok-scratch

ちょっと動くだけでも、攻撃のリズムに乗ってる感じが出るのがうまい。地味に効くやつ。

#89サンズの胴体: 胴体の攻撃アニメ

準備

スプライト「サンズの胴体」を開く

サンズの胴体
サンズの胴体

実装

step-88

胴体も攻撃に合わせて動かすぞ

#90サンズの胴体: 素早い切り替え

step-89

コスチュームをタイミングよく切り換える超大事なタイミング指定

#91ハート(魂): ハート出現の合図

準備

スプライト「ハート(魂)」を開く

ハート(魂)
ハート(魂)

実装

step-90

ハートの操作方法を青から赤に変える。

ok-scratch ok-scratch

初めてのプレイヤーにとっては色で操作が切り替わる瞬間はパニックになるけど、それが楽しくもあるよね

#92サンズの胴体: 通常ポーズ

準備

スプライト「サンズの胴体」を開く

サンズの胴体
サンズの胴体

実装

step-91

サンズをいつもの見た目に戻す合図。

#93サンズの胴体: 腕組みポーズ

準備

メッセージ「腕組みポーズ」を追加

サンズを腕組みポーズに切り替えるよう通知する

メッセージ「腕組みポーズ」を追加

実装

step-92

「腕組み」もこのタイミングで作っておこう

#94サンズの頭: 逆向きに戻る

準備

スプライト「サンズの頭」を開く

サンズの頭
サンズの頭

実装

step-93

次の攻撃のタイミングでサンズの頭を正常な位置に戻しておく

ok-scratch ok-scratch

ちょっとしたタイミングまで考えて作ってあるのが、この参考作品のすごいところだ。作者さんは超有名スクラッチャーさんだから知らない人はリミックス元をチェックしてみてね。

#95イントロブラスター: ブラスターの準備

ok、いよいよガスターブラスターを準備するぞ。サンズといえばガスブラだよね!

準備

スプライト「イントロブラスター」を開く

イントロブラスターイントロブラスター
スプライトについて
バトル開始イントロで登場するガスタービラスタースプライト。横向き・斜め・大型の3パターンを担当する
どんな役割か
サンズの必殺技ガスタービラスターを作ろう!横・斜め・大型の3パターンを組み合わせた迫力あるイントロ演出を実装するよ。

実装

step-94

#96イントロブラスター: ブラスター出現

最初は非表示にしておく

step-95

パッと出すんじゃなくて、じわっと現れさせるフェードインを実装していく

#97イントロブラスター: ぐっと近づいて発射

step-96

幽霊効果と繰り返し処理でフェードインさせる。出てきたら発射音を鳴らして、プレイヤーに「今からガスブラが来るぞ!」って伝える。

#98イントロブラスター: 発射アニメを回す

step-97

ブラスターを撃つときの、口がパカッと開くアニメをつけるよ。

ok-scratch ok-scratch

間隔を変えるだけで、動きに緩急が出るよね。同じアニメでもテンポを変えると印象が変わる。

#99イントロブラスター: 横ブラスターの準備

ok、このブラスターをいろんな場所に配置して攻撃するのがサンズの定番パターンだ。まずは左右4箇所から発射させる定義を作るぞ

準備

カスタム定義「横向きブラスター」を追加

上下左右に向けた4つの横向きブラスタークローンを配置して発射する

カスタム定義「横向きブラスター」を追加

実装

step-98

ポイントは向きを決めてから回すこと。

ok-scratch ok-scratch

向きを決めてから置く場所を決めると、ブラスターを好きな角度にビシッと並べられる。

#100イントロブラスター: 角度を変えて2つ配置

step-99

間に少しずつ向きを回すから、クローンごとに狙う方向が変わる。1個ずつ角度をずらして並べていく感じ。

#101イントロブラスター: 残り2つで四方向

step-100

同じ調子で残り2つも配置。向きを回してクローンを追加、合計4つのブラスターが上下左右をぐるっと囲んだはずだ。もうちょい、クローンの片付けまで実装してからチェックしてみよう。

#102イントロブラスター: 攻撃の波を組む1

step-101

横向きの4連ブラスターがドンッと登場。さっき作った仕込みが全部つながる瞬間。

#103イントロブラスター: ブラスターが消える

ガスブラが、すーっと消えていくフェードアウトの動きを作る

step-102

幽霊効果を繰り返し変えることで実現できる。

登場のフェードイン、退場のフェードアウトは、実装がカンタンだけど効果的な演出だから、今後も役立つテクニックの1つ

#104イントロブラスター: クローンを片付ける

step-103

フェードアウトが終わったら、このクローンを消す。

#105イントロブラスター: 斜めブラスターの準備

準備

カスタム定義「斜め向きブラスター」を追加

4方向に斜め向きのブラスタークローンを配置して発射する

カスタム定義「斜め向きブラスター」を追加

実装

step-104

次は斜め向きのブラスター。「斜め向きブラスター」専用ブロックの中で、サイズを130にして隠す。やり方は横向きとほぼ同じ。

ok-scratch ok-scratch

違うのは最初に向ける角度。マイナス135度っていう斜めの向きから始めるのがポイント。

#106イントロブラスター: 斜めに2つ配置

step-105

斜め向きも、角に置いてクローン化、90度回しながら画面の四隅を狙うように並べる。

#107イントロブラスター: 四隅をそろえる

step-106

これで4つの角っこ全てからブラスターが発射される。

ok-scratch ok-scratch

こういうクローンの数や角度や大きさなどを変えたら、オリジナルのサンズ戦も簡単に作ることができる。そういうのもスクラッチのいいところだよね!

#108イントロブラスター: 攻撃の波を組む2

step-107

斜め向きブラスターもさっきの攻撃に続けて設置する。ここで間を空けないと、弾を避ける隙がなくて理不尽な難しさになっちゃう。1秒待つから、プレイヤーによける余裕が生まれてちゃんとゲームになる。

#109イントロブラスター: 攻撃の波を組む3

step-108

ここでも待ち時間が攻撃のテンポを作る。

#110イントロブラスター: 大型ブラスターの準備

準備

カスタム定義「大型ブラスター」を追加

左右に大型のブラスタークローンを2つ配置して発射する

カスタム定義「大型ブラスター」を追加

実装

step-109

締めくくりは「大型ブラスター」。「大型ブラスター」専用ブロックでサイズを250、横向きや斜めより倍くらいデカい。隠してから左側にセット。

#111イントロブラスター: 左右から大型を2門

step-110

大きいから2門で十分な迫力。左右から挟み撃ちするレイアウト。

#112イントロブラスター: 攻撃の波を組む4

準備

メッセージ「Z攻撃フェーズ3」を追加

イントロZ攻撃の第3フェーズ(本番バトル移行)を通知する

メッセージ「Z攻撃フェーズ3」を追加

実装

step-111

大技だから余韻も長めにセットしておく。

ok-scratch ok-scratch

プレイヤー大混乱間違いなしっしょ!

#113ハート(魂): 被弾チェックを常時まわす

準備

スプライト「ハート(魂)」を開く

ハート(魂)
ハート(魂)

実装

step-112

今度はハートがダメージを受けたかを見張る仕組み。「ヒット判定」を受けたら「ずっと」で常時チェックを始める。

ok-scratch ok-scratch

被弾を見逃さないための、休まない見張り番。

#114ハート(魂): 判定オン・オフのフラグをかませる

step-113

ループの中ではまず「被弾判定有効」が1かを確認する。

ok-scratch ok-scratch

判定をオン・オフできるフラグを1枚かませとくと、無敵時間や演出中だけ当たらない、みたいな制御がやりやすい。スイッチ1個で当たり判定を切れるってわけ。

#115ハート(魂): 骨に当たったかを色で判定

step-114

ダメージの本体。いくつかの色のどれかに触れたら被弾、って判定を「または」でつなぐ。

ok-scratch ok-scratch

「当たり判定」を色で見るのも定番テクだね。

プロのゲームだと座標や図形の重なりで細かく計算するけど、「色に触れたか」だけで判定できるのがスクラッチ流。

骨を色分けしとけば、緑は当たる・水色は条件つき、みたいに1スプライトで何種類もの判定を作り分けられる。見た目と判定を色でひもづける、シンプルだけど強いやり方。

#116ハート(魂): ダメージでHPを削る

step-115

当たったときはシンプル。ヒットポイントを1減らして、被弾の効果音を鳴らす。

#117サンズの頭: さあ、いくぞ

本格バトルの開始を演出する一言を作る。

準備

スプライト「サンズの頭」を開く

サンズの頭
サンズの頭

メッセージ「バトル開始」を追加

本番バトル開始を全スプライトに通知する

メッセージ「バトル開始」を追加

実装

step-116

勢いよく言い切る感じ。「じゃあ行くぞ」ってセリフを出す。テンポは速め。

ok-scratch ok-scratch

引数1つでキャラのテンションまで表現できるのが、この仕組みの面白さ。

#118ステージ: BGMをループ再生

準備

スプライト「stage」を開く

ステージ

実装

step-117

バトル本番のBGM。「バトル開始」を受けたら音量を100にして、「ずっと」の中で「終わるまで音を鳴らす」で曲をエンドレス再生。

#119サンズの頭: バトル開始の合図

このあと枠の大きさを変えたいからバトルボックスを長方形に切り替えるメッセージを用意するぞ

準備

スプライト「サンズの頭」を開く

サンズの頭
サンズの頭

メッセージ「長方形に切り替え」を追加

バトルボックスを長方形に変更するよう通知する

メッセージ「長方形に切り替え」を追加

実装

step-118

メッセージ送信後にセリフを消す。何も言わないようにすると、セリフが消える仕組みになっている

#120バトルボックス: バトル開始の演出

バトル開始されたらバトルボックスに動きが引き継がれる。ダンスっていうメッセージはサンズが受け取る予定。

準備

スプライト「バトルボックス」を開く

バトルボックス
バトルボックス

メッセージ「ダンス」を追加

サンズのダンスアニメーションループを開始させる

メッセージ「ダンス」を追加

実装

step-119

バトルボックス自体のコスチュームも変更していく処理を繰り返し、滑らかに図形が変更される演出をする

#121バトルボックス: 長方形ボックスへ

で、「バッドタイム」っていうメッセージを作っておく!

準備

メッセージ「バッドタイム」を追加

バッドタイム状態(攻撃中・テキスト表示)への移行を通知する

メッセージ「バッドタイム」を追加

実装

step-120

最後に「長方形」コスチュームに切り替える。ここにテキストを描画したり、この後作っていく攻撃カーソルの動きなどを出力することになる。

ok-scratch ok-scratch

バッドタイム、いわゆる「サイアクな目に合わされそう」な熱い戦いをじっくり作り込んでいく。プレイヤーには悪いけど、作り手としてはワクワクしてくるよね!

#122サンズの頭: 定位置へ降りる

準備

スプライト「サンズの頭」を開く

サンズの頭
サンズの頭

変数「★ダンス中フラグ」を追加

サンズがダンス中かどうかを示すフラグ(1=ダンス中、0=停止)

変数「★ダンス中フラグ」を追加

実装

step-121

「長方形に切り替え」を受けたサンズが、5回に分けて少しずつ下に降りる。「サンズのY座標」も同じだけ下げて体や脚と合わせて、最後に「ダンス中フラグ」を1にする。

#123サンズの胴体: 長方形へ下がる

準備

スプライト「サンズの胴体」を開く

サンズの胴体
サンズの胴体

実装

step-122

胴体もマイナス3ずつ5回、合計15下がる。

ok-scratch ok-scratch

サンズが3ずつ下がる……大切なことなので2回言いました m(_ _)m

#124サンズの脚: 脚がゆっくり下がる

準備

スプライト「サンズの脚」を開く

サンズの脚
サンズの脚

実装

step-123

脚は一瞬待ってから、ゆっくり下げる。

まとめ

ここまででゲームの骨格ができたね。旗を押したらHP表示、バトルボックス表示、ハートが赤モードで動いて、青モードではジャンプできる。変数1つでモードを切り替える発想は、この先ずっと効いてくるぞ。

ブクマよろしくお願いします! ブクマよろしくお願いします!
どんどん追記・更新していくので、ブックマークやシェアよろしくお願いします!