プチコンまとめWiki (初代/mkII)

Toukou/A SHOT の変更点

パンくずリスト


#title(投稿プログラム : A SHOT)
#contents
2013年7月9日投稿
/ 投稿者 : 猫姫
/ &tag(投稿プログラム,ゲーム,シューティングゲーム,mkII専用);
*バグ情報 2013/07/09 [#e6a9fba8]
と、いうより誤字情報です。申し訳ありません。
-ロード終了時に表示される、COMPLETE が、 COMPLEAT になっている

#basic(start=91){{
LOCATE 15,22:?<COLOR>(RED){"COMPLETE!!"}
}}
が正しい表記です。
* 内容 [#h86aeaea]
パット見、COLOR(#880000){SIZE(24){コンソールゲーム?}}のようで、実はCOLOR(#880000){SIZE(24){全力で}}スプライトを動かしてます。~
COLOR(#555500){SIZE(24){スプライトの書き換え、BGの書き換え、フォントの書き換え}}など、~
そのすべてを他リソースに頼らず、COLOR(#880000){SIZE(24){プログラムで実行}}しています。~
また、敵の配置、行動ルーチンのすべてにおいて、COLOR(#555500){SIZE(24){ランダム要素を排除}}しているので、~
COLOR(#880000){SIZE(24){スコアアタックが成立}}するようになってます。~
難易度は、ステージ4くらいから、私仕様の難易度です。~
個人的にステージ5は一番うまくできたと思うので、シューティングの好きなかたはぜひ、遊んでください。~
*スクリーンショット [#ud76e704]
|タイトル|自機を操作して敵を打て|
|&ref(sc1.jpg);|&ref(sc2.jpg);|
|コンボを繋いでハイスコアを目指せ|ランキングは30位まで記録|
|&ref(sc3.jpg);|&ref(sc4.jpg);|
*遊び方 [#sa970d09]
十字キーで自機移動、Aボタンでショット~
8方向移動+1ボタンという、昔ながらのシューティングゲームです。
**タイトル画面 [#ab37b4a2]
プログラムで、かなり色々とプチコンのプリセットデータを書き換えるので、~
起動からしばらく、ロード画面に入ります。~
ローディングのタイムバーを、遊び半分で用意してみました。~
タイトル画面には4つのメニューがでます。~
十字キーで移動。Aボタンで決定します。
***GAME START [#f01334c4]
ステージ1から始まります。~
自機を操作して敵を倒してください。~
なお、特定の条件を満たすと、ステージセレクト機能がつきます。
***HI-SCORE RANKING [#w0d3ec71]
ハイスコアTOP30を表示します。~
なお、得点カンストは500000点です。
***DLETE MEM FILE[#u8b530c7]
ハイスコアを記録しているMEMファイルを削除し、~
プログラムを再起動します。
***SAVE AND GAME END [#y430b78e]
ハイスコアを記録して、ゲームを終えます。~
なお、プチコンダイアログをタッチミスして、キャンセルしても大丈夫です。~
セーブが正常に行われなければ、終了しないようにしてます。
**ゲーム画面 [#ibdf3ae6]
***バリアの展開 [#of4b6288]
雑魚敵を打ち落とすと、一時的にその場所に、ひし形のバリアが展開されます。~
敵がそのバリアに触れると、触れた敵を打ち落とし、また、その場所にバリアが展開します。~
こうして、連鎖的に敵を落としていくのが、攻略のポイントになります。
***ボーナスアイテムとコンボ [#p2983203]
バリアで敵を落とすと、ハート型のボーナスアイテムが出現します。~
バリアを切らさないように、ボーナスアイテムを獲得することで、コンボがカウントされます。~
***コンボボーナス [#y9b90452]
コンボ継続中は、得点の加算にもボーナスが付きます。~
ハイスコアラーを目指すならば、うまくコンボをつなげてください。
**自機が落ちた場合 [#b7e92b9a]
残機のシステムはありません。
同じステージをリトライするか、タイトルに戻るか選択してください。~
どちらを選んでも、ハイスコアチェックが行われ、スコアはリセットされます。
**ステージ数 [#dd5a02c8]
全7ステージです。~
ステージは敵の配置だけなので、簡単に増やすことは出来るようなルーチンを組んでますが~
まあ、満足してるので、たぶん増やさないと思います。
**隠し要素 [#cf151388]
現在2つ用意しています~
1つは条件開放のステージセレクト機能です。~
もう1つは、製作ノートにこっそり(?)公開中
*クリックコメント [#de2e29d3]
#vote(☆☆☆[7],☆☆[1],☆[0])
#vote(☆☆☆[8],☆☆[1],☆[0])
訪問者~
トータル:&counter(total);人~
今日:&counter(today);人~
* QR コード [#kae8b7c0]
プチコンmkII 向けの QR コードです。~
|PRG:NHPSHO1|
|&ref(nhpsho1qr.png);|
*製作ノート [#we47526f]
#region(ネタバレを含みます。注意してください)
**フォントデータをスプライトデータに書き込む [#b3929b14]
GPUTCHR命令と、GSPOIT命令、CHRSET命令を使います。~
-COLOR(#5555FF){GPUTCHR}~
CHRデータを、グラフィック画面の指定位置に書き込みます。~
この命令は、倍角サイズがある程度自由なのが魅力です。~
-COLOR(#5555FF){GSPOIT}~
指定位置のグラフィック面の色を取得します。~
本来は、0…255のbmpカラーで取得するのですが、~
フォントデータは単色のため、0でなければ"F"(16進数の15)を返すように使ってます。~
-COLOR(#5555FF){CHRSET}~
任意CHRデータに書き込む命令です。8x
8サイズで1キャラなので、基本となる16x16のスプライトキャラへは、合計4ヶ所に書き込むことになります。~

#basic{{
'Font dataヲ SPニ カキコム レイ
GPUTCHR 0,0,"BGF",ASC("▲"),0,0,2
FOR I=0 TO 3
   CH$=""
   FOR Y=0 TO 7
   FOR X=0 TO 7
   C$=STR$(GSPOIT(X+(I AND 1)※8,Y+FLOOR(I/2)※8))
   IF C$!="0" THEN C$="F"
   CH$=CH$+C$   
   NEXT X
   NEXT Y
CHRSET "SPU0",I,CH$
NEXT I
GFILL 0,0,16,16,0
}}
これで、コンソール文字(BGF)の▲が、4分割されて、スプライトの0番(SPU0の0から3番)に書き込まれます。~
SPSET で0番指定すると、16x16の▲が、スプライトとして表示されます。
**敵出現の管理 [#u475e1a8]
今回は、ステージ毎にデータ文でまとめておき、それをステージ開始前に配列変数に落とすという方法をとりました。~
たとえば、200フレーム目に敵A出現。300フレーム目に敵Bが出現とすると、事前に多目に宣言しておいた配列変数に、~
#basic{{
F(0)=200:E$(0)="A"
F(1)=300:E$(1)="B"
}}
と入力します。(実際はRESTOR,READ,FORを利用)~
そして、メインループで利用します。
#basic(start=3){{
T=0:I=0
@LOOP
T=T+1
IF T==F(I) THEN GOSUB "@"+E$(I):I=I+1
GOTO @LOOP
}}
これで、毎フレーム、Tをカウントアップし、~
Tが、F(0) 今回は、200になったら、@AへGOSUBし、~
@Aの処理(敵の出現処理)を行ったあと、Iをカウントアップ。~
Tが、F(1)になるのを待つ。~
指定したタイミングで指定した処理を行えます。
**処理落ちを軽減するテクニック [#x6796790]
最初組み上げたときは、ものすごい処理落ち具合でした。~
その最大の原因は、当たり判定です。~
敵弾32。自機弾8。敵40ー50、バリアの判定。~
画面内にないときはスキップさせても、相当無理のかかる量でした。~
ここで、プログラムを見直すなどは、焼け石に水。もともと、「イッパイ動かしたかった」のですから、仕方がない。~
次に行ったのが、当たり判定回数を減らすことです。~
例えば、自機ショットが1フレームあたり、4ピクセル上に進む。敵が下に下がる最大速度が2ピクセルだとしたら、~
その相対速度は6ピクセル。16というキャラサイズを考えると、最低でも2フレームは衝突していることになります。~
つまり、当たり判定の処理を、毎フレームから、2フレームに一回に落としたところで、処理に影響はほとんど出ません。~
この効果は、絶大でした。
**スコア表示 [#s4358576]
手前味噌ではありますが、[[数字表示変換プログラム>http://wiki.hosiken.jp/petc/?Toukou%2F%BF%F4%BB%FA%C9%BD%BC%A8%CA%D1%B4%B9%A5%D7%A5%ED%A5%B0%A5%E9%A5%E0]]を利用しています。~
もともと、作ったは良いけど使用例を出してなかったので、その使用例として作りはじめたのが、このシューティングゲームです。~
うまく表示されてるとも思いますが、0のフォントだけは別に書き換えた方が良いかなとも思いました。~
**隠し要素 [#i4702483]
ステージオールクリアで、ステージセレクトが解放されます。~
ノーミスとか、そんな酷なことはいいません。条件はなんどリトライしようと、ステージ7をクリアすればOKです。~
なお、全クリア後、セーブすれば、ステージセレクトの状態もセーブされます。~
~
「後半はムリゲーですっ」という方には↓
**裏技 [#i6abb530]
デバック用として用意していた、無敵モード(自機の当たり判定をすべてスキップ)を、隠しコマンドをつけて、忍ばせてあります。~
ただし、スコアは常に0になるので、これでスコアアタックはできません。~
出しかたは、↓
#region(見たくない方むけに隠しておきます)
ハイスコアランキング画面、スコアが1stまで表示され、~
画面の下の方で~
PUSH ANY BUTTON TO TITLE~
と表示されたら、DSの蓋を閉じて、2秒以上まって開いてください。~
タイトル画面に戻ると、うまく入力されていれば、画面左下に~
COLOR(#FF0000){MUTEKI ON} と表示されます。~
なお、同じことを繰り返すことで、ON,OFFが切り替わります。~
このパラメータはセーブされません。
#endregion
#endregion
*開発&編集後記 [#zc59fa4a]
シューティングゲームは、プチコンDLして、一番最初に組んでみたことがありますが。そのときは、敵の出現位置はRNDに頼りまくり、ステージも1ステージ毎にゼロから入力するという、根性の作品だったと思います。~
今回はだいぶ、うまくできたと思います。~
惜しかった点としては、もうすこしギミックを盛り込みたかったところです。そこは、プチコンのスプライト数100個という制限にぶつかりました。不要SPを書き換えまくっても、限界を感じたので、書き換え無しで動かしてます。~
敵弾に32も振ったのに、最後の方のステージでは処理限界をむかえることがあります。~
まるで、戦場の狼…いや、わかるかただけ解ってください(笑)
* CHECKER FLAG (ひとことコメント) [#zdb63325]
この作品に対するコメントがあれば一言どうぞ。(作品に直接関係ない質問や雑談は[[掲示板>Board]]へ)
- ''名無しさん'' : COMPLEAT → COMPLETE (&new{2013/07/09 (火) 22:25:09};)
- ''名無しさん'' : 一番上のタイトルが・・・ (&new{2013/07/09 (火) 22:39:12};)
- ''猫姫'' : ↑*2ああ、またやってしまいましたか。語学のダメさぶりを毎回さらしてますね、私。ご指摘ありがとうございます。↑タイトルの変更忘れも修正しました。ありがとうございます。 (&new{2013/07/09 (火) 22:53:55};)
- ''ヤッフー'' : 神だー神だー、あたりはんていこまかっwスプライト書き換えるのは自分なら無理だなw (&new{2013/07/10 (水) 08:53:00};)
- ''名無しさん'' : フォントデータのスプライトえの書き込みはCHRREADでできませんでしたっけ (&new{2014/02/26 (水) 00:17:21};)
- ''猫姫'' : CHRREAD BGFで読み込んで、CHRSET SPUで出来ますね。ただ、BGFは8x8なので、16x16のスプライトにするなら、もう一手間必要だと思います。 (&new{2014/02/26 (水) 03:11:15};)

#comment

表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.004 秒 | ログイン
Copyright(C) 2011-2014 プチコンまとめWiki ◆1sxkymI8ji30