紫リンゴを見たくなったので、ちゃっくんぽっぷで遊んでみた。

紫リンゴは面クリア時に次の面で出すかどうかを判定してる。
出現条件は、6つのフルーツを取るか、3種のフルーツを取る。
で、判定部分がここ。
LD	A,(0803BH)	;B494   3A 3B 80
CP	07H			;B497   FE 07
JR	Z,0B4A2H	;B499	28 07		; フルーツを3種類とも取った?

LD	A,(08038H)	;B49B	3A 38 80
CP	06H			;B49E	FE 06
JR	C,0B4A5H	;B4A0	38 03		; 6個以上取った?

LD	A,01H		;B4A2	3E 01 		; 紫リンゴを出す
LD	B,0AFH		;B4A4	06 AF		; B4A4からならAは1、B4A5からならAは0
LD	(0803AH),A	;B4A6	32 3A 80
803Aは紫リンゴのステータスで、
0:出てない。
1:出現。
2:取った。
となってる。
B4A0でB4A5に飛ぶ事でAをクリアしているので、ここを消してしまう。

[B4A0:38 03] → [B4A0:00 00]



出た。

しかし、次の面に進むと出てくれない。orz
更に読み進めると、
LD	A,(0803AH)	;B48E	3A 3A 80
OR	A			;B491	B7
JR	NZ,0B4A5H	;B492	20 11		; 紫リンゴステータスが0でなければ出さない。
と言うのがあって、つまり今の面で紫リンゴが出ていたら次の面では出さないって処理になってる。
なので、B492の飛び先をB4A5からB4A2へ変更してしまう。

[B492:20 11] → [B492:20 0e]

これで毎回1になる…と。
更に更に、
LD		A,(0803AH)	;B456	3A 3A 80
CP		02H			;B459	FE 02
JR		NZ,0B462H	;B45B	20 05
CALL	0B9FEH		;B45D	CD FE B9	; フルーツ結果サマリーを表示するサブルーチン
JR		0B4A5H		;B460	18 43		; 次の面は出さない処理へ
となっている所があって、同様に紫リンゴを取っていると次の面では出ない。
ここも飛び先をずらしてしまう。

[B460:18 43] → [B460:18 40]

これで2面以降で必ず最初にやっつけたモンスタが紫リンゴに。(^^

フルーツになるのは良いのだけど、時間が経つと消えてしまうので、中々全部回収できない。
なので消えないようにしてしまう。
DEC	(IX+3D)		;A9FE	DD 35 03
JP	NZ,08DEEH	;AA01	C2 EE 8D
ここがフルーツの消失タイマの減算処理部分。
Zeroフラグで分岐しているので、強制ジャンプにしてしまう。

[AA01:C2 EE 8D] → [AA01::C3 EE 8D]

一応DECも消しておくか。

[A9FE:DD 35 03] → [A9FE:00 00 00]
NOP				;A9FE	00
NOP				;A9FF	00
NOP				;AA00	00
JP	08DEEH		;AA01	C3 EE 8D
これで「まいた」の許す限りゆっくり回収できる。(^^

更にゆとり化する為に、スタート時から紫リンゴを取っている事にしてみる。
LD	A,(0803AH)	;A41F	3A 3A 80
CP	02H			;A422	FE 02
JR	Z,0A44BH	;A424	28 25
A422が紫リンゴを取っていた場合のモンスタの分岐部分。
ここを
[A422:FE 02] → [A422:AF 00]
にして、必ずZeroフラグが立つようにしてやる。
すると、何をせずとも全てフルーツに。(^^



しかし、クリアした時に…



モンスタを一匹も倒さないでクリアした事になってしまい、SPECIAL BONUS扱いになってしまった。

これはこれで良いとも思うけど、紫リンゴの時のフルーツサマリーも捨て難いので他の方法を考える。
再度、この部分。
LD	A,01H		;B4A2	3E 01
最初から2にしておけば良いので

[B4A2:3E 01] → [B4A2:3E 02]



フルーツサマリーが表示されるようになった。

どのフルーツが出るかは乱数で決まるので、場合によっては得点が低い事も。
なので、全部一番点の高いぶどうにしてしまう。
どのフルーツになるかを決めている部分。
CALL	0916CH		;9834	CD 6C 91 	; 乱数取得
LD		A,L			;9837	7D 		
CALL	0C35DH		;9838	CD 5D C3 	; 0~8に丸める
INC		A			;983B	3C 			; 1~9に
LD		(081FDH),A	;983C	32 FD 81 	; 
81FDに9(ぶどう)を書けば良い。

[9838:CD 5D C3] → [9838:3E 09 00]
[983B:3C] → [983B:00]

もしくは
[9838:CD 5D C3] → [9838:3E 08 00]
で983Bはそのままでも良いか。



全部ぶどうで高得点。(^^
でも、フルーツサマリーは色々なフルーツが並んだ方が楽しいかも。



さて、今度はちゃっくんハートを出してみる。
以下は、ロード直後の状態からの改変。
LD		A,(08036H)	;9D14	3A 36 80 	
LD		HL,08037H	;9D17	21 37 80 	
CP		(HL)		;9D1A	BE 		
JR		NZ,09D21H	;9D1B	20 04 		
9D1Aで比較し、違えばハートは出さない処理になっているので、消してしまう。
因みに、8036は面開始時のスコアの百の位、8037は左爆弾で-1、右爆弾で+1される。

[9D1B:20 04] → [9D1B:00 00]

でも、もんすたを2匹以上やっつけないとここには来ないので、
1匹でも良い事にする。
LD		A,(IX+11D)	;9CE1	DD 7E 0B
CP		02H			;9CE4	FE 02 		
JR		NC,09CFBH	;9CE6	30 13 		
9CE6で2匹以上であればジャンプしているので、ここを無条件ジャンプにしてしまう。

[9CE6:30] → [9CE6:18]

本来、ハートは1面中に1個までだけど、その制限も外してみる。
LD		A,(08035H)	;9D0E	3A 35 80 	
OR		A			;9D11	B7 		
JR		NZ,09D4BH	;9D12	20 37 		
[9D12:20 37] → [9D12:00 00]



ハートが沢山。(^^
でも、これだけだと色々と弊害があるみたい。
ハートが点滅しなくなったり、音が変になったり…。



戻る