風来のシレンGB2 砂漠の魔城 (GBC) > 確率

ダメージ計算式

シレンからモンスターへの攻撃

敵の防御力を S とするとき、ダメージ量 D は以下の式で計算されます。(補足: round(f) は f の小数第一位を四捨五入するものとします)
  • D := round((D_{S} ± floor(D_{S}/256) × (乱数 0〜31)) / 256) (ただし、+, - の選択率はそれぞれ 1/2 とし、(攻撃力が 1 以上の場合の)最小ダメージは 1、最大ダメージは 255 とします)
  • D_{n} := floor(D_{n-2^k} / 256) × C_{2^k} (n ≥ 2 の場合) (ただし、k は 2^k ≤ n を満たす最大の整数とします)
  • D_{n} := (攻撃力) × 256 (n < 2 の場合)
  • (攻撃力) := min{255, floor((シレンの基本攻撃力) × (8 + floor(剣の強さ/2) + ちから) / 16)}

参考: (ダメージ量) ≈ round((攻撃力) × (15/16)^{floor(対象の防御力/2)} × (乱数 225〜287) / 256)

表記 固定小数点数換算
C_{2} 240 0.9375
C_{4} 225 0.8789
C_{8} 198 0.7734
C_{16} 153 0.5977
C_{32} 91 0.3555
C_{64} 32 0.125
C_{128} 4 0.01562
C_{256} 0 0

参考: Python による処理の再現
import random
def damage(wp, st, lv, df):
    """
    wp: 剣の強さ
    st: ちから
    lv: シレンの Lv
    df: 防御力
    """
    l = 0
    if lv >= 26:
        l = 54 + (lv - 26)
    elif lv >= 2:
        l = 6 + 2 * (lv - 2)
    elif lv >= 1:
        l = 5
    atc = min(255, (wp//2 + st + 8) * l // 16)
 
    d = atc << 8
    c = 0xf0
    df >>= 1
    while df > 0:
        if df & 1:
            d = (d >> 8) * c
        c = (c * c + 0x80) >> 8
        df >>= 1
    if d < 0x0100:
        d = (d + 1) % 256 # 攻撃力が 1 以上の場合、最低ダメージを 1 にする
                          # (オーバーフローは生じない)
 
    r = random.randint(0, 63)
    delta = (d >> 8) * (r >> 1)
    if r & 1:
        d += delta
    else:
        d -= delta
    if d >= 0xff00:
        ret = 255
    elif d < 0x100:
        if d == 0:
            ret = 0
        else:
            ret = 1
    else:
        ret = (d + 0x80) >> 8
    return ret
 

モンスターからシレンへの攻撃

上記の式について、(防御力) := (盾の強さ)、(攻撃力) := (モンスターの攻撃力) として計算します。

シレンの基本攻撃力

Lv 上位\Lv 下位 0 1 2 3 4 5 6 7 8 9
0 0 5 6 8 10 12 14 16 18 20
10 22 24 26 28 30 32 34 36 38 40
20 42 44 46 48 50 52 54 55 56 57
30 58 59 60 61 62 63 64 65 66 67
40 68 69 70 71 72 73 74 75 76 77
50 78 79 80 81 82 83 84 85 86 87
60 88 89 90 91 92 93 94 95 96 97
70 98 99 100 101 102 103 104 105 106 107
80 108 109 110 111 112 113 114 115 116 117
90 118 119 120 121 122 123 124 125 126 127

ソース

+ ...
;-----------------------------------------
; ダメージ計算(丸め部分)
;-----------------------------------------
...
6AB2 [1DE]  CD FD 6A       CALL $6AFD   ; 
6AB5 [1DE]  F1             POP AF
6AB6 [1DE]  04             INC B
6AB7 [1DE]  28 09          JR Z, $6AC2  ; 整数部が 255 の場合
 
6AB9 [1DE]  05             DEC B
6ABA [1DE]  20 09          JR NZ, $6AC5 ; 整数部 > 0 の場合
 
6ABC [1DE]  0C             INC C
6ABD [1DE]  0D             DEC C
6ABE [1DE]  C8             RET Z        ; 0 の場合
 
6ABF [1DE]  0E 01          LD C, $01    ; 
6AC1 [1DE]  C9             RET
 
6AC2 [1DE]  0E FF          LD C, $FF
6AC4 [1DE]  C9             RET
 
6AC5 [1DE]  AF             XOR A
6AC6 [1DE]  CB 11          RL C
6AC8 [1DE]  88             ADC A, B
6AC9 [1DE]  4F             LD C, A      ; (四捨五入)
6ACA [1DE]  C9             RET
 
;-----------------------------------------
; ダメージ量を乱数によって変化させる
;-----------------------------------------
6AFD [1DE]  C5             PUSH BC
6AFE [1DE]  01 3F 00       LD BC, $003F
6B01 [1DE]  CD 30 18       CALL $1830     ; A ← 乱数 0〜63
6B04 [1DE]  C1             POP BC
 
6B05 [1DE]  C5             PUSH BC
6B06 [1DE]  CB 3F          SRL A          ; A ← 乱数 0〜31
6B08 [1DE]  F5             PUSH AF
6B09 [1DE]  CD 45 0C       CALL $0C45     ; HL ← A × B
6B0C [1DE]  54             LD D, H
6B0D [1DE]  5D             LD E, L
6B0E [1DE]  F1             POP AF
6B0F [1DE]  E1             POP HL
6B10 [1DE]  30 08          JR NC, $6B1A   ; 
 
6B12 [1DE]  19             ADD HL, DE
6B13 [1DE]  30 0B          JR NC, $6B20
 
6B15 [1DE]  21 00 FF       LD HL, $FF00
6B18 [1DE]  18 06          JR $6B20
 
6B1A [1DE]  7D             LD A, L
6B1B [1DE]  93             SUB E
6B1C [1DE]  6F             LD L, A
6B1D [1DE]  7C             LD A, H
6B1E [1DE]  9A             SBC A, D
6B1F [1DE]  67             LD H, A
 
6B20 [1DE]  44             LD B, H
6B21 [1DE]  4D             LD C, L
6B22 [1DE]  C9             RET
 
;-----------------------------------------
; ダメージ計算(C: 攻撃力, B: 防御力)
;-----------------------------------------
6ACB [1DE]  61             LD H, C
6ACC [1DE]  2E 00          LD L, $00
6ACE [1DE]  79             LD A, C
6ACF [1DE]  B7             OR A
6AD0 [1DE]  28 20          JR Z, $6AF2
 
6AD2 [1DE]  48             LD C, B
6AD3 [1DE]  CB 39          SRL C        ; C ← 防御力/2
6AD5 [1DE]  28 1B          JR Z, $6AF2  
6AD7 [1DE]  11 F5 6A       LD DE, $6AF5
 
6ADA [1DE]  CB 41          BIT 0, C
6ADC [1DE]  28 09          JR Z, $6AE7
 
6ADE [1DE]  44             LD B, H
6ADF [1DE]  1A             LD A, (DE)
6AE0 [1DE]  C5             PUSH BC
6AE1 [1DE]  D5             PUSH DE
6AE2 [1DE]  CD 45 0C       CALL $0C45   ; HL ← A × B
6AE5 [1DE]  D1             POP DE
6AE6 [1DE]  C1             POP BC
 
6AE7 [1DE]  13             INC DE
6AE8 [1DE]  CB 39          SRL C
6AEA [1DE]  20 EE          JR NZ, $6ADA
 
6AEC [1DE]  3E 00          LD A, $00
6AEE [1DE]  B4             OR H
6AEF [1DE]  20 01          JR NZ, $6AF2
6AF1 [1DE]  2C             INC L        ; L < 255 は保証できる
 
6AF2 [1DE]  44             LD B, H
6AF3 [1DE]  4D             LD C, L
6AF4 [1DE]  C9             RET
 
6AF5 F0 E1 C6 99 5B 20 04 00
 
;-----------------------------------------
; HL ← B × A
;-----------------------------------------
0C45 [0]  21 00 00       LD HL, $0000
0C48 [0]  58             LD E, B
0C49 [0]  16 00          LD D, $00
0C4B [0]  06 08          LD B, $08
 
0C4D [0]  0F             RRCA
0C4E [0]  30 01          JR NC, $0C51
0C50 [0]  19             ADD HL, DE
 
0C51 [0]  CB 23          SLA E
0C53 [0]  CB 12          RL D
0C55 [0]  05             DEC B
0C56 [0]  20 F5          JR NZ, $0C4D
0C58 [0]  C9             RET
 
;-----------------------------------------
; シレンの攻撃力の取得
;-----------------------------------------
6CC2 [1E]  3E 78          LD A, $78
6CC4 [1E]  21 40 47       LD HL, $4740
6CC7 [1E]  CD AC 09       CALL $09AC
 
6CCA [1E]  69             LD L, C
6CCB [1E]  CB 3D          SRL L        ; L ← 剣の強さ / 2
6CCD [1E]  E5             PUSH HL
6CCE [1E]  3E 7E          LD A, $7E
6CD0 [1E]  21 76 51       LD HL, $5176
6CD3 [1E]  CD AC 09       CALL $09AC
6CD6 [1E]  E1             POP HL
6CD7 [1E]  78             LD A, B      ; A ← ちから
6CD8 [1E]  C6 08          ADD A, $08
6CDA [1E]  85             ADD A, L      
6CDB [1E]  30 02          JR NC, $6CDF
6CDD [1E]  3E FF          LD A, $FF    ; A ← min{255, ちから + 剣の強さ/2 + 8}
 
6CDF [1E]  F5             PUSH AF      
6CE0 [1E]  CD 3A 6A       CALL $6A3A   
6CE3 [1E]  F1             POP AF
6CE4 [1E]  41             LD B, C      ; B ← シレンの基本攻撃力
6CE5 [1E]  D5             PUSH DE
6CE6 [1E]  CD 45 0C       CALL $0C45
6CE9 [1E]  D1             POP DE
 
6CEA [1E]  CB 3C          SRL H
6CEC [1E]  CB 1D          RR L
6CEE [1E]  CB 3C          SRL H
6CF0 [1E]  CB 1D          RR L
6CF2 [1E]  CB 3C          SRL H
6CF4 [1E]  CB 1D          RR L
6CF6 [1E]  CB 3C          SRL H
6CF8 [1E]  CB 1D          RR L
6CFA [1E]  7C             LD A, H
6CFB [1E]  B7             OR A
6CFC [1E]  28 02          JR Z, $6D00
 
6CFE [1E]  2E FF          LD L, $FF
6D00 [1E]  4D             LD C, L     ; C ← min{255, (シレンの基本攻撃力) × (ちから + 剣の強さ/2 + 8)}
6D01 [1E]  C9             RET
 
;-----------------------------------------
; シレンの基本攻撃力の取得
;-----------------------------------------
6A3A [1E]  1E 00          LD E, $00
6A3C [1E]  CD 63 54       CALL $5463
6A3F [1E]  48             LD C, B
6A40 [1E]  21 37 72       LD HL, $7237
6A43 [1E]  06 00          LD B, $00
6A45 [1E]  09             ADD HL, BC
6A46 [1E]  4E             LD C, (HL)
6A47 [1E]  C5             PUSH BC
6A48 [1E]  1E 00          LD E, $00
6A4A [1E]  0E 14          LD C, $14
6A4C [1E]  CD 09 03       CALL $0309
6A4F [1E]  C1             POP BC
6A50 [1E]  C8             RET Z
 
7237 00 05 06 08 0A 0C 0E 10 12 14 16 18 1A 1C 1E 20
     22 24 26 28 2A 2C 2E 30 32 34 36 37 38 39 3A 3B
     3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B
     4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B
     5C 5D 5E 5F 60 61 62 63 64 65 66 67 68 69 6A 6B
     6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 7B
     7C 7D 7E 7F
 

秘剣カブラステギ

秘剣カブラステギ入手に必要な 9 つのアイテムのうち、出現しない 2 つアイテム(の種類)は次のコードで計算できます。(ただし、クリアキャンペーンで確認できる日記 ID は下位 16 bit のみの値であるため、実際のプレイでそれらのアイテムを事前予測することは難しいかもしれません)

def ng_items(savedata_id):
    """
    savedata_id (uint32_t): セーブデータ識別子(日記 ID)
    """
    x = ((savedata_id >>  0) ^ (savedata_id >> 16)) & 0xff
    y = ((savedata_id >>  8) ^ (savedata_id >> 24)) & 0xff
    x = (x >> 4) | ((x & 0x0f) << 4)
    y = (y >> 4) | ((y & 0x0f) << 4)
    item_type_1 = ((x * 9) >> 8) + 1
    item_type_2 = ((y * 8) >> 8) + 1
    if item_type_2 == item_type_1:
        item_type_2 += 1
    return item_type_1, item_type_2
 

種類 アイテム ID アイテム名称
1 33 ひだまりの剣
2 61 けしんの盾
3 89 んふうの腕輪
4 96 カランバの矢
5 103 ブフーのおにぎり
6 123 ランザンの草
7 156 スメラギの巻物
8 182 テンジンの杖
9 199 ギメンシャの壺

ソース

+ ...
;------------------------------------
; 出現しないアイテムの設定
;------------------------------------
4040  3E 02          LD A, $02
4042  E0 70          LDH ($FF70), A
4044  21 82 D4       LD HL, $D482
4047  01 AA 09       LD BC, $09AA
404A  CD EA 09       CALL $09EA
404D  11 B0 FF       LD DE, $FFB0
4050  3E 0B          LD A, $0B
4052  21 2F 53       LD HL, $532F
4055  CD AC 09       CALL $09AC
4058  F0 B0          LDH A, ($FFB0) ; 日記 ID Byte [0]
405A  4F             LD C, A
405B  F0 B2          LDH A, ($FFB2) ; 日記 ID Byte [2]
405D  A9             XOR C          ; 
405E  CB 37          SWAP A
4060  E0 B0          LDH ($FFB0), A
 
4062  F0 B1          LDH A, ($FFB1) ; 日記 ID Byte [1]
4064  4F             LD C, A
4065  F0 B3          LDH A, ($FFB3) ; 日記 ID Byte [3]
4067  A9             XOR C
4068  CB 37          SWAP A
406A  E0 B1          LDH ($FFB1), A
 
406C  F0 B0          LDH A, ($FFB0)
406E  06 09          LD B, $09
4070  C5             PUSH BC
4071  CD 45 0C       CALL $0C45
4074  C1             POP BC
4075  7C             LD A, H
4076  3C             INC A
4077  E0 B0          LDH ($FFB0), A ; 
 
4079  F0 B1          LDH A, ($FFB1)
407B  06 08          LD B, $08
407D  C5             PUSH BC
407E  CD 45 0C       CALL $0C45
4081  C1             POP BC
4082  F0 B0          LDH A, ($FFB0)
4084  4F             LD C, A
4085  7C             LD A, H
4086  3C             INC A
4087  B9             CP C
4088  20 01          JR NZ, $408B
408A  3C             INC A          ; 同一の場合、1 つずらす
 
408B  E0 B1          LDH ($FFB1), A
 
408D  AF             XOR A
408E  21 2F DE       LD HL, $DE2F
4091  22             LD (HL+), A    ; 入手不可フラグ (0〜7) をクリア
4092  32             LD (HL-), A    ; 入手不可フラグ (8〜15) をクリア
 
4093  F0 B0          LDH A, ($FFB0)
4095  5F             LD E, A
4096  E5             PUSH HL
4097  CD F2 0E       CALL $0EF2     ; 
409A  E1             POP HL
 
409B  F0 B1          LDH A, ($FFB1)
409D  5F             LD E, A
409E  CD F2 0E       CALL $0EF2
...
 
;------------------------------------
; 秘剣カブラステギ入手に必要なアイテムとの比較
;------------------------------------
72EB  4F             LD C, A
72EC  06 09          LD B, $09
72EE  21 23 73       LD HL, $7323
72F1  2A             LD A, (HL+)
72F2  B9             CP C
72F3  28 04          JR Z, $72F9
 
72F5  05             DEC B
72F6  20 F9          JR NZ, $72F1
 
72F8  C9             RET
 
; 秘剣カブラステギ入手に必要なアイテムの場合
 
72F9  F0 B1          LDH A, ($FFB1) ; アイテムの種類
72FB  5F             LD E, A
72FC  21 2F DE       LD HL, $DE2F
72FF  CD FA 0E       CALL $0EFA
7302  C8             RET Z
 
; ?
 
7303  F0 B2          LDH A, ($FFB2)
7305  4F             LD C, A
7306  F0 B3          LDH A, ($FFB3)
7308  47             LD B, A
7309  F0 B1          LDH A, ($FFB1)
730B  F5             PUSH AF
730C  21 2F DE       LD HL, $DE2F
730F  2A             LD A, (HL+)
7310  56             LD D, (HL)
7311  5F             LD E, A
7312  CD 26 72       CALL $7226
7315  C1             POP BC
7316  F0 B0          LDH A, ($FFB0)
7318  B0             OR B
7319  C8             RET Z
 
; 再抽選
 
731A  F0 B2          LDH A, ($FFB2)
731C  4F             LD C, A
731D  F0 B3          LDH A, ($FFB3)
731F  47             LD B, A
7320  C3 86 72       JP $7286
 
7323  21 3D 59 60 B6 9C 7B C7 67
 
;-----------------------------------------
; タイマー関連の初期化
;-----------------------------------------
...
01B4 [0]  3E 78          LD A, $78
01B6 [0]  E0 05          LDH (TIMA_FF05), A
01B8 [0]  E0 06          LDH (TMA_FF06), A
01BA [0]  AF             XOR A
01BB [0]  E0 07          LDH (TAC_FF07), A
01BD [0]  3E 04          LD A, $04
01BF [0]  E0 07          LDH (TAC_FF07), A
 
;-----------------------------------------
; セーブデータ識別子(日記 ID)の設定
;-----------------------------------------
53C8 [2D]  0E C8          LD C, $C8
53CA [2D]  0D             DEC C
53CB [2D]  28 1A          JR Z, $53E7
 
53CD [2D]  06 00          LD B, $00
53CF [2D]  21 B3 FF       LD HL, $FFB3
53D2 [2D]  FA E9 C0       LD A, ($C0E9)
53D5 [2D]  B0             OR B
53D6 [2D]  32             LD (HL-), A        ; [3] ← フレームカウンタ (0〜255)
 
53D7 [2D]  F0 44          LDH A, (LY_FF44)
53D9 [2D]  B0             OR B
53DA [2D]  32             LD (HL-), A        ; [2] ← LCDC Y-Coordinate (0〜153)
 
53DB [2D]  F0 05          LDH A, (TIMA_FF05) ; 
53DD [2D]  B0             OR B
53DE [2D]  32             LD (HL-), A        ; [1] ← Timer counter (120?〜255)
 
53DF [2D]  F0 04          LDH A, (DIV_FF04) 
53E1 [2D]  B0             OR B
53E2 [2D]  77             LD (HL), A         ; [0] ← Divider Register (0〜255)
 
53E3 [2D]  78             LD A, B
53E4 [2D]  A7             AND A
53E5 [2D]  28 E3          JR Z, $53CA
 
53E7 [2D]  C9             RET
 

階層毎の乱数生成器の初期状態

シード値 seed のダンジョンの(内部)階層値 f での乱数生成器の初期状態は、次のコード中の initial_state(seed, f) によって計算できます。
uint32_t initial_state(uint32_t seed, uint8_t f) {
  uint32_t x = seed;
  do {
    x = (x << 8) | (((x >> 23) ^ (x >> 10)) & 0xff);
  } while (--f);
  x <<= 1;
  x = (x << 16) | (x >> 16);
  return x;
}
 

問題点

ダンジョンのシード値によっては、乱数生成器の初期状態が 0 または 0x80000000 となることがあります。
乱数生成器の状態が 0 または 0x80000000 となった場合、その後に生成される乱数値は全て 0 となるため(基本的には)フリーズします。

乱数生成器の状態が 0 となる (シード値, 内部階層値) の組は以下のとおりです。
シード値の下位 31 bit フリーズする階層
0x00000000 1F
0x00000040 1F
0x00040020 5F
0x00101080 8F
0x00200000 3F
0x00484200 11F
0x00494308 24F
0x00C42114 56F
0x01090048 13F
0x018D0049 26F
0x019D10C9 39F
0x01BD10C9 65F
0x039AD094 84F
0x04002000 4F
0x04200501 16F
0x047A57C5 94F
0x04842005 17F
0x04C42015 30F
0x05010900 14F
0x05C8CA48 89F
0x08505092 21F
0x08705092 34F
0x09004842 12F
0x09CD405B 52F
0x0C181793 73F
0x0C505593 47F
0x0D004943 25F
0x0DC46857 43F
0x0DED455A 78F
0x10108004 7F
0x10800400 6F
0x108DED45 79F
0x10C94708 37F
0x10C94748 63F
0x12048420 18F
0x1204C420 31F
0x1280C421 57F
0x130DC468 44F
0x131DD4E8 70F
0x1409CD40 53F
0x14B3108D 81F
0x15018D00 27F
0x17931DD4 71F
0x1817931D 72F
0x1AD094B3 83F
0x1B6D847A 96F
0x1CD1509B 99F
0x1D05C8CA 90F
0x1D10C947 38F
0x1DD4E853 69F
0x20000000 2F
0x20050109 15F
0x2015018D 28F
0x211409CD 54F
0x33108DED 80F
0x39039AD0 85F
0x3D10C947 64F
0x405B438C 50F
0x409280C4 58F
0x42001010 9F
0x43085050 22F
0x438C5055 48F
0x44201501 29F
0x44211409 55F
0x44685701 42F
0x455A4A8C 76F
0x459D05C8 91F
0x47087050 35F
0x47487040 61F
0x4839039A 86F
0x48420010 10F
0x48704092 60F
0x48CA4839 88F
0x49430850 23F
0x49470870 36F
0x49474870 62F
0x4A483903 87F
0x4A8C1817 74F
0x4D405B43 51F
0x50509204 20F
0x5055930D 46F
0x50920484 19F
0x509204C4 32F
0x5094B310 82F
0x509B6D84 97F
0x51509B6D 98F
0x5301BD10 66F
0x54E85301 68F
0x55930DC4 45F
0x57019D10 40F
0x57C59D05 92F
0x5A4A8C18 75F
0x5B438C50 49F
0x685301BD 67F
0x6857019D 41F
0x6D455A4A 77F
0x6D847A57 95F
0x70409280 59F
0x70509204 33F
0x7A57C59D 93F

ソース

+ ...
;-----------------------------------------
; 乱数初期化(階層切り替え時)
;-----------------------------------------
18B9 [1]  FA BD C1       LD A, ($C1BD)
18BC [1]  EA B5 C1       LD ($C1B5), A
18BF [1]  FA BE C1       LD A, ($C1BE)
18C2 [1]  EA B6 C1       LD ($C1B6), A
18C5 [1]  FA BF C1       LD A, ($C1BF)
18C8 [1]  EA B7 C1       LD ($C1B7), A
18CB [1]  FA C0 C1       LD A, ($C1C0)
18CE [1]  EA B8 C1       LD ($C1B8), A
 
18D1 [1]  FA B6 C1       LD A, ($C1B6)
18D4 [1]  4F             LD C, A
18D5 [1]  FA B7 C1       LD A, ($C1B7)
18D8 [1]  47             LD B, A
18D9 [1]  CB 21          SLA C
18DB [1]  CB 10          RL B
18DD [1]  CB 21          SLA C
18DF [1]  CB 10          RL B
18E1 [1]  CB 21          SLA C
18E3 [1]  CB 10          RL B
18E5 [1]  CB 21          SLA C
18E7 [1]  CB 10          RL B
18E9 [1]  CB 21          SLA C
18EB [1]  CB 10          RL B
18ED [1]  FA B7 C1       LD A, ($C1B7)
18F0 [1]  A9             XOR C
18F1 [1]  4F             LD C, A
18F2 [1]  FA B8 C1       LD A, ($C1B8)
18F5 [1]  A8             XOR B
18F6 [1]  47             LD B, A
18F7 [1]  CB 21          SLA C
18F9 [1]  CB 10          RL B
 
18FB [1]  FA B7 C1       LD A, ($C1B7)
18FE [1]  EA B8 C1       LD ($C1B8), A
1901 [1]  FA B6 C1       LD A, ($C1B6)
1904 [1]  EA B7 C1       LD ($C1B7), A
1907 [1]  FA B5 C1       LD A, ($C1B5)
190A [1]  EA B6 C1       LD ($C1B6), A
190D [1]  78             LD A, B
190E [1]  EA B5 C1       LD ($C1B5), A
1911 [1]  1D             DEC E
1912 [1]  20 BD          JR NZ, $18D1
 
1914 [1]  21 B5 C1       LD HL, $C1B5
1917 [1]  CB 26          SLA (HL)
1919 [1]  23             INC HL
191A [1]  CB 16          RL (HL)
191C [1]  23             INC HL
191D [1]  CB 16          RL (HL)
191F [1]  23             INC HL
1920 [1]  CB 16          RL (HL)
1922 [1]  21 B5 C1       LD HL, $C1B5
1925 [1]  2A             LD A, (HL+)
1926 [1]  5F             LD E, A
1927 [1]  2A             LD A, (HL+)
1928 [1]  57             LD D, A
1929 [1]  2A             LD A, (HL+)
192A [1]  4F             LD C, A
192B [1]  7E             LD A, (HL)
192C [1]  47             LD B, A
 
192D [1]  21 B5 C1       LD HL, $C1B5
1930 [1]  79             LD A, C
1931 [1]  22             LD (HL+), A
1932 [1]  78             LD A, B
1933 [1]  22             LD (HL+), A
1934 [1]  7B             LD A, E
1935 [1]  22             LD (HL+), A
1936 [1]  7A             LD A, D
1937 [1]  77             LD (HL), A
1938 [1]  C9             RET
 
;-----------------------------------------
; ダンジョンのシード値
;-----------------------------------------
48CF [4]  F0 44          LDH A, (LY_FF44) ; A: Current Scanline 
48D1 [4]  47             LD B, A
48D2 [4]  FA B5 C1       LD A, ($C1B5)    ; 乱数生成器 状態 (Byte 0)
48D5 [4]  80             ADD A, B
48D6 [4]  EA BD C1       LD ($C1BD), A    ; ダンジョン seed (Byte 0)
 
48D9 [4]  FA B6 C1       LD A, ($C1B6)    ; 乱数生成器 状態 (Byte 1)
48DC [4]  80             ADD A, B
48DD [4]  EA BE C1       LD ($C1BE), A    ; ダンジョン seed (Byte 1)
 
48E0 [4]  FA E9 C0       LD A, ($C0E9)    ; A: フレームカウンタ
48E3 [4]  47             LD B, A
48E4 [4]  FA B7 C1       LD A, ($C1B7)    ; 乱数生成器 状態 (Byte 2)
48E7 [4]  80             ADD A, B
48E8 [4]  EA BF C1       LD ($C1BF), A    ; ダンジョン seed (Byte 2)
 
48EB [4]  FA B8 C1       LD A, ($C1B8)    ; 乱数生成器 状態 (Byte 3)
48EE [4]  80             ADD A, B
48EF [4]  EA C0 C1       LD ($C1C0), A    ; ダンジョン seed (Byte 3)
48F2 [4]  C9             RET
 
最終更新:2024年07月07日 22:49