乱数
FC 版 DQ4 の 8 bit 乱数生成器は、16 bit 乱数生成器と 8 bit 乱数生成器(乱数生成回数)を組み合わせたものとなっており、以下のコード中の next() の処理と等価です。
参考: FC 版 DQ3、SFC 版 DQ5 も同一の 8 bit 乱数生成器を用いています。
struct DQ4FCRng {
DQ4FCRng(uint16_t x=0, uint8_t c=0) : x(x), c(c) {}
uint8_t next() {
uint32_t t = x ^ 0xffff;
for (int i = 0; i < 16; ++i) {
t <<= 1;
if (t & 0x10000) t ^= 0x11021;
}
x = t;
c += 1;
return (x + c) & 0xff;
}
uint16_t x;
uint8_t c;
};
(別箇所での乱数更新処理を考慮しない場合の)周期は以下となっており、いずれの状態でも乱数値 0〜255 は均等の頻度で出現します:
- x が (0x5FEA または 0xAFF5) ではない場合: 8388608
- x が 0x5FEA または 0xAFF5 の場合: 256
DQ4 では CPU がフレーム経過待ち状態となっている間は以下の処理が行われているため、乱数周期が極端に短い状態(x が 0x5FEA または 0xAFF5 の状態)を保ち続けることはありません。
;---------------------------------
; フレーム経過待ち状態での乱数更新処理
;---------------------------------
FF74 [3FF74] AD 0C 05 LDA $050C ; フレームカウンタ
FF77 [3FF77] EA NOP
FF78 [3FF78] EA NOP
FF79 [3FF79] E6 12 INC $12 ; (x の下位 8 bit) += 1 (繰り上がりは考慮しない)
FF7B [3FF7B] CD 0C 05 CMP $050C
FF7E [3FF7E] F0 F7 BEQ $FF77 ; 1 フレーム経過するまで更新し続ける
...
多くの場合、乱数 0〜(n-1) は (生成された 8 bit 乱数)×n/256 によって取得されます。
ソース
|
+
|
... |
;---------------------------------
; 8 bit 乱数取得処理
;---------------------------------
C891 [3C891] 98 TYA
C892 [3C892] 48 PHA
C893 [3C893] A9 FF LDA #$FF
C895 [3C895] 85 16 STA $16
C897 [3C897] 20 AD C8 JSR $C8AD
C89A [3C89A] A9 FF LDA #$FF
C89C [3C89C] 85 16 STA $16
C89E [3C89E] 20 AD C8 JSR $C8AD
C8A1 [3C8A1] EE 0D 05 INC $050D
C8A4 [3C8A4] 68 PLA
C8A5 [3C8A5] A8 TAY
C8A6 [3C8A6] A5 12 LDA $12 ; x 下位 8 bit
C8A8 [3C8A8] 18 CLC
C8A9 [3C8A9] 6D 0D 05 ADC $050D ; c
C8AC [3C8AC] 60 RTS
;---------------------------------
; F_2 係数 多項式剰余処理
;---------------------------------
C8AD [3C8AD] A0 08 LDY #$08
C8AF [3C8AF] A5 13 LDA $13
C8B1 [3C8B1] 45 16 EOR $16
C8B3 [3C8B3] 06 12 ASL $12
C8B5 [3C8B5] 26 13 ROL $13
C8B7 [3C8B7] 06 16 ASL $16
C8B9 [3C8B9] 0A ASL A
C8BA [3C8BA] 90 0C BCC $C8C8
C8BC [3C8BC] A5 12 LDA $12
C8BE [3C8BE] 49 21 EOR #$21
C8C0 [3C8C0] 85 12 STA $12
C8C2 [3C8C2] A5 13 LDA $13
C8C4 [3C8C4] 49 10 EOR #$10
C8C6 [3C8C6] 85 13 STA $13
C8C8 [3C8C8] 88 DEY
C8C9 [3C8C9] D0 E4 BNE $C8AF
C8CB [3C8CB] 60 RTS
|
呪文命中率
モンスター側 対象の場合
| 行動 |
耐性なし(×) |
弱耐性(△) |
強耐性(○) |
完全耐性(◎) |
| ラリホーマ・ルカニ |
100.0 % (256/256) |
100.0 % (256/256) |
69.9 % (179/256) |
0.0 % (0/256) |
| その他 |
100.0 % (256/256) |
84.8 % (217/256) |
40.2 % (103/256) |
0.0 % (0/256) |
ラリホーマ・ルカニ (ちからため後) |
100.0 % (256/256) |
100.0 % (256/256) |
100.0 % (256/256) |
0.0 % (0/256) |
その他 (ちからため後) |
100.0 % (256/256) |
100.0 % (256/256) |
80.1 % (205/256) |
0.0 % (0/256) |
味方側 対象の場合
| 行動 ID |
行動名 |
命中率(通常時) |
命中率(ちからため後) |
| 19 |
ザキ |
37.9 % (97/256) |
75.4 % (193/256) |
| 20 |
ザラキ |
37.9 % (97/256) |
75.4 % (193/256) |
| 23 |
ラリホー |
37.9 % (97/256) |
75.4 % (193/256) |
| 24 |
ラリホーマ |
75.4 % (193/256) |
100.0 % (256/256) |
| 25 |
マホトーン |
37.9 % (97/256) |
75.4 % (193/256) |
| 26 |
マヌーサ |
62.9 % (161/256) |
100.0 % (256/256) |
| 27 |
メダパニ |
25.4 % (65/256) |
50.4 % (129/256) |
| 31 |
ルカニ |
75.4 % (193/256) |
100.0 % (256/256) |
| 32 |
ルカナン |
75.4 % (193/256) |
100.0 % (256/256) |
| 83 |
あまいいき |
37.9 % (97/256) |
75.4 % (193/256) |
| 84 |
どくのいき |
37.9 % (97/256) |
75.4 % (193/256) |
| 85 |
やけつくいき |
12.9 % (33/256) |
25.4 % (65/256) |
| 86 |
おたけび |
37.9 % (97/256) |
75.4 % (193/256) |
| 115 |
まどろみのけん (敵 使用) |
37.9 % (97/256) |
75.4 % (193/256) |
補足:
- 「てんくうのよろい」を装備している場合、即死・混乱 を確率 128/256 で回避します。
- 「きんのかみかざり」を装備している場合、混乱 を確率 85/256 で回避します。(「てんくうのよろい」の効果とは重複せず、「てんくうのよろい」による回避処理が優先されます)
ソース
|
+
|
... |
;------------------------------------
; 命中判定
;------------------------------------
B718 [4F718] 20 6B B6 JSR $B66B ; A ← (命中値)
B71B [4F71B] 85 00 STA $00
B71D [4F71D] A5 00 LDA $00
B71F [4F71F] F0 09 BEQ $B72A ; 命中値が 0 の場合は命中しない
B721 [4F721] 00 1B 0F BRK ; A ← 乱数 0〜255
B724 [4F724] C5 00 CMP $00
B726 [4F726] F0 04 BEQ $B72C
B728 [4F728] 90 02 BCC $B72C
B72A [4F72A] 18 CLC
B72B [4F72B] 60 RTS
B72C [4F72C] 38 SEC ; (乱数値) <= (命中値) の場合
B72D [4F72D] 60 RTS
;------------------------------------
; 命中値 取得
;------------------------------------
B66B [4F66B] AD E7 72 LDA $72E7
B66E [4F66E] 29 02 AND #$02
B670 [4F670] AD E9 72 LDA $72E9
B673 [4F673] 30 05 BMI $B67A
B675 [4F675] 00 0E 1F BRK
B678 [4F678] 30 4F BMI $B6C9
B67A [4F67A] 00 03 1F BRK
B67D [4F67D] AA TAX ; 行動 ID
B67E [4F67E] AD 63 73 LDA $7363 ; 対象
B681 [4F681] 30 10 BMI $B693 ; 対象がモンスターの場合
; 味方側 対象
B683 [4F683] BD 0B B8 LDA $B80B,X
B686 [4F686] 29 E0 AND #$E0
B688 [4F688] C9 E0 CMP #$E0
B68A [4F68A] F0 3D BEQ $B6C9
B68C [4F68C] 20 CB B6 JSR $B6CB
B68F [4F68F] 20 DD B6 JSR $B6DD ; (何もしない)
B692 [4F692] 60 RTS
;
; モンスター 対象
;
B693 [4F693] BD 0B B8 LDA $B80B,X
B696 [4F696] 29 1F AND #$1F
B698 [4F698] AA TAX
B699 [4F699] BD 36 B7 LDA $B736,X
B69C [4F69C] E0 10 CPX #$10
B69E [4F69E] B0 2B BCS $B6CB
B6A0 [4F6A0] 48 PHA
B6A1 [4F6A1] AD 63 73 LDA $7363
B6A4 [4F6A4] 29 07 AND #$07
B6A6 [4F6A6] AA TAX
B6A7 [4F6A7] 68 PLA
B6A8 [4F6A8] 00 22 B3 BRK ; A ← 耐性値(0〜3)
B6AB [4F6AB] 48 PHA
B6AC [4F6AC] 00 03 1F BRK ; A ← 行動 ID
B6AF [4F6AF] A2 00 LDX #$00
B6B1 [4F6B1] C9 18 CMP #$18 ; 0x18: ラリホーマ
B6B3 [4F6B3] F0 04 BEQ $B6B9
B6B5 [4F6B5] C9 1F CMP #$1F ; 0x1f: ルカニ
B6B7 [4F6B7] D0 02 BNE $B6BB
B6B9 [4F6B9] A2 04 LDX #$04
B6BB [4F6BB] 86 00 STX $00
B6BD [4F6BD] 68 PLA
B6BE [4F6BE] 18 CLC
B6BF [4F6BF] 65 00 ADC $00
B6C1 [4F6C1] AA TAX
B6C2 [4F6C2] BD 03 B8 LDA $B803,X
B6C5 [4F6C5] 20 CB B6 JSR $B6CB
B6C8 [4F6C8] 60 RTS
B6C9 [4F6C9] A9 FF LDA #$FF
B6CB [4F6CB] 85 00 STA $00 ; $00 ← (命中値)
B6CD [4F6CD] 00 0D 1F BRK ; ちからため状態の場合は C = 1 となる (?)
B6D0 [4F6D0] 90 08 BCC $B6DA
B6D2 [4F6D2] 06 00 ASL $00 ; 命中値 2 倍
B6D4 [4F6D4] 90 04 BCC $B6DA
B6D6 [4F6D6] A9 FF LDA #$FF
B6D8 [4F6D8] 85 00 STA $00
B6DA [4F6DA] A5 00 LDA $00
B6DC [4F6DC] 60 RTS
B803 [4F803] FF D8 66 00 FF FF B2 00
B80B [4F80B] E2 E2 E2 E1 E1 E1 E0 E0 E0 E5 E5 E5 E5 E4 E4 E4
E3 E3 E3 68 68 EE E9 67 C7 6B A6 4C EA F2 F2 CD
CD F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2
F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2
F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 72 E1 E1 E1
E5 E5 E5 67 72 31 67 F2 F2 F2 F2 F2 F2 F2 F2 F2
F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2
F2 F2 F2 67 E1 F2 F2 EB 67 F2 67 F2 F2 F2 F2 F2
F2 F2 F2 E1 E4 67 E1 E5 6B E0 ED F2 F2 67 E1 F2
28 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 E9 EB F2 F2
F2 F2 F2 F2 F2 F2 F2 F2 66 F2 EC F2 F2 F2 F2 F2
F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2
F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2
F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2
F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2 F2
F2 F2 F2 F2 F2 F2 F2 F2 92 09 F2 F2 F2 E6 F2 F2
;------------------------------------
; 即死攻撃(少なくともザキ・ザラキは該当する)
;------------------------------------
9AFC [45AFC] 00 07 1F BRK
9AFF [45AFF] 90 18 BCC $9B19
9B01 [45B01] 8A TXA
9B02 [45B02] 48 PHA
9B03 [45B03] 20 CC BE JSR $BECC
9B06 [45B06] 9E DB $9E
9B07 [45B07] 68 PLA
9B08 [45B08] AA TAX
9B09 [45B09] 20 E3 91 JSR $91E3
9B0C [45B0C] 00 1A 2F BRK
9B0F [45B0F] B0 07 BCS $9B18
9B11 [45B11] 00 E6 D3 01 BRK
9B15 [45B15] 00 23 2F BRK
9B18 [45B18] 60 RTS
;
9B19 [45B19] 50 53 BVC $9B6E
9B1B [45B1B] 00 3B 93 01 BRK
9B1F [45B1F] 90 0B BCC $9B2C ; 鎧を装備していない場合
9B21 [45B21] C9 B7 CMP #$B7
9B23 [45B23] D0 07 BNE $9B2C ; 「てんくうのよろい」を装備していない場合
9B25 [45B25] 00 1B 0F BRK ; A ← 乱数 0〜255
9B28 [45B28] C9 80 CMP #$80
9B2A [45B2A] 90 0F BCC $9B3B
9B2C [45B2C] 20 62 92 JSR $9262
9B2F [45B2F] 20 CC BE JSR $BECC
9B32 [45B32] 9E DB $9E
9B33 [45B33] 00 E6 D3 02 BRK
9B37 [45B37] 00 23 2F BRK
9B3A [45B3A] 60 RTS
; 効かなかった場合
9B3B [45B3B] 00 E6 D3 03 BRK
9B3F [45B3F] 00 23 2F BRK
9B42 [45B42] 60 RTS
;------------------------------------
; 混乱攻撃(少なくともメダパニは該当する)
;------------------------------------
9CC1 [45CC1] 00 07 1F BRK
9CC4 [45CC4] B0 21 BCS $9CE7
9CC6 [45CC6] A0 80 LDY #$80
9CC8 [45CC8] 00 3B 93 01 BRK
9CCC [45CCC] 90 04 BCC $9CD2 ; 鎧を装備していない場合
9CCE [45CCE] C9 B7 CMP #$B7
9CD0 [45CD0] F0 0C BEQ $9CDE ; 「てんくうのよろい」を装備している場合
9CD2 [45CD2] 00 3B 93 03 BRK
9CD6 [45CD6] 90 0F BCC $9CE7 ; 兜を装備していない場合
9CD8 [45CD8] C9 CD CMP #$CD
9CDA [45CDA] D0 0B BNE $9CE7
9CDC [45CDC] A0 55 LDY #$55 ; 「きんのかみかざり」を装備している場合
9CDE [45CDE] 84 00 STY $00
9CE0 [45CE0] 00 1B 0F BRK ; A ← 乱数 0〜255
9CE3 [45CE3] C5 00 CMP $00
9CE5 [45CE5] 90 07 BCC $9CEE
9CE7 [45CE7] A9 12 LDA #$12
9CE9 [45CE9] A2 02 LDX #$02
9CEB [45CEB] 4C 3F 9D JMP $9D3F
; 効かなかった場合
9CEE [45CEE] 00 E6 D3 03 BRK
9CF2 [45CF2] 60 RTS
|
敵の初期 HP
| 条件 |
初期 HP |
| 0 ≤ MHP ≤ 1019 |
MHP - (乱数 0〜⌊MHP/4⌋) |
| 1020 ≤ MHP ≤ 1022 |
確率 1/2: MHP - 256 確率 1/2: MHP - (乱数 0〜255) |
| MHP = 1023 |
1200 |
ソース
|
+
|
... |
;------------------------------------------------
; A ← A × (乱数 0〜255) / 256
;------------------------------------------------
A1F6 [421F6] 85 8A STA $8A
A1F8 [421F8] A9 00 LDA #$00
A1FA [421FA] 85 8B STA $8B
A1FC [421FC] 8A TXA
A1FD [421FD] 48 PHA
A1FE [421FE] 20 74 A2 JSR $A274
A201 [42201] A2 8A LDX #$8A
A203 [42203] 20 27 C8 JSR $C827
A206 [42206] 68 PLA
A207 [42207] AA TAX
A208 [42208] A5 8B LDA $8B
A20A [4220A] 60 RTS
;------------------------------------------------
; 16-bit 乱数の取得(注意: 必ずしも一様ではない)
;
; [In/Out]
; - $00,X: 変動幅 (16-bit)
;------------------------------------------------
A20B [4220B] B5 01 LDA $01,X
A20D [4220D] D0 08 BNE $A217
; < 256 の場合
A20F [4220F] B5 00 LDA $00,X
A211 [42211] 20 F6 A1 JSR $A1F6
A214 [42214] 95 00 STA $00,X
A216 [42216] 60 RTS
; >= 256 の場合
A217 [42217] B5 01 LDA $01,X
A219 [42219] 18 CLC
A21A [4221A] 69 01 ADC #$01
A21C [4221C] 20 F6 A1 JSR $A1F6
A21F [4221F] D5 01 CMP $01,X
A221 [42221] F0 08 BEQ $A22B
A223 [42223] 95 01 STA $01,X
A225 [42225] 20 74 A2 JSR $A274 ; A ← 乱数 0〜255
A228 [42228] 95 00 STA $00,X
A22A [4222A] 60 RTS
A22B [4222B] B5 00 LDA $00,X
A22D [4222D] C9 FF CMP #$FF
A22F [4222F] F0 F4 BEQ $A225
A231 [42231] 69 01 ADC #$01
A233 [42233] 20 F6 A1 JSR $A1F6
A236 [42236] 95 00 STA $00,X
A238 [42238] 60 RTS
A274 [42274] 4C 91 C8 JMP $C891
;------------------------------------------------
; 敵の 初期 HP
;------------------------------------------------
...
A4CD [424CD] A5 7E LDA $7E
A4CF [424CF] 85 00 STA $00
A4D1 [424D1] C9 FF CMP #$FF
A4D3 [424D3] D0 0E BNE $A4E3
A4D5 [424D5] A5 7F LDA $7F
A4D7 [424D7] C9 03 CMP #$03
A4D9 [424D9] D0 08 BNE $A4E3
A4DB [424DB] A9 B0 LDA #$B0
A4DD [424DD] 85 7E STA $7E
A4DF [424DF] A9 04 LDA #$04
A4E1 [424E1] D0 33 BNE $A516
A4E3 [424E3] AD 44 6E LDA $6E44
A4E6 [424E6] 30 30 BMI $A518
A4E8 [424E8] A5 7F LDA $7F
A4EA [424EA] 85 01 STA $01
A4EC [424EC] 46 01 LSR $01
A4EE [424EE] 66 00 ROR $00
A4F0 [424F0] 46 01 LSR $01
A4F2 [424F2] 66 00 ROR $00
A4F4 [424F4] E6 00 INC $00
A4F6 [424F6] D0 02 BNE $A4FA
A4F8 [424F8] E6 01 INC $01
A4FA [424FA] A2 00 LDX #$00
A4FC [424FC] A5 8A LDA $8A
A4FE [424FE] 48 PHA
A4FF [424FF] A5 8B LDA $8B
A501 [42501] 48 PHA
A502 [42502] 00 18 0F
A505 [42505] 68 PLA
A506 [42506] 85 8B STA $8B
A508 [42508] 68 PLA
A509 [42509] 85 8A STA $8A
A50B [4250B] A5 7E LDA $7E
A50D [4250D] 38 SEC
A50E [4250E] E5 00 SBC $00
A510 [42510] 85 7E STA $7E
A512 [42512] A5 7F LDA $7F
A514 [42514] E5 01 SBC $01
A516 [42516] 85 7F STA $7F
...
|
行動順
行動順は A := (すばやさ) とするとき、⌊A/4⌋ + ⌊(A - ⌊A/4⌋) × (乱数 0〜255) / 256⌋ の大小によって決定されます。
同じ値を取った場合、味方キャラクター 1, ..., 味方キャラクター 4, 敵モンスター 1, ..., 敵モンスター 8 の順で優先されます。
ソース
|
+
|
... |
;------------------------------------------------
; 行動順
;------------------------------------------------
BE50 [47E50] A2 00 LDX #$00
BE52 [47E52] 86 0F STX $0F
BE54 [47E54] BD F4 72 LDA $72F4,X
BE57 [47E57] 29 70 AND #$70
BE59 [47E59] C9 70 CMP #$70
BE5B [47E5B] F0 2C BEQ $BE89
BE5D [47E5D] BD F4 72 LDA $72F4,X
BE60 [47E60] 30 0C BMI $BE6E
BE62 [47E62] 29 0F AND #$0F
BE64 [47E64] 00 67 73
BE67 [47E67] AA TAX
BE68 [47E68] 00 14 53
BE6B [47E6B] 4C 74 BE JMP $BE74
BE6E [47E6E] 29 0F AND #$0F
BE70 [47E70] AA TAX
BE71 [47E71] 00 0E B3
BE74 [47E74] 85 00 STA $00
BE76 [47E76] 4A LSR A
BE77 [47E77] 4A LSR A
BE78 [47E78] 85 01 STA $01
BE7A [47E7A] A5 00 LDA $00
BE7C [47E7C] 38 SEC
BE7D [47E7D] E5 01 SBC $01
BE7F [47E7F] 00 17 0F ; A ← 乱数 0〜(A-1)
BE82 [47E82] 18 CLC
BE83 [47E83] 65 01 ADC $01
BE85 [47E85] A6 0F LDX $0F
BE87 [47E87] 95 02 STA $02,X
BE89 [47E89] BD 48 73 LDA $7348,X
BE8C [47E8C] 09 0F ORA #$0F
BE8E [47E8E] 9D 48 73 STA $7348,X
BE91 [47E91] E8 INX
BE92 [47E92] 86 0F STX $0F
BE94 [47E94] E0 0C CPX #$0C
BE96 [47E96] D0 BC BNE $BE54
BE98 [47E98] A0 00 LDY #$00
BE9A [47E9A] A9 00 LDA #$00
BE9C [47E9C] 85 0E STA $0E
BE9E [47E9E] A2 0B LDX #$0B ; 後ろから処理
BEA0 [47EA0] BD 48 73 LDA $7348,X
BEA3 [47EA3] 29 0F AND #$0F
BEA5 [47EA5] C9 0F CMP #$0F
BEA7 [47EA7] D0 0C BNE $BEB5
BEA9 [47EA9] B5 02 LDA $02,X
BEAB [47EAB] C5 0E CMP $0E
BEAD [47EAD] F0 02 BEQ $BEB1
BEAF [47EAF] 90 04 BCC $BEB5
BEB1 [47EB1] 85 0E STA $0E
BEB3 [47EB3] 86 0F STX $0F
BEB5 [47EB5] CA DEX
BEB6 [47EB6] 10 E8 BPL $BEA0
BEB8 [47EB8] A6 0F LDX $0F
BEBA [47EBA] 84 00 STY $00
BEBC [47EBC] BD 48 73 LDA $7348,X
BEBF [47EBF] 29 F0 AND #$F0
BEC1 [47EC1] 05 00 ORA $00
BEC3 [47EC3] 9D 48 73 STA $7348,X
BEC6 [47EC6] C8 INY
BEC7 [47EC7] C0 0C CPY #$0C
BEC9 [47EC9] D0 CF BNE $BE9A
BECB [47ECB] 60 RTS
|
武器の特殊効果発動率
| 種類 |
確率 |
| どくばりの即死効果 |
12.5 % (32/256) |
| まじんのかなづちの会心効果 |
33.6 % (86/256) |
| まどろみのけんの睡眠効果 |
37.5 % (96/256) |
| まふうじのつえの MP 吸収効果 |
12.5 % (32/256) |
| どくがのナイフの麻痺効果 |
12.5 % (32/256) |
ソース
|
+
|
... |
;
; どくばりの追加効果
;
A6A5 [466A5] 00 1B 0F BRK ; A ← 乱数 0〜255
A6A8 [466A8] 29 07 AND #$07
A6AA [466AA] D0 1C BNE $A6C8
;
; まじんのかなづち
;
A6F2 [466F2] 00 1B 0F BRK ; A ← 乱数 0〜255
A6F5 [466F5] C9 AA CMP #$AA
A6F7 [466F7] B0 0B BCS $A704
;
; まどろみのけんの追加効果
;
A807 [46807] A9 60 LDA #$60 ; 96/256
A809 [46809] 20 5D 99 JSR $995D
A80C [4680C] 90 D1 BCC $A7DF
;
; まふうじのつえの追加効果
;
A819 [46819] A9 20 LDA #$20 ; 32/256
A81B [4681B] 20 5D 99 JSR $995D
A81E [4681E] 90 BF BCC $A7DF
;
; どくがのナイフの追加効果
;
A82B [4682B] A9 20 LDA #$20 ; 32/256
A82D [4682D] 20 5D 99 JSR $995D
A830 [46830] 90 AD BCC $A7DF
;
; 確率 判定部分
;
995D [4595D] 85 00 STA $00
995F [4595F] AD E7 72 LDA $72E7 ; (bit 0) 1: 倒した場合(※ 倒した場合は、そもそもこの処理が実行されない?)
9962 [45962] 4A LSR A
9963 [45963] B0 09 BCS $996E ;
9965 [45965] 00 1B 0F BRK ; A ← 乱数 0〜255
9968 [45968] C5 00 CMP $00
996A [4596A] B0 02 BCS $996E
996C [4596C] 38 SEC
996D [4596D] 60 RTS
996E [4596E] 18 CLC
996F [4596F] 60 RTS
|
自動回復
| 設定 |
回復範囲 |
| 0 |
0 |
| 1 |
16〜23 |
| 2 |
44〜55 |
| 3 |
90〜109 |
補足:
- 初期 HP が 1200 に設定されるモンスター(「だいまどう」、「ギガデーモン」、「デスピサロ」の一部の形態)については、自動回復後(設定 0 の場合も含む)の HP が 1024 以上となった場合、1023 に修正されます。(回復させた場合も同様)
- 「デスピサロ」は形態変化の際にターンが終了し自動回復処理が行われるため、HP が 1200 となっていることはありません。
ソース
|
+
|
... |
;-----------------------------------
; 最大 HP 変換
;-----------------------------------
...
A4CD [424CD] A5 7E LDA $7E
A4CF [424CF] 85 00 STA $00
A4D1 [424D1] C9 FF CMP #$FF
A4D3 [424D3] D0 0E BNE $A4E3
A4D5 [424D5] A5 7F LDA $7F
A4D7 [424D7] C9 03 CMP #$03
A4D9 [424D9] D0 08 BNE $A4E3
; 最大 HP が 1023 の場合
A4DB [424DB] A9 B0 LDA #$B0
A4DD [424DD] 85 7E STA $7E
A4DF [424DF] A9 04 LDA #$04 ; 0x4b0: 1200
A4E1 [424E1] D0 33 BNE $A516
A4E3 [424E3] AD 44 6E LDA $6E44
A4E6 [424E6] 30 30 BMI $A518 ; ボス戦の場合
A4E8 [424E8] A5 7F LDA $7F
A4EA [424EA] 85 01 STA $01
A4EC [424EC] 46 01 LSR $01
A4EE [424EE] 66 00 ROR $00
A4F0 [424F0] 46 01 LSR $01
A4F2 [424F2] 66 00 ROR $00
A4F4 [424F4] E6 00 INC $00
A4F6 [424F6] D0 02 BNE $A4FA
A4F8 [424F8] E6 01 INC $01 ; $00: (最大 HP)/4 + 1
A4FA [424FA] A2 00 LDX #$00
A4FC [424FC] A5 8A LDA $8A
A4FE [424FE] 48 PHA
A4FF [424FF] A5 8B LDA $8B
A501 [42501] 48 PHA
A502 [42502] 00 BRK
A503 [42503] 18 0F
A505 [42505] 68 PLA
A506 [42506] 85 8B STA $8B
A508 [42508] 68 PLA
A509 [42509] 85 8A STA $8A
A50B [4250B] A5 7E LDA $7E
A50D [4250D] 38 SEC
A50E [4250E] E5 00 SBC $00
A510 [42510] 85 7E STA $7E
A512 [42512] A5 7F LDA $7F
A514 [42514] E5 01 SBC $01
A516 [42516] 85 7F STA $7F
;-----------------------------------
; 自動回復
;-----------------------------------
...
AAFE [46AFE] 00 BRK
AAFF [46AFF] 21 B3
AB01 [46B01] 0A ASL A
AB02 [46B02] A8 TAY
AB03 [46B03] B9 31 AB LDA $AB31,Y
AB06 [46B06] 00 BRK
AB07 [46B07] 17 0F
AB09 [46B09] 18 CLC
AB0A [46B0A] 79 32 AB ADC $AB32,Y
AB0D [46B0D] 85 7C STA $7C
AB0F [46B0F] A9 00 LDA #$00
AB11 [46B11] 85 7D STA $7D
AB13 [46B13] 00 BRK
AB14 [46B14] 02 A3
AB31 [46B31] 00 00
08 10
0C 2C
14 5A
|
モンスター初期状態
| ID |
モンスター名称 |
状態 ID |
初期状態 |
確率設定 |
確率 |
| 28 |
あばれうしどり |
0 |
睡眠 |
2 |
1/8 |
| 31 |
きゅうけつこうもり |
2 |
混乱 |
3 |
1/16 |
| 38 |
ラリホービートル |
0 |
睡眠 |
4 |
1/32 |
| 67 |
さまようたましい |
2 |
混乱 |
2 |
1/8 |
| 86 |
あくまのす |
0 |
睡眠 |
1 |
1/2 |
| 88 |
ミステリドール |
1 |
麻痺 |
5 |
1/64 |
| 120 |
ばくだんいわ |
0 |
睡眠 |
0 |
1 |
| 135 |
メダパニバッタ |
2 |
混乱 |
5 |
1/64 |
| 162 |
ビッグスロース |
0 |
睡眠 |
2 |
1/8 |
| 168 |
メタルキング |
0 |
睡眠 |
6 |
1/256 |
| 170 |
デーモンスピリット |
3 |
マホカンタ |
1 |
1/2 |
| 182 |
エビルプリースト |
3 |
マホカンタ |
0 |
1 |
| 188 |
エスターク |
0 |
睡眠 |
0 |
1 |
| 189 |
しじん |
0 |
睡眠 |
4 |
1/32 |
ソース
|
+
|
... |
8560 [48560] 29 07 AND #$07 ; A: 確率設定
8562 [48562] C9 07 CMP #$07
8564 [48564] F0 3E BEQ $85A4
8566 [48566] A8 TAY
8567 [48567] B9 BD 85 LDA $85BD,Y ; FF 7F 1F 0F 07 03 00
856A [4856A] 85 00 STA $00
856C [4856C] 00 1B 0F ; A ← 乱数 0〜255
856F [4856F] C5 00 CMP $00
8571 [48571] F0 02 BEQ $8575
8573 [48573] B0 2F BCS $85A4
; 乱数値 <= 境界値 の場合
8575 [48575] A6 7B LDX $7B
8577 [48577] 00 26 A3
857A [4857A] 29 03 AND #$03 ; A: 状態 ID
857C [4857C] A8 TAY
857D [4857D] B9 C7 85 LDA $85C7,Y
...
|
先制攻撃・不意打ち
| 確率設定 |
先制攻撃の確率 |
不意打ちの確率 |
| 0 |
7/256 |
8/256 |
| 1 |
7/256 |
31/256 |
| 2 |
31/256 |
7/256 |
| 3 |
31/256 |
31/256 |
ソース
|
+
|
... |
A20E [6220E] A5 0B LDA $0B
A210 [62210] 29 03 AND #$03 ; 確率設定
A212 [62212] 0A ASL A
A213 [62213] 85 04 STA $04
A215 [62215] A6 04 LDX $04
A217 [62217] CA DEX
A218 [62218] A0 FF LDY #$FF
A21A [6221A] A9 21 LDA #$21
A21C [6221C] 00 17 0F BRK ; A ← 乱数 0〜32
A21F [6221F] C8 INY
A220 [62220] C0 02 CPY #$02
A222 [62222] F0 08 BEQ $A22C
A224 [62224] E8 INX
A225 [62225] DD 5C A4 CMP $A45C,X
A228 [62228] F0 02 BEQ $A22C
A22A [6222A] B0 F3 BCS $A21F
; (乱数値) <= (境界値) の場合
A22C [6222C] 98 TYA
A22D [6222D] 8D 44 6E STA $6E44 ; 1: 不意打ち, 2: 先制攻撃
A230 [62230] 60 RTS
A45C [6245C] 1E 1F
1B 1F
1B 1C
18 1C
|
第三章でのアイテムドロップ
第三章では、モンスターの通常のアイテムドロップ処理は行われず、第三章固有のアイテムドロップ処理を行います。手順は次のようになっています:
1. 0〜15 の範囲の乱数値を取得し初期番号とする。
2. 以下で示した表について、初期番号から連番で 16 回アイテム入手処理を行う(途中で番号が 16 になった場合、0 に戻る)。途中で何らかのアイテムを入手できた場合、その時点で判定は打ち切る。
例: 初期番号が 9 であった場合、9, 10, ..., 15, 0, ..., 8 の順でアイテム入手判定を行います。
| 番号 |
アイテム名 |
入手確率 |
| 0 |
こんぼう |
16/256 |
| 1 |
どうのつるぎ |
4/256 |
| 2 |
くさりがま |
2/256 |
| 3 |
てつのやり |
2/256 |
| 4 |
はがねのつるぎ |
(トルネコのLv)/256 |
| 5 |
たびびとのふく |
4/256 |
| 6 |
かわのよろい |
4/256 |
| 7 |
くさりかたびら |
2/256 |
| 8 |
てつのよろい |
(トルネコのLv)/256 |
| 9 |
かわのたて |
4/256 |
| 10 |
うろこのたて |
4/256 |
| 11 |
かわのぼうし |
4/256 |
| 12 |
きのぼうし |
4/256 |
| 13 |
やくそう |
4/256 |
| 14 |
どくけしそう |
2/256 |
| 15 |
キメラのつばさ |
4/256 |
ソース
|
+
|
... |
;-----------------------------------
; アイテムドロップ処理
;-----------------------------------
91DE [491DE] AD 5A 61 LDA $615A
91E1 [491E1] C9 02 CMP #$02
91E3 [491E3] D0 32 BNE $9217 ; 第三章ではない
91E5 [491E5] A9 10 LDA #$10
91E7 [491E7] 00 17 0F BRK ; A ← 乱数 0〜15
91EA [491EA] AA TAX
91EB [491EB] A0 10 LDY #$10
91ED [491ED] BD 8E 92 LDA $928E,X
91F0 [491F0] D0 0A BNE $91FC ; 境界値が 1 以上の場合
91F2 [491F2] A9 05 LDA #$05
91F4 [491F4] 00 63 73 BRK
91F7 [491F7] 85 6E STA $6E ; トルネコのパーティ内での位置
91F9 [491F9] 00 0F 33 BRK
91FC [491FC] 85 01 STA $01 ; $01 ← 境界値 or (トルネコの Lv)
91FE [491FE] 20 91 C8 JSR $C891 ; A ← 乱数 0〜255
9201 [49201] C5 01 CMP $01
9203 [49203] B0 07 BCS $920C
9205 [49205] BD 9E 92 LDA $929E,X
9208 [49208] 85 C4 STA $C4
920A [4920A] D0 3A BNE $9246
920C [4920C] E8 INX
920D [4920D] E0 10 CPX #$10
920F [4920F] 90 02 BCC $9213
9211 [49211] A2 00 LDX #$00
9213 [49213] 88 DEY
9214 [49214] D0 D7 BNE $91ED
9216 [49216] 60 RTS
;-----------------------------------
; 通常のアイテムドロップ処理
;-----------------------------------
9217 ...
928E [4928E] 10 04 02 02 00 04 04 02 00 04 04 04 04 04 02 04
929E [4929E] 01 02 04 05 06 25 26 27 28 3D 3E 46 47 53 54 56
|
最終更新:2024年05月26日 12:51