すぱんだの解説
更新日付 1998-09-14
ここでは開発状況の報告と、新しく追加したルーチンを解説します。
「どんば」から流用したルーチンは解説しないので、
関節を持ったキャラの制御などは、どんばのページを参照してください。
|
・少し進んだところ
スタートしてから3画面ほど進んだところです。
背景として建物と花壇が、前景は屋台や銅像です。
小さな敵キャラとして、風船が浮かんでいます。
|
・現在の状況
・開発中の画面
敵キャラを作っていないので、カンカンを表示しています。
右側の宙返りしている方が敵です。
背景のように見える風船や、リポビタンDも敵です。
|
・スタート画面
スタート直後の画面です。
敵キャラがまだ作っていないので、
主人公のカンカンを表示しています。
宙返りしている方が敵キャラです。
リポビタンDは小さな敵キャラです。
|
・マップに配置した敵を表示
マップエディタMAPEが吐き出すマップデータは、縦32キャラあります。
しかしテレビ画面にはそのすべてが表示されるわけではありません。
そこでその部分をマップに配置される敵情報として利用します。
マップの縦の大きさを30キャラとし、
余った2キャラをそれぞれ、敵の種類と座標として使います。
・敵の種類
敵を二つに分けて考えることにしました。
一つは自機と同じように、複数OBJで構成した敵です。
それとは別に1個のOBJで構成される敵も登場させることにしました。
OBJは表示できる数が限られていますが、
こうすればOBJをあまり使うことなく、
たくさんの敵を登場させることができます。
もしかしたら、飛び道具も表示できるかもしれません。
・解説
ソースのほとんどは「どんば」で使われていたものか、
あるいはそれを少し改造しただけです。
まったく新しい部分だけを解説します。
・CG-RAM関係の初期化
背景とスクロールするマップを表示するために、
2枚のBGを使いたいのでBGモード1を選択しました。
モード1は、16色のBG1とBG2、それに4色のBG3が使えます。
BG3は文字を表示するために、画面の最も手前になるよう設定しました。
------------------------------------------------------------
set_CGRAM:
php
off16a
sep #$20
; CG-RAMのアドレス割り当て
lda #$09 ;MODE=1 + BG3最優先
sta $2105 ;BGMODE
lda #$07 ;%0000011(OBJ 16×16)
sta $2101 ;OBJSEL
lda #>BG1SC0+1
sta $2107 ;BG1SC
lda #>BG2SC0+1
sta $2108 ;BG2SC
lda #>BG3SC0
sta $2109 ;BG3SC
sta $210a ;BG4SC(BGMODE=1では存在しない)
lda #(>BG2CHR & $f0) | ((>BG1CHR & $f0)>>4)
sta $210b ;BG12NBA
lda #(>BG3CHR & $f0)>>4
sta $210c ;BG34NBA
lda #$80 ;address +1 at $2119
sta $2115 ;VMAINC
lda #%00010111
sta $212c ;TM(メイン画面)
sta $212d ;TS(サブ画面)
plp
rts
------------------------------------------------------------
・当たり判定
当たり判定を行なうのは、体全体ではありません。
パンチだったら、手のパーツだけで十分でしょう。
そこでパーツに当たり判定を行なうかどうかのフラグを設け、
そのビットを調べて当たり判定を行なうことにしました。
1パーツは4バイト、その最後のバイトのd1ビットを使います。
このフラグを設定するため、ポーズエディタPEDITも拡張しました。
------------------------------------------------------------
atari:
on16a
on16i
rep #$30
ldx p_action ;動作(アクション)
lda tableACT,x ;現在の動作(アクション)データのアドレス
ldx p_pose ;何番目のポーズか
clc
adc table48,x ;値を48倍するテーブルを加算
tax ;x=現在のポーズデータ
lda pose_data,x
bit #$0100 ;当判不要のキャラだった
beq _exit
and #$00ff
clc
adc base_px
clc
adc #16 ;前方への攻撃なので余分に+16
sta temp_px
lda pose_data+1,x ;ポーズ.y
and #$00ff
clc
adc base_py
sta temp_py
ldx #TEKI*4-4
_loop:
lda teki_x,x
cmp temp_px
bcs _next ;敵.x >= 当判.x
clc
adc #16+16 ;OBJの大きさ+α
cmp temp_px
bcc _next ;敵.x+α < 当判.x
off16a
sep #$20
lda teki_y,x
cmp temp_py
bcs _next
clc
adc #16+8 ;OBJの大きさ+α
cmp temp_py
bcc _next
on16a
rep #$20
;当たった敵は右に少し動くことにした
lda teki_x,x
clc
adc #8
sta teki_x,x
_next:
on16a
rep #$20
dex
dex
dex
dex
bpl _loop
_exit:
rts
------------------------------------------------------------
・とにかく遊ぼう
ダウンロードして遊んでみよう。
Netscape communicator v4.00〜4.03では、
ダウンロードしたファイルの拡張子が.lzhから.exeに化けることがあります。
改名してから展開してください。
・ダウンロード
すばんだのソース、データなど一式
すぱんだ version 0.03
...kan003.lzh(93KB)
スーパーワイルドカード(拡張子.smc)形式の実行ファイルと、
その実行ファイルを作るのに必要なソース、データ一式です。
ソースはInteligent System製アセンブラ用として記述されています。
・遊びかた
横スクロールの格闘ゲームです。
カンガルーの「かんかん」を操作して敵を倒してください。
といいたいところですが、まだ動きしか見せられません。
詳しいことは、アーカイブに同梱のkankan.docにも書いてあります。
Aボタンがパンチ、Bボタンがキックです。
レバーの右左がそれぞれ前後へ移動、レバーの上でジャンプです。
レバーの下でしゃがんで「ため」状態になり、
その状態からの攻撃は威力が大きくなります。
ジャンプも動きが大きくなり、攻撃をかわすのに使えます。
かけ算組...
koh@inetmie.or.jp