
落とし穴 ボス登場を「重ね技」で作る
あけましておめでとうございます~!

前回の落とし穴
前回は、ゴーレムをアニメーションで可愛くできるか挑戦してみた。
今回は、ボスゴーレムを登場させてみる。
今日のハイライト

落とし穴の想い出 ピンボール
ピンボールは、落とし穴に落ちるのを防ぐゲームの代表格。
村上春樹の1973年のピンボールを読んでピンボールに憧れを感じた。
実際に初めてピンボールをしたのは、サンノゼでの海外ロケテスト。
入社して右も左もわからない英語赤点の俺が海外ロケに出発。
朝10時の開店から夜中の12時の閉店までロケテストしてから日本に電話で報告するのを1週間ぐらいやってたかな。時差ボケもあって地獄だった。
その時、休憩時間にやったのがピンボールとかガンシューター。
眠気を吹き飛ばすためにガンガン揺らしてティルト攻めプレイ。
ピンボールを見ると海外ロケを思い出す。
代えがたい経験だったな。
ボス登場!
以前作った地形ブロックの破壊や画面振動などの演出でボスを呼び出す。
・スライムを落として残り1匹になったら登場イベント発生
・すぐに登場するとダサいので何秒か経ってから登場
・残っている地形ブロックを破壊してランダムに登場
・登場時に画面振動させる
出現イベント用オブジェクトを作る
出現イベント(obj_control)のcreateイベント(作成)
global.golem_boss = false; // ボスゴーレムが登場したか?
global.boss = false; // ボス戦ありなし
// ボス登場用のカウント
appear_timer = 0; // 登場カウントタイマー
appear_interval = 120; 登場するまでの時間
出現イベント(obj_control)のステップイベント
// スライムが残り1匹になったらgolem boss登場
if (instance_number(obj_slime) <= 1 and instance_exists(obj_block) and !global.golem_boss) {
// どの地形ブロックからボスを出現させるかをランダムに選択
var _spawn_points = instance_number(obj_block);
var _random_spawn_index = irandom(_spawn_points - 1);
// ランダムに選択した地形ブロックの位置を取得
var _chosen_spawn = instance_find(obj_block, _random_spawn_index);
x = _chosen_spawn.x;
y = _chosen_spawn.y;
// 一定時間経過後にボス登場させる
appear_timer += 1;
if (appear_timer > appear_interval) {
instance_create_layer(x, y,"hitmark",obj_damage_breaker); // 地形ブロックを破壊
instance_create_layer(x, y,"hitmark",obj_smoke_big); // 煙大
instance_create_layer(x,y,"Instances",obj_boss_golem); // ボスゴーレム登場
global.shake = true;
appear_timer = 0;
}
}
出現場所のコントロールは落とし穴のコードを流用。
地形ブロックの破壊は、破壊と登場のコードを流用
カメライベント(obj_camera)のステップイベント
// シェイクの強さ(ピクセル単位)
if (shake_timer > 0) {
shake_timer--;
// ランダムなオフセット
var shake_x = irandom_range(-shake_strength, shake_strength);
var shake_y = irandom_range(-shake_strength, shake_strength);
// ビューの位置を設定
camera_set_view_pos(view_camera[0], original_x + shake_x, original_y + shake_y);
} else {
// シェイクが終了したら元の位置に戻す
camera_set_view_pos(view_camera[0], original_x, original_y);
}
// ボス登場用のシェイクの強さと長さ
if (global.shake) {
// シェイクの強さと時間を設定
shake_strength = 10; // シェイクの強さ(ピクセル単位)
shake_timer = 30; // シェイクの継続フレーム数
}
画面シェイクは、落とし穴に落ちた時のコードに、ボス登場用のトリガーを追加しただけ。
ボス登場の実機テスト

過去に作った色んな物を組み合わせて、登場演出ができた。
ゲームは重ね技が大事!

今日も誰かの参考になっていれば幸せです。
使用ツールとAI
ゲームツールは「GameMaker」
ドット絵ツールは「EDGE」
AIは「ChatGPT」