各種ゲームの固定成長化案

ここでは主に、ランダム成長を固定成長に変える処理を行います。 ランダム成長は期待値を下回るとストレスになりますし、期待値を下回るかもしれないと考える時点、つまりランダム成長である時点でストレスです。 吟味するとなると、時間がかかりますし、リセットはストレスになります。

ドラゴンクエスト3(FC)

DQ3のLVUP時のステータス上昇処理は様々な問題があります。
まず、成長倍率が0.5→1→1.5→2→0.5と推移するタイプだと中盤以降、上限値に引っかかる現象が多発しますが、意図したものなのか不明です。 上限値に引っかかることが分かっているのであれば、そのような成長倍率や基準値にはしないのではないでしょうか。高成長と1成長を繰り返すのは不自然です。 転職後のステータスが高くなるのを防ぐ為に上限値を設ける意味は分かりますが、転職しない状態でも上限値に引っかかるというのは疑問です。
また、力〜賢さの上限値がmod256であり、LVを上げると上限値に引っかかってしまいますが、意図したものなのか不明です。 高LV時に成長が鈍化するというのはよくありますし、とうにクリアレベルに達しているので影響はあまりありませんが、 成長を鈍化させるのはテーブルの設定で足りますし、成長倍率が0→1→0.5→1→2と推移するタイプは成長が鈍化しません。
標準上昇値が跳ね上がる現象はバグでしょう。

以上をまとめると、DQ4のように標準上昇値の和を上限値にするのがよいと思いますが、書き換え量が多くなるので、単に上限値を外す案も考慮します。 ただし、いずれも中盤以降上限値に引っかからないことから、ゲームバランスが大きく易化します。

( i )上限値=次LVまでの標準上昇値の和+前LV/2+13にする場合

書き換えスペースの関係と、初期値データが違うバンクにあることから、上限値=次LVまでの標準上昇値の和+前LV/2+αの形にします。 標準上昇値が基本上昇値よりも小さい序盤は変更前よりも上限値が小さくなることがありますが、中盤以降は変更前よりもステータスが高くなることから、 αはできるだけ小さくします。ただしLV1から上限値に引っかかるのはつまらないので、LV1武闘家の力が上限値に引っかからないα=13とします。

上限値=次LVまでの標準上昇値の和+前LV/2+13・標準上昇値で上がる・標準上昇値跳ね上がらない・1/2成長で1上がる
BD 00 07 48 A6 52 E8 20 07 A7 A5 04 18 69 0A 85 42 68 4A 18 65 42 A4 51 D1 40 B0 09 20 B9 C3 29 01 F0 4B D0 2C A4 11 B1 3E 85 04 A5 12 A2 04 A0 04 20 F7 A7 00 A7 07 A5 04 A2 3C 20 55 C0 A9 6E 20 7F C0 A5 3C F0 D5 A6 52 F0 02 95 54 C9 00 F0 1D

BD 00 07 A6 52 E8 20 07 A7 85 04 A4 0E B1 3C 29 7F F0 1E 85 0F B1 3E 85 07 A2 07 A0 0B A5 12 20 F7 A7 A2 0B A0 04 20 6A A8 C6 13 F0 0B C6 0F D0 F5 E6 0E D0 D6 EA EA EA 38 A5 05 D0 06 A5 04 A4 51 D1 40 A5 0B F0 02 B0 02 A9 01 A6 52 F0 02 95 54

A5 12 85 04 C6 13 F0 35

A5 13 4A 18 69 0D D0 35

(変更前)
A43B : BD 00 07		lda	$0700,x		;A=前LV
A43E : 48		pha			;
A43F : A6 52		ldx	$52		;
A441 : E8		inx			;X++ 引数(A=前LV,X=上昇ST+1,$CE=キャラ番数)
A442 : 20 07 A7		jsr	$A707		;○$04(3)=基準値=基本上昇値×前LV,$11=上昇段階,$12=基本上昇値,
A445 : A5 04		lda	$04		;
A447 : 18		clc			;
A448 : 69 0A		adc	#$0A		;
A44A : 85 42		sta	$42		;
A44C : 68		pla			;
A44D : 4A		lsr	a		;
A44E : 18		clc			;
A44F : 65 42		adc	$42		;
A451 : A4 51		ldy	$51		;
A453 : D1 40		cmp	($40),y		;上限値=基準値+0A+前LV/2 CMP 現ST
A455 : B0 09		bcs	$A460		;
 上限値に引っかかる
A457 : 20 B9 C3		jsr	$C3B9		;○A=(0-FF),(0-FF)+(0-FF)のCあり(32640/65536でC=1)
A45A : 29 01		and	#$01		;
A45C : F0 4B		beq	$A4A9		;

A45E : D0 2C		bne	$A48C		;
 上限値に引っかからない
A460 : A4 11		ldy	$11		;Y=上昇段階
A462 : B1 3E		lda	($3E),y		;A=成長倍率
A464 : 85 04		sta	$04		;
A466 : A5 12		lda	$12		;
A468 : A2 04		ldx	#$04		;
A46A : A0 04		ldy	#$04		;
A46C : 20 F7 A7		jsr	$A7F7		;○$04(3)=標準上昇値(切捨て),(Y)(3)=A*(X)(3)>>4
基準値の上位8bitがクリアされていないために標準上昇値が#$42になる(基本上昇値4,倍率8の場合)

A46F : 00		brk			;$3C=8+(0-31)*16-128 値域は(0-255) ※打撃は16+(0-15)*32-128型
A470 : A7		db	#$A7		;
A471 : 07		db	#$07		;
A472 : A5 04		lda	$04		;
A474 : A2 3C		ldx	#$3C		;
A476 : 20 55 C0		jsr	$C055		;○3C(2)=(X)*A
A479 : A9 6E		lda	#$6E		;平均128,分母は110
A47B : 20 7F C0		jsr	$C07F		;○3C=3C(2)/A
A47E : A5 3C		lda	$3C		;
A480 : F0 D5		beq	$A457		;上昇値0の時は1/2で1上がるがHPやMPは増えない

A482 : A6 52		ldx	$52		;
A484 : F0 02		beq	$A488		;
 力以外
A486 : 95 54		sta	$54,x		;通常成長の場合、$54,X=上昇値
A488 : C9 00		cmp	#$00		;
A48A : F0 1D		beq	$A4A9		;
→(変更後)
A43B : BD 00 07		lda	$0700,x		;A=前LV
A43E : A6 52		ldx	$52		;X=ST種類
A440 : E8		inx			;X++ 引数(A=前LV,X=上昇ST+1,$CE=キャラ番数)
A441 : 20 07 A7		jsr	$A707		;○A=前LV/2+13,$04-$0E=0,$11=閾値段階,$12=基本上昇値,$13=前LV,
A444 : 85 04		sta	$04		;$04(2)=上限値
以下ループ
A446 : A4 0E		ldy	$0E		;Y=0
A448 : B1 3C		lda	($3C),y		;82 20 0A 80 FF LV閾値
A44A : 29 7F		and	#$7F		;
A44C : F0 1E		beq	$A46C		;

A44E : 85 0F		sta	$0F		;$0F=02 20 0A 00 7F
A450 : B1 3E		lda	($3E),y		;
A452 : 85 07		sta	$07		;$07=成長倍率
A454 : A2 07		ldx	#$07		;
A456 : A0 0B		ldy	#$0B		;
A458 : A5 12		lda	$12		;A=基本上昇値0-F
A45A : 20 F7 A7		jsr	$A7F7		;○(Y)(3)=A*(X)(3)>>4,$0B=標準上昇値
A45D : A2 0B		ldx	#$0B		;
A45F : A0 04		ldy	#$04		;
 以下ループ
A461 : 20 6A A8		jsr	$A86A		;○(Y)(3)=(Y)(3)+(X)(3),X=X,Y=Y,$04(3)上限値+=標準上昇値
A464 : C6 13		dec	$13		;$13=前LV--
A466 : F0 0B		beq	$A473		;

A468 : C6 0F		dec	$0F		;間LV数
A46A : D0 F5		bne	$A461		;
 以上ループ
A46C : E6 0E		inc	$0E		;$0E++段階
A46E : D0 D6		bne	$A446		;
以上ループ
A470 : EA		nop			;
A471 : EA		nop			;
A472 : EA		nop			;
A473 : 38		sec			;
A474 : A5 05		lda	$05		;
A476 : D0 06		bne	$A47E		;(上限値>=256の場合リミットなし)

A478 : A5 04		lda	$04		;
A47A : A4 51		ldy	$51		;
A47C : D1 40		cmp 	($40),y		;上限値 CMP 現ST
A47E : A5 0B		lda	$0B		;
A480 : F0 02		beq	$A484		;
A482 : B0 02		bcs	$A486		;
 上限値に引っかかる・上昇値0
A484 : A9 01		lda	#$01		;
A486 : A6 52		ldx	$52		;
A488 : F0 02		beq	$A48C		;
 力以外
A48A : 95 54		sta	$54,x		;通常成長の場合、$54,X=上昇値

(変更前)
 STのみ
A798 : A5 12		lda	$12		;
A79A : 85 04		sta	$04		;$04=基本上昇値
A79C : C6 13		dec	$13		;$13--前LV
A79E : F0 35		beq	$A7D5		;
→(変更後)
 STのみ
A798 : A5 13		lda	$13		;A=前LV
A79A : 4A		lsr	a		;
A79B : 18		clc			;
A79C : 69 0D		adc	#$0D		;
A79E : D0 35		bne	$A7D5		;前LV/2+13が戻るようにします。

( ii )単に上限値を外す場合

標準上昇値で上がる(乱数値110)
20 F7 A7 00 A7 07
→
20 F7 A7 A9 6E EA

力〜賢さ上限値に引っかからない・標準上昇値跳ね上がらない
65 42 A4 51 D1 40
→
A9 00 85 05 38 38

1/2成長で1上がる
20 B9 C3 29 01 F0 4B
→
20 B9 C3 A9 01 F0 4B

( iii )共通

HP上限値に引っかからない
BD 25 07 C5 05 90 14
→
BD 25 07 18 18 90 14

HP-2〜+2の乱数値0
69 FE 18 65 56
→
A9 00 18 65 56

MP上限値に引っかからない
BD 35 07 C5 05 90 14
→
BD 35 07 18 18 90 14

MP-2〜+2の乱数値0
69 FE 18 65 58
→
A9 00 18 65 58

ランダム呪文習得は転職時にリセットの原因になりますので、必ず習得できるようにします。
ランダム初期値も吟味要素なので固定値にします。
種や木の実はRTA等でない場合、最大値が出るまでセーブしてリセットが多いと思いますので、最大値固定にします。

呪文必ず習得(賢さ系)
30 06 88 C9 19 90 01
→
EA EA 88 C9 19 EA EA

呪文必ず習得(ランダム系)
20 B9 C3 29 08
→
20 B9 C3 A9 08

勇者のランダム初期値全て+1
20 B9 C3 29 01 F0 09
→
20 B9 C3 A9 01 F0 09

仲間のボーナス回数6回
A9 05 00 7C 07 18 69 02
→
A9 04 EA EA EA 18 69 02

仲間のボーナスステータス固定(XX=00力,01素早さ,02=体力,03=運,04=賢さ,05以上=力)
A9 05 00 7C 07 C9 05
→
A9 XX EA EA EA C9 05

力〜スタミナの種最大値(移動中と戦闘中の2つあり)
20 B9 C3 29 01 69 01
→
EA EA EA 18 18 A9 03

命の木の実最大値(移動中と戦闘中の2つあり)
20 B9 C3 29 03 18 69 02
→
20 B9 C3 A9 03 18 69 02


ドラゴンクエスト3(SFC)

標準上昇値で上がる(乱数値128)
22 57 14 C0 22 B4 10 C0
→
A9 80 00 EA 22 B4 10 C0

HP・MP乱数部最大
A9 19 00 22 3E 13 C0
→
A9 19 00 EA EA EA EA

1/2成長で1上がる
29 FF 00 60 22 D1 12 C0 29 01 00
→
29 FF 00 60 22 D1 12 C0 A9 01 00

賢さ系呪文必ず習得
AE 80 40 F0 14
→
A2 01 00 F0 14

ランダム系呪文必ず習得
22 D1 12 C0 4A B0 D0
→
22 D1 12 C0 38 B0 D0

勇者のランダム初期値全て+1
A3 07 AA 22 D1 12 C0 29 01 00
→
A3 07 AA 22 D1 12 C0 A9 01 00

種最大値(5バイトずつ力、素早さ、スタミナ、ラック、賢さ、命の木の実、不思議な木の実の順)
01 04 30 C0 00 01 04 30 C0 00 01 04 30 C0 00 01 04 30 C0 00 01 04 30 C0 00 02 08 50 40 01 02 08 30 C0 00
→
01 0C 30 C0 00 01 0C 30 C0 00 01 0C 30 C0 00 01 0C 30 C0 00 01 0C 30 C0 00 02 14 50 40 01 02 0C 30 C0 00

種を全て最大値にすると、仲間の性格吟味が難しくなるので、下記の仲間のボーナス回数X回と一種のSTのみボーナスを使います。 セクシーギャル作成時は体力ボーナス2回とし、各ステータスに1回ずつ種を使います。

仲間のボーナス回数X回
20 EE 44 5A F4 4C 43
→
A0 0X 00 5A F4 4C 43

一種のSTのみボーナス(00=力,01=素早さ,02=体力,03=賢さ,04=運)
F4 4C 43 A9 04 00 22 3E 13 C0
→
F4 4C 43 A9 04 00 A9 XX 00 EA


ドラゴンクエスト4(FC)

馬車メンバーに経験値が入らないダンジョンでは、経験値がもったいなく感じ、戦闘を楽しめないので、馬車メンバーにも常時経験値が入るようにします。

標準上昇値で上がる(乱数値121)
A5 8A 20 27 C8 A9 79
→
A9 79 20 27 C8 A9 79

馬車メンバー常時利用可
A0 12 20 98 84
→
A0 12 38 38 38

力・素早さ・ラックの種最大値
20 20 B5 69 01
→
A9 02 18 69 01

命の木の実最大値
20 20 B5 69 04
→
A9 02 18 69 04

不思議な木の実最大値
20 20 B5 69 03
→
A9 02 18 69 03


ドラゴンクエスト5(SFC)

固定成長にも関わらず、LVUP時に上限値があります。ゴレムスの素早さやジュエルの賢さを上げる際や、素早さを抑制する際は使えますが、 やはり星降る腕輪を使えない点、特に序盤に種を自由に使えない点を考慮すると、上限値がない方がメリットが大きいため、DQ6以降同様、上限値を外します。
複数種類の敵を倒すと、ドロップしないバグは、1113(最後に消滅した敵ID,初期値FF)や1118(一体でも倒したら1?,倒してなければFF)、 111A(倒した敵の数?,FF=0体,1=1体,2=2体,…)でもよいと思いますが、111B(一体でも倒したら0,倒してなければFF)にします。
HPが2047になるとHPが減らないバグは、確実な回避方法がなく、発生率がそこそこあり、致命的で、すぐに気付かないので修正します。

LVUPでの上限値なし
D9 95 09 90 0D
→
D9 95 09 80 0D

複数種類でもドロップする
AD 16 11 C9 FF D0 03
→
AD 1B 11 C9 FF D0 03

HP2047バグ修正
A5 46 C9 FF 07 E2 20 D0 D6
→
A5 46 C9 FF 07 E2 20 80 D6

馬車メンバー常時利用可(制限ダンジョンに入る時、現在人数を外人数にする処理をスキップ)
AD 1E 20 8D 1D 20
→
AD 1D 20 8D 1D 20

馬車メンバー常時利用可(制限ダンジョンで仲間が増える時、現在人数を外人数にする処理をスキップ)
AF 1E 20 7E 8F 1D 20 7E
→
AF 1D 20 7E 8F 1D 20 7E

力・素早さ・賢さの種最大値
A9 03 22 3A 95 00 1A
→
A9 03 A9 02 EA EA 1A

命の木の実最大値
A9 03 22 3A 95 00 18 69 04
→
A9 03 A9 02 EA EA 18 69 04

不思議な木の実最大値
A9 03 22 3A 95 00 18 69 03
→
A9 03 A9 02 EA EA 18 69 03


ドラゴンクエスト6(SFC)

力・素早さ・賢さの種最大値(3か所あり)
A2 01 00 A0 03 00
→
A2 03 00 A0 03 00

守りの種・不思議な木の実最大値(2か所あり)
A2 03 00 A0 05 00
→
A2 05 00 A0 05 00

命の木の実最大値
A2 04 00 A0 06 00
→
A2 06 00 A0 06 00


ファイナルファンタジー1(FC)

HP大成長25
A9 14 A2 19
→
A9 19 A2 19

1/4成長が必ず上昇
29 03 F0 F5 A9 00
→
29 00 F0 F5 A9 00


ファイナルファンタジー3(FC)

乱数を固定するだけなら下記の変更でできます。

HP最大成長
85 24 4A 20 64 A5
→
85 24 4A EA EA EA

ただし、HP成長値がジョブによって違うと、HP成長が低いジョブを使いにくいので、ジョブによらず固定成長にします。 LV*3+5付近がよいと思われますが、下記の表を見ると、LV*3.25+5が妥当かと思います。乱数は平均値です。

LV/HP最大最小3モ15ナ35魔人3白35導LV*3.5+5LV*3.375+5LV*3.25+5LV*3.125+5LV*3+5
10234171228190232225220214212
20839494745608787760737713697
30180810391574126516921632158015241482
40307717982727228629472842274726472567
50464627764226369645524390424040843952
HP9999LV769678829388787981
HP成長LV*3.25+5
20 88 9B B1 57 85 24 4A 20 64 A5 18 65 24 85 24 A4 5F C8 B1 57 0A 18 65 24
→
20 88 9B A4 5F C8 B1 57 4A 4A 85 24 B1 57 0A 18 71 57 18 69 05 18 65 24 EA

BEC7 : 20 88 9B		jsr	$9B88		;○A=Y=A+$5F
BECA : B1 57		lda	($57),y		;A=体力
BECC : 85 24		sta	$24		;$24=体力
BECE : 4A		lsr	a		;
BECF : 20 64 A5		jsr	$A564		;○A=0〜Aの乱数
BED2 : 18		clc			;
BED3 : 65 24		adc	$24		;
BED5 : 85 24		sta	$24		;$24=(0〜体力)/2+体力
BED7 : A4 5F		ldy	$5F		;
BED9 : C8		iny			;
BEDA : B1 57		lda	($57),y		;A=LV(後LVだが、LV1=0なので前LVと同値)
BEDC : 0A		asl	a		;
BEDD : 18		clc			;
BEDE : 65 24		adc	$24		;
BEE0 : 85 24		sta	$24		;$24=LV*2+(0〜体力)/2+体力
→
BEC7 : 20 88 9B		jsr	$9B88		;○A=Y=A+$5F
BECA : A4 5F		ldy	$5F		;
BECC : C8		iny			;
BECD : B1 57		lda	($57),y		;A=LV(後LVだが、LV1=0なので前LVと同値)
BECF : 4A		lsr	a		;
BED0 : 4A		lsr	a		;
BED1 : 85 24		sta	$24		;$24=LV/4
BED3 : B1 57		lda	($57),y		;A=LV(後LVだが、LV1=0なので前LVと同値)
BED5 : 0A		asl	a		;
BED6 : 18		clc			;
BED7 : 71 57 		adc	($57),y		;
BED9 : 18		clc			;
BEDA : 69 05		adc	#$05		;
BEDC : 18		clc			;
BEDD : 65 24		adc	$24		;
BEDF : EA               nop                     ;
BEE0 : 85 24		sta	$24		;$24=LV*3.25+5


ファイナルファンタジー4(SFC)

HPとMP最大成長
20 85 84 20 79 83
→
20 85 84 EA EA EA


ヘラクレスの栄光3(SFC)

MP最大成長
B9 C3 C0 20 0D 81
→
B9 C3 C0 3A 85 3F

HP最大成長
B9 C1 C0 20 0D 81
→
B9 C1 C0 3A 85 3F

力・知性・素早さ最大成長
20 E9 C0 85 19
→
A9 04 EA 85 19


ブレスオブファイア1(SFC)

ステータス最大成長(+1)
29 03 3A C9 02
→
A9 03 3A C9 02

フリーマーケットの低確率アイテムはこのゲームのやる気をなくす最大要素ですので、確率を変更します。 変更方法はテーブル自体の変更でよいでしょう。 2バイト×13種類ありますので入れ替えて下さい。左が低確率アイテムです。

フリーマーケット第一段階
20 21 1A 11 47 11 25 01 51 11 52 21 14 11 03 21 26 01 23 01 50 01 21 01 7B 01
第二段階
38 11 4C 11 20 21 65 21 19 11 25 01 5D 21 20 01 26 01 23 01 48 01 21 01 7B 01
第三段階
26 11 5A 11 2F 11 1D 11 16 21 53 21 5D 21 4D 01 20 01 23 01 26 01 7E 01 7B 01

戻る トップへ戻る