すぱんだの解説


更新日付 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