【プチコン4講座】きこりゲームの土台を作っていこう
こんにちは。なおキーヌです。
ブログ毎日更新は280日目になります。
カセットビジョンのゲーム「きこりの与作」を再現してみようの続きの記事になります。
上記は予備知識になりますので、本記事から始めても問題なく作り進められます!
本講座では、きこりの与作(原作名:与作)は商標登録されています(おそらく)ので木こりゲームと称します。
まぁ、作っていくのはきこりの与作のコピーなのですが(笑)
流石にカセットビジョンの見た目を作るのは逆に面倒くさいので、
プチコン4のスプライトと衝突判定をふんだんにつかっていきます。
それでは木こりゲーム作り第1回目、始めていきましょう。
全体の構想を考えよう
基本的にはきこりの与作のクローンになります。
一応、構成とかシステムを箇条書きしてみましょう。
- 通常移動は左右のみ
- ジャンプは垂直飛びオンリー
- 1ミスでライフ1つへる
- 特殊な障害物に触れると身動きがとれなくなる
- 斧を振って敵や木を倒すことが出来る
- フィールドにある木をすべて倒すとゲームクリア
原作は開始音と死亡音と効果音ぐらいしかなかったので、
折角なので用意されたBGMとかをふんだんにつかっていきましょう。
マップを表示してみよう
ステージを描写します。
カセットビジョン版のきこりの与作はべたぬりが基本でしたが、
プチコン4は美麗なドット絵が用意されていますので贅沢にも使っていきます。
早速コードを書いていきましょう。
ACLS
' ループ用変数
VAR G_I = 0
' 青空ぽい背景描写
FOR I=0 TO 240
GLINE 0,I,400,I,RGB(I/2, 125+ROUND(I/2), 255)
NEXT
とりあえず背景はGLINEをFORで回しててきとうに青空を作っておきましょう。
与作っぽいものが映ってますが気にしないでください(笑)
前回のSSを取るためにGFILLで書いただけです。
それではここに地面を配置していきます。
ACLS
' ループ用変数
VAR G_I = 0
' 青空ぽい背景描写
FOR G_I=0 TO 240
GLINE 0,I,400,I,RGB(I/2, 125+ROUND(I/2), 255)
NEXT
' 地面を描写
FOR G_I = 0 TO 24
TPUT 0, G_I, 14, &HECC2
TPUT 0, G_I, 14, &HED02
TPUT 0, G_I, 14, &HED02
NEXT
いい感じですね。
地面はテキストスクリーン(TPUT)を使って描写してます。
いかにも横スクロールアクションゲームぽい風貌になりました。
まぁこのゲームは一切スクロールしませんが。
スプライトを出して動かしてみよう
私の画面には与作の亡霊がいますが、皆さんは背景と地面しかないと思うので
プレイヤーキャラクターとしてスプライトを用意しましょう。
ACLS
' ループ用変数
VAR G_I = 0
' スプライト定義
SPSET 0, 1432
SPSET 1, 1436
SPSET 2, 1438
SPSET 3, 1442
SPOFS 0, 35,160
SPOFS 1, 200,160
SPOFS 2, 100,200
SPOFS 3, 300,50
' 青空ぽい背景描写
FOR G_I=0 TO 240
GLINE 0,I,400,I,RGB(I/2, 125+ROUND(I/2), 255)
NEXT
' 地面を描写
FOR G_I = 0 TO 24
TPUT 0, G_I, 14, &HECC2
TPUT 0, G_I, 14, &HED02
TPUT 0, G_I, 14, &HED02
NEXT
ハカセを主人公
ワンパク君をイノシシ役
インテリを鳥
神崎はヘビに認定しました。
狂気じみたきこりゲーが想像できますねこれは……
にすることにしました。
とりあえずハカセを前後に動かせるようにしてみましょう。
全員顔だけですが、某ゆっくりみたいなもんです。
ACLS
' ループ用変数
VAR G_I = 0
' スプライト定義
SPSET 0, 1432
SPVAR 0, "X", 35
SPVAR 0, "Y", 160
SPOFS 0, SPVAR(0,"X"), SPVAR(0,"Y")
SPSET 1, 1436
SPSET 2, 1438
SPSET 3, 1442
SPOFS 1, 200,160
SPOFS 2, 100,200
SPOFS 3, 300,50
' 青空ぽい背景描写
FOR G_I=0 TO 240
GLINE 0,I,400,I,RGB(I/2, 125+ROUND(I/2), 255)
NEXT
' 地面を描写
FOR G_I = 0 TO 24
TPUT 0, G_I, 14, &HECC2
TPUT 0, G_I, 14, &HED02
TPUT 0, G_I, 14, &HED02
NEXT
LOOP
D_CONTROLLER
ENDLOOP
' コントローラー関数
'───────────────────────────────
DEF D_CONTROLLER
' 0番目のコントローラー(つまり1コン)の押されているボタンを取得
VAR B = BUTTON(0)
' 左ボタン処理
IF (B AND 1 << #B_LLEFT) != 0 THEN
SPVAR 0, "X", SPVAR(0,"X")-1
ENDIF
' 右ボタン処理
IF (B AND 1 << #B_LRIGHT) != 0 THEN
SPVAR 0, "X", SPVAR(0,"X")+1
ENDIF
SPOFS 0, SPVAR(0,"X"), SPVAR(0,"Y")
ENDIF
コントローラー関数の説明は省きます。
コントローラーに関しては、下記で詳しく紹介しているので余裕があればみてください!
ハカセを左右に動かすことが出来たので、次は斧を振れるようにしてみましょう。
斧あったかな?プチコン4
……ありました! スプライト番号161ですね。
それでは早速斧スプライトを作りましょう。
斧を振ってみよう
このハカセは手がないので、口から斧を出せばよさそうですね。
動きとしては、Yボタンを押したらはかせが口を開けて斧が出現して少し回転する。
指定度の回転が終わったら斧が消えてハカセは口を閉じる。
これでいきましょう!
ACLS
' ループ用変数
VAR G_I = 0
' スプライト定義
SPSET 0, 1432
SPVAR 0, "X", 35
SPVAR 0, "Y", 160
SPVAR 0, "DIRECT" , #FALSE
SPVAR 0, "SWING" , #FALSE
SPOFS 0, SPVAR(0,"X"), SPVAR(0,"Y")
' 斧スプライト定義(非表示にしておく)
SPSET 100, 161, 0
SPVAR 100, "ROTATE", 0
' その他スプライト定義
SPSET 1, 1436
SPSET 2, 1438
SPSET 3, 1442
SPOFS 1, 200,160
SPOFS 2, 100,200
SPOFS 3, 300,50
' 青空ぽい背景描写
FOR G_I=0 TO 240
GLINE 0,I,400,I,RGB(I/2, 125+ROUND(I/2), 255)
NEXT
' 地面を描写
FOR G_I = 0 TO 24
TPUT 0, G_I, 14, &HECC2
TPUT 0, G_I, 14, &HED02
TPUT 0, G_I, 14, &HED02
NEXT
LOOP
D_CONTROLLER
ENDLOOP
' コントローラー関数
'───────────────────────────────
DEF D_CONTROLLER
' 0番目のコントローラー(つまり1コン)の押されているボタンを取得
VAR B = BUTTON(0)
' 斧を振っていなかったら
IF SPVAR(0,"SWING") == #FALSE THEN
' 左ボタン処理
IF (B AND 1 << #B_LLEFT) != 0 THEN
SPVAR 0, "X", SPVAR(0,"X")-1
ENDIF
' 右ボタン処理
IF (B AND 1 << #B_LRIGHT) != 0 THEN
SPVAR 0, "X", SPVAR(0,"X")+1
ENDIF
' 移動処理
SPOFS 0, SPVAR(0,"X"), SPVAR(0,"Y")
' 斧も一緒に移動
SPOFS 100, SPVAR(0,"X")+32, SPVAR(0,"Y")+12
' Yボタン処理
IF (B AND 1 << #B_LRIGHT) != 0 THEN
' 振った音を鳴らす
BEEP 100
' ハカセのグラを変更
SPCHR 0, 1433
' 斧振りフラグON
SPVAR 0,"SWING", #TRUE
ENDIF
ELSE
D_SWING_AXE
ENDIF
ENDIF
' 斧振り関数
'───────────────────────────────
DEF D_SWING_AXE
IF SPVAR(0,"SWING") == #TRUE THEN
' 斧を出現させる
SPSHOW 100
' 斧を指定位置まで回転させる
IF SPVAR(100, "ROTATE") > -90 THEN
SPVAR 100, "ROTATE", SPVAR(100, "ROTATE")-5
SPROT 100, SPVAR(100, "ROTATE")
ELSE
SPHIDE 100
SPCHR 0, 1432
SPVAR 100, "ROTATE", 0
SPROT 100, SPVAR(100, "ROTATE")
SPVAR 0,"SWING", #FALSE
ENDIF
ENDIF
END
斧のスプライトは基本的にはかせの位置に追従する形にしています。
そしてボタンは斧を振っていない時だけ動かすようにして、
斧は一度振ったらフラグをONにして連続して振らせないようにしています。
斧を振ったらはかせの顔グラを変更して、斧が指定位置の度になったら色々リセットという感じですね。
ちょっと駆け足でしたが、1つ1つ何をしているのかをしっかりと見ておきましょう。
とんでもないクソゲーをうみだそうとしているのかもしれない #petitcom #プチコン4 #NintendoSwitch pic.twitter.com/xOjkNaU2cK
— なおキーヌ@ゲームクリエイターLv5 (@naokeyzmt) October 7, 2019
こんな感じになればOKです。
色々と雑いところがありますが、クオリティアップは後で問題ありません!
ここで細かいところを直そうとする人は挫折しやすいタイプです。
過去の私ですね!(自戒
とりあえず基本的な所を作り上げてしまいましょう!
それでは!