乱数生成器
Mersenne twister を用いています。
内部状態の初期化は以下のコード中での init と同等の処理によって行われます。
乱数 0〜(n-1) は ((32-bit 乱数値) mod 65536) × n) / 65536 によって取得されます。
#include <random>
struct AsukaRng {
static constexpr size_t N = std::mt19937::state_size;
AsukaRng(uint32_t seed) {
// 環境依存コード
const auto* state = (uint_fast32_t*) &mt;
if (!(state[0] == mt.default_seed && state[N] == N)) abort();
init(seed);
}
void init(uint32_t seed) {
if (seed == 0) seed = 6502; // NES CPU
auto* state = (uint_fast32_t*) &mt;
state[0] = seed;
for (size_t i = 1; i < N; ++i) {
state[i] = (state[i - 1] * 0x10dcd) & 0xffffffff;
}
state[N] = N; // index
}
uint_fast32_t next() {
return mt();
}
uint16_t range(int32_t n) {
return (uint32_t) ((int32_t) (next() & 0xffff) * n) >> 16;
}
std::mt19937 mt;
};
確率
攻撃命中率・ワナを踏む確率
項目 |
確率 |
アスカの攻撃命中率 |
95.00 % (19/20) |
モンスターの攻撃命中率 |
87.50 % (7/8) |
モンスターの攻撃命中率(見切りの盾 装備時) |
43.75 % (7/16) |
投擲命中率(一般) |
91.67 % (11/12) |
投擲命中率(ひまガッパ系・デブータ系からの投擲など) |
87.50 % (7/8) |
ワナを踏む確率(前) |
75.25 % (76/101) |
ワナを踏む確率(後) |
25.74 % (26/101) |
ソース
+
|
... |
;-------------------------------------------------
; アスカの攻撃命中率
;-------------------------------------------------
...
05989: 1f b0 08 00 13 ; w8 = 19
0598e: 1f b0 09 00 14 ; w9 = 20
...
05c94: 1a b0 0a ;
05c97: 52 b0 09 ; w10 ← 乱数 0〜19
05c9a: 15 15 b0 0a b0 08 41 01 07 ff ; w10 < w8 で命中
;-------------------------------------------------
; モンスターからの攻撃の回避率を返す
; (基本的に 1/8 の確率で 100 を返す)
;-------------------------------------------------
...
2b46a: 1f b0 01 00 00 ; w1 = 0
...
2b4d1: 15 10 d0 04 97 ff 41 40 00 ff ; jmpf 0x2b518
2b4db: 15 00 c1 20 41 29 00 ff ; jmpf 0x2b509
2b4e3: 1a 80 01 ;
2b4e6: 33 00 56 2f 10 01 00 36 ; tcall 0xce431
2b4ee: 1a 80 02 ;
2b4f1: 33 00 56 2f 10 01 00 4f ; tcall 0xce431
2b4f9: 15 01 80 01 21 80 02 41 08 00 ff ; jmpf 0x2b509
2b504: 1f b0 01 00 32 ; w1 ← 50 (見切りの盾)
2b509: 15 11 f1 0d 00 00 41 08 00 ff ; jmpf 0x2b518
2b513: 1f b0 01 00 32 ;
2b518: 15 00 c1 10 41 18 00 ff ; jmpf 0x2b535
2b520: 1a b0 02 ;
2b523: 52 00 08 ; w2 ← 乱数 0〜7
2b526: 15 10 b0 02 00 00 41 08 00 ff ;
2b530: 1f b0 01 00 64 ; if (w2 == 0) w1 ← 100
2b535: 1e b0 01 ; ret w1
;-------------------------------------------------
; モンスターからの攻撃の回避判定
;-------------------------------------------------
...
31eab: 1a b0 02 ;
31eae: 35 9b 95 00 ; call 0x2b44a ; w2 ← 回避率
31eb2: 1a b0 06 ;
31eb5: 34 b8 00 f9 06 00 ; w6 ← (不明な回避率補正)
31ebb: 20 b0 02 b0 06 ; w2 += w6
31ec0: 1a b0 03 ;
31ec3: 52 00 64 ; w3 ← 乱数 0〜99
31ec6: 15 15 b0 03 b0 02 41 36 00 ff ; (w3 < w2) jmpf 0x31f03
;-------------------------------------------------
; 投擲命中率
;-------------------------------------------------
7ee3b: 1f b0 04 00 0b ; w4 = 11
7ee40: 1f b0 05 00 0c ; w5 = 12
...
7ef7f: 8d f1 25 00 15 b0 04 ;
7ef86: 8d f1 25 00 16 b0 05 ;
7efdf: 1a b0 04 ;
7efe2: 8c f1 25 00 15 ;
7efe7: 1a b0 05 ;
7efea: 8c f1 25 00 16 ;
...
7f38a: 33 00 01 de 05 0a b8 00 90 01 b0 06 b8 01 b0 02 b0 03 b0 04 b0 05 00 00 b8 03; tcall 0x248d
...
029f3: 35 91 ef 04 b8 00 90 01 b8 06 b8 07 ; call 0x1985
...
;
; 判定箇所
;
...
019d9: 1a b0 01 ;
019dc: 52 b8 03 ; w1 ← 乱数 0〜(a3-1)
019df: 15 15 b0 01 b8 02 40 06 00 ff ; w1 < a2 の場合に命中
019e9: 1e 00 00 ; ret 0
019ec: 1e 00 01 ; ret 1
;-------------------------------------------------
; デブータ系から投石
;-------------------------------------------------
34e03: 1a b0 01 ;
34e06: 52 00 08 ; w1 ← 乱数 0〜7
34e09: 15 10 b0 01 00 00 41 09 00 ff ; w1 == 0 の場合、回避
34e13: 1e 00 00 ; ret 0
34e19: 1e 00 01 ; ret 1
;-------------------------------------------------
; ワナを踏むかどうか
;-------------------------------------------------
1309a: 1a 80 01 ;
1309d: 34 90 01 07 13 00 ; b1 ← チェック済みの場合 1
130a3: 15 01 80 01 41 0b 00 ff ;
130ab: 1f b0 04 00 19 ; w4 ← 25
130b0: 12 07 00 ; jmp 0x130b8
130b3: 1f b0 04 00 4b ; w4 ← 75
130b8: 1a b0 03 ; w3 ← 乱数 0〜100
130bb: 52 00 65 ;
130be: 15 01 c1 10 41 08 00 ff ; if ((ワナを必ず発動させる場合)) {
130c6: 1f b0 03 00 00 ; w3 ← 0
; }
130cb: 15 13 b0 03 b0 04 41 13 00 ff ; w3 <= w4 の場合、ワナを踏む
...
|
ダメージ計算
(基本ダメージ量) := floor(round((攻撃力) × (乱数 875〜1125) / 1000.0 - (対象の防御力)) × (種族 ダメージ乗数) / 1000)
ただし、ダメージ量が 0 以下となった場合は、確率 1/4 で 2 ダメージ、確率 3/4 で 1 ダメージとします。(乱数 0〜3 を取得し、乱数値が 2 であった場合のみ 2 ダメージ)
アスカの攻撃力・防御力は以下のコードと(ほぼ)同等の処理によって計算されています。
def f(v):
"""
約 log_{1.6}(v)^2 を返す
"""
v = log10(v)
v /= 0.20412 # log10(1.6) ~= 0.20411998...
return v * v
def attack(lv, st, wp, upv, kigny=False, cheered=False):
"""
lv: Lv
st: ちから
wp: 武器の基本値(補正込み)
upv: 修正値
"""
v_wp = 0
if wp > 0:
v_wp = f(wp / 5.0 + 1.0)
if upv >= 0:
v_wp += f(wp + 1.0) * upv / 50.0
elif wp >= -upv:
v_wp *= (wp + upv) / wp
v_st = f((max(8, st) - 2.0) / 2.0) * (min(8, st) / 8.0)
v_lv = f((lv + 2) / 2.0)
v = v_wp + v_st + v_lv
if kigny:
v *= 1.5 # キグニ族状態
if cheered:
v *= 1.5 # ファイトの巻物
return v
def defense(df, upv):
"""
df: 盾の基本値(補正込み)
upv: 修正値
"""
v = 0
if df > 0:
v = f(df / 3.0 + 1.0)
if upv >= 0:
v += f(df + 1.0) * upv / 50.0
v += upv // 2
elif df >= -upv:
v *= (df + upv) / df
return v
ソース
+
|
... |
;-------------------------------------------------
; 約 log_{1.6}(a0)^2 を返す
;-------------------------------------------------
160ba: 1f 88 01 b8 00 ; d1 = a0;
160bf: 8e 88 01 01 08 88 01 00 ; f1 = log_10(d1)
160c7: 8e 88 02 01 09 01 4f bc 00 ; f2 = 20412.0
160d0: 8e 88 02 01 09 88 02 ;
04 09 02 01 86 a0 00 ; f2 /= 100000.0
160de: 8e 88 01 01 09 88 01 ;
04 09 88 02 00 ; f1 /= f2
160ea: 8e 88 01 01 09 88 01 ;
05 09 88 01 00 ; f1 *= f1
160f6: 1e 88 01 ; return f1
;-------------------------------------------------
; 攻撃力の計算
;-------------------------------------------------
...
2c394: 1f 88 02 00 00 ;
2c399: 1a b0 01 ;
2c39c: 33 00 56 44 10 00 ; tcall 0xcd41a ; w1 ← 基本値
2c3a2: 1a b0 02 ;
2c3a5: 33 00 56 45 10 00 ; tcall 0xcd41d ; w2 ← 修正値
2c3ab: 1a b0 03 ;
2c3ae: 33 00 56 46 10 00 ; tcall 0xcd420 ; w3 ← 基本値補正
2c3b4: 1a 88 02 ;
2c3b7: 33 00 01 8e 04 03 b0 01 b0 02 b0 03 ; tcall 0x162cd ; f2 ← 武器の攻撃力
2c3c3: 1a 88 04 ;
2c3c6: 35 38 ff 00 ; call 0x2c2ff ; f4 ← ちから依存の攻撃力
2c3ca: 8e 88 01 01 09 70 09 ;
02 09 00 02 00 ; f1 ← (Lv + 2)
2c3d6: 8e 88 01 01 09 88 01 ;
04 09 00 02 00 ; f1 /= 2.0
2c3e2: 1a 88 05 ;
2c3e5: 33 00 01 8d 04 01 88 01 ; tcall 0x160ba ; f5 ← (log_{1.6}(f1))^2
2c3ed: 15 01 40 03 41 08 00 ff ; jmpf 0x2c3fa
2c3f5: 22 88 05 00 02 ;
2c3fa: 8e 88 01 01 09 88 02 ;
02 09 88 04 ;
02 09 88 05 00 ; f1 ← f2 + f4 + f5
2c40a: 12 98 00 ; jmp 0x2c4a3
...
2c4a3: 15 11 70 2b 00 00 41 13 00 ff ; if (!キグニ族状態) jmp 0x2c4bd
2c4ad: 8e 88 01 01 09 88 01 ;
05 09 00 03 ;
04 09 00 02 00 ; f1 = f1 * 3.0 / 2.0
2c4bd: 15 11 70 31 00 00 41 13 00 ff ; if (!ファイトの巻物の効果中) jmp 0x2c4d7
2c4c7: 8e 88 01 01 09 88 01 ;
05 09 00 03 ;
04 09 00 02 00 ; f1 = f1 * 3.0 / 2.0
2c4d7: 1e 88 01 ; ret f1
;-------------------------------------------------
; ちから 依存の攻撃力
;-------------------------------------------------
2c2ff: 1f b0 01 70 0e ;
2c304: 15 10 d0 04 97 ff 41 18 00 ff ; jmpf 0x2c323
2c30e: 1a b0 03 ;
2c311: 33 00 56 66 10 01 00 60 ; tcall 0xcd57e
2c319: 22 b0 03 00 03 ;
2c31e: 20 b0 01 b0 03 ; += (ちから補正 #1)
2c323: 1a b0 04 ;
2c326: 35 c8 f3 01 00 0a ; call 0x2b6ef
2c32c: 22 b0 04 00 0a ;
2c331: 20 b0 01 b0 04 ; += (ちから補正 #2)
2c336: 1f b0 02 b0 01 ; w2 ← (ちから)
2c33b: 15 15 b0 02 00 08 41 08 00 ff ; if (!(w2 < 8)) jmp 0x2c34a
2c345: 1f b0 02 00 08 ; w2 ← 8
2c34a: 8e 88 01 01 09 b0 02 ;
03 09 00 02 00 ; f1 ← (w2 - 2.0)
2c356: 8e 88 01 01 09 88 01 ;
04 09 00 02 00 ; f1 /= 2.0
2c362: 1a 88 02 ;
2c365: 33 00 01 8d 04 01 88 01 ; tcall 0x160ba ; f2 ← (log_{1.6}(f1))^2
2c36d: 15 15 b0 01 00 08 41 13 00 ff ; if (!((ちから) < 8)) jmp 0x2c387
2c377: 8e 88 02 01 09 88 02 ;
05 09 b0 01 ;
04 09 00 08 00 ; f2 = f2 * (ちから) / 8.0
2c387: 1e 88 02 ; ret f2
;-------------------------------------------------
; 武器の攻撃力
;-------------------------------------------------
; a0: 基本値, a1: 修正値, a2: 基本値補正
;-------------------------------------------------
162cd: 1f 88 02 00 00 ;
162d2: 20 b8 00 b8 02 ;
162d7: 15 13 b8 00 00 00 40 85 00 ff ; jmpt 0x16363
162e1: 1f b0 01 b8 00 ;
162e6: 15 15 b8 01 00 00 41 1c 00 ff ; jmpf 0x16309
162f0: 20 b0 01 b8 01 ;
162f5: 15 15 b0 01 00 00 41 08 00 ff ; jmpf 0x16304
162ff: 1f b0 01 00 00 ;
16304: 1f b8 01 00 00 ;
16309: 8e 88 01 01 09 b8 00 ;
02 09 00 01 00 ;
16315: 1a 88 02 ;
16318: 35 a1 fd 01 88 01 ; call 0x160ba
1631e: 8e 88 02 01 09 88 02 ;
05 09 b8 01 ;
04 09 00 32 00 ;
1632e: 8e 88 01 01 09 b8 00 ;
04 09 00 05 ;
02 09 00 01 00 ;
1633e: 1a 88 03 ;
16341: 35 78 fd 01 88 01 ; call 0x160ba
16347: 8e 88 02 01 09 88 02 ;
02 09 88 03 00 ;
16353: 8e 88 02 01 09 88 02 ;
05 09 b0 01 ;
04 09 b8 00 00 ;
16363: 1e 88 02 ; ret (88 02)
;-------------------------------------------------
; 盾の防御力
;-------------------------------------------------
; a0: 基本値, a1: 修正値, a2: 基本値補正
;-------------------------------------------------
16366: 1f 88 02 00 00 ;
1636b: 20 b8 00 b8 02 ;
16370: 15 13 b8 00 00 00 40 89 00 ff ; jmpt 0x16400
1637a: 1f b0 01 b8 00 ;
1637f: 15 15 b8 01 00 00 41 1c 00 ff ; jmpf 0x163a2
16389: 20 b0 01 b8 01 ;
1638e: 15 15 b0 01 00 00 41 08 00 ff ; jmpf 0x1639d
16398: 1f b0 01 00 00 ;
1639d: 1f b8 01 00 00 ;
163a2: 8e 88 01 01 09 b8 00 ;
02 09 00 01 00 ;
163ae: 1a 88 02 ;
163b1: 33 00 01 8d 04 01 88 01 ; tcall 0x160ba
163b9: 8e 88 02 01 09 88 02 ;
05 09 b8 01 ;
04 09 00 32 00 ;
163c9: 8e 88 01 01 09 b8 00 ;
04 09 00 03 ;
02 09 00 01 00 ;
163d9: 1a 88 03 ;
163dc: 33 00 01 8d 04 01 88 01 ; tcall 0x160ba
163e4: 8e 88 02 01 09 88 02 ;
02 09 88 03 00 ;
163f0: 8e 88 02 01 09 88 02 ;
05 09 b0 01 ;
04 09 b8 00 00 ;
16400: 15 15 b8 01 00 00 41 08 00 ff ; if (!(修正値 < 0)) jmp 0x1640f
1640a: 1f b8 01 00 00 ; (修正値) ← 0
1640f: 23 b8 01 00 02 ;
16414: 8e 88 02 01 09 ;
88 02 02 09 b8 01 00 ; f2 += (修正値) // 2
16420: 1e 88 02 ; ret f2
;-------------------------------------------------
; ダメージ計算
;-------------------------------------------------
...
2c275: 8e 88 01 01 09 88 02 ; f1 ← (攻撃力)
00 ;
2c27d: 1a b0 01 ; w1 ← (乱数 0〜250)
2c280: 52 01 00 fb ;
2c284: 21 b0 01 00 7d ; w1 -= 125 (w1: 乱数 -125〜125)
2c289: 8e 88 01 01 09 88 01 ;
05 09 b0 01 ;
04 09 01 03 e8 00 ; f1 ← (攻撃力) × w1 / 1000.0
2c29a: 8e 88 01 01 09 88 01 ;
02 09 88 02 ;
03 09 88 03 00 ; f1 ← f1 + (攻撃力) - (防御力)
2c2aa: 1a b0 01 ;
2c2ad: 90 88 01 ; w1 ← round(f1)
2c2b0: 1a 88 01 ;
2c2b3: 33 00 01 1c 06 02 b8 00 97 ff ; tcall 0xb093 ; d1 ← (ダメージ乗数)
2c2bd: 22 88 01 b0 01 ; d1 *= w1
2c2c2: 23 88 01 01 03 e8 ; d1 //= 1000
2c2c8: 1f b0 01 88 01 ; w1 = d1
2c2cd: 15 13 b0 01 00 00 41 28 00 ff ; (!(w1 <= 0)) jmp 0x2c2fc
2c2d7: 15 01 c1 10 41 0b 00 ff ; if (通常のダンジョン) jmp 0x2c2e7
2c2df: 1f b0 01 00 01 ; w1 ← 1
2c2e4: 12 17 00 ; jmp 0x2c2fc
2c2e7: 1a b0 01 ;
2c2ea: 52 00 04 ; w1 ← 乱数 0〜3
2c2ed: 15 11 b0 01 00 02 41 08 00 ff ; (!(w1 != 2)) jmp 0x2c2fc
2c2f7: 1f b0 01 00 01 ; w1 ← 1
2c2fc: 1e b0 01 ; ret w1
;-------------------------------------------------
; ダメージ乗数
;-------------------------------------------------
0b093: 1f 88 01 01 03 e8 ; d1 ← 1000
0b099: 1a b0 01 ;
0b09c: 34 b8 01 b6 06 00 ;
0b0a2: 15 18 b0 01 00 08 41 22 00 ff ; jmpf 0x0b0cb
0b0ac: 1a b0 02 ;
0b0af: 34 b8 00 01 07 01 00 01 ; w2 ← 分子
0b0b7: 1f 88 02 88 01 ; d2 = d1
0b0bc: 22 88 02 b0 02 ; d2 *= w2
0b0c1: 28 88 02 00 01 ; d2 >>= 1
0b0c6: 20 88 01 88 02 ; d1 += d2
0b0cb: 15 18 b0 01 00 02 41 22 00 ff ; jmpf 0x0b0f4
0b0d5: 1a b0 02 ;
0b0d8: 34 b8 00 01 07 01 00 02 ;
0b0e0: 1f 88 02 88 01 ;
0b0e5: 22 88 02 b0 02 ;
0b0ea: 28 88 02 00 01 ;
0b0ef: 20 88 01 88 02 ;
0b0f4: 15 18 b0 01 00 01 41 22 00 ff ; jmpf 0x0b11d
0b0fe: 1a b0 02 ;
0b101: 34 b8 00 01 07 01 00 03 ;
0b109: 1f 88 02 88 01 ;
0b10e: 22 88 02 b0 02 ;
0b113: 28 88 02 00 01 ;
0b118: 20 88 01 88 02 ;
0b11d: 15 18 b0 01 00 04 41 22 00 ff ; jmpf 0x0b146
0b127: 1a b0 02 ;
0b12a: 34 b8 00 01 07 01 00 04 ;
0b132: 1f 88 02 88 01 ;
0b137: 22 88 02 b0 02 ;
0b13c: 28 88 02 00 01 ;
0b141: 20 88 01 88 02 ;
0b146: 15 18 b0 01 00 10 41 22 00 ff ; jmpf 0x0b16f
0b150: 1a b0 02 ;
0b153: 34 b8 00 01 07 01 00 05 ;
0b15b: 1f 88 02 88 01 ;
0b160: 22 88 02 b0 02 ;
0b165: 28 88 02 00 01 ;
0b16a: 20 88 01 88 02 ;
0b16f: 1e 88 01 ; ret d1
|
アイテム(武器/盾の修正値・矢の本数・弾の個数・杖の回数・壺の容量)
ID |
該当するアイテム |
+0 |
+1 |
+2 |
+3 |
+4 |
+5 |
+6 |
+7 |
+8 |
+9 |
+10 |
+11 |
+12 |
+13 |
+14 |
0 |
武器(鍛えた木刀以外) |
53.7 % (51/95) |
31.6 % (30/95) |
10.5 % (10/95) |
4.2 % (4/95) |
|
|
|
|
|
|
|
|
|
|
|
1 |
鍛えた木刀 |
|
|
|
|
53.7 % (51/95) |
31.6 % (30/95) |
10.5 % (10/95) |
4.2 % (4/95) |
|
|
|
|
|
|
|
2 |
盾(鍛えた木の盾以外) |
53.7 % (51/95) |
31.6 % (30/95) |
10.5 % (10/95) |
4.2 % (4/95) |
|
|
|
|
|
|
|
|
|
|
|
3 |
鍛えた木の盾 |
|
|
|
|
53.7 % (51/95) |
31.6 % (30/95) |
10.5 % (10/95) |
4.2 % (4/95) |
|
|
|
|
|
|
|
4 |
木の矢・鉄の矢・デブータの石 |
|
|
|
|
|
31.9 % (51/160) |
31.2 % (50/160) |
6.2 % (10/160) |
6.2 % (10/160) |
6.2 % (10/160) |
6.2 % (10/160) |
3.1 % (5/160) |
3.1 % (5/160) |
3.1 % (5/160) |
2.5 % (4/160) |
5 |
銀の矢・毒矢 |
|
|
|
28.3 % (51/180) |
27.8 % (50/180) |
16.7 % (30/180) |
16.7 % (30/180) |
5.6 % (10/180) |
5.0 % (9/180) |
|
|
|
|
|
|
6 |
会心の矢・かまいたちの矢 |
|
|
|
51.0 % (51/100) |
30.0 % (30/100) |
19.0 % (19/100) |
|
|
|
|
|
|
|
|
|
7 |
大砲の弾 |
|
|
|
46.4 % (51/110) |
27.3 % (30/110) |
18.2 % (20/110) |
8.2 % (9/110) |
|
|
|
|
|
|
|
|
8 |
杖 |
|
|
|
30.0 % (51/170) |
29.4 % (50/170) |
17.6 % (30/170) |
17.6 % (30/170) |
5.3 % (9/170) |
|
|
|
|
|
|
|
9 |
(未使用) |
|
|
|
|
34.0 % (51/150) |
33.3 % (50/150) |
20.0 % (30/150) |
6.7 % (10/150) |
6.0 % (9/150) |
|
|
|
|
|
|
10 |
壺(合成の壺以外) |
|
|
|
36.4 % (51/140) |
35.7 % (50/140) |
21.4 % (30/140) |
6.4 % (9/140) |
|
|
|
|
|
|
|
|
11 |
合成の壺 |
|
|
34.0 % (51/150) |
33.3 % (50/150) |
32.7 % (49/150) |
|
|
|
|
|
|
|
|
|
|
ソース
+
|
... |
7c8a9: 18 00 20 00 30 00 38 00 48 00 66 00 78 00 84 00
92 00 A2 00 B4 00 C2 00
32 00 1E 00 0A 00 05 00 FF FF
00 00 00 00 00 00 00 00 32 00 1E 00 0A 00 05 00 FF FF
32 00 1E 00 0A 00 05 00 FF FF
00 00 00 00 00 00 00 00 32 00 1E 00 0A 00 05 00 FF FF
00 00 00 00 00 00 00 00 00 00 32 00 32 00 0A 00 0A 00 0A 00 0A 00 05 00 05 00 05 00 05 00 FF FF
00 00 00 00 00 00 32 00 32 00 1E 00 1E 00 0A 00 0A 00 FF FF
00 00 00 00 00 00 32 00 1E 00 14 00 FF FF
00 00 00 00 00 00 32 00 1E 00 14 00 0A 00 FF FF
00 00 00 00 00 00 32 00 32 00 1E 00 1E 00 0A 00 FF FF
00 00 00 00 00 00 00 00 32 00 32 00 1E 00 0A 00 0A 00 FF FF
00 00 00 00 00 00 32 00 32 00 1E 00 0A 00 FF FF
00 00 00 00 32 00 32 00 32 00 FF FF
;----------------------
; 判定箇所
;----------------------
7ca97: 1f b0 02 00 00 ;
7ca9c: 1f b0 01 00 00 ;
7caa1: 12 0c 00 ; jmp 0x7caae
7caa4: 20 b0 02 b0 04 ; w2 += w4
7caa9: 20 b0 01 00 01 ; w1 += 1
7caae: 1a b0 04 ;
7cab1: 74 b8 00 b0 01 ; w4 ← weight
7cab6: 15 12 b0 04 00 00 40 e7 ff ff ; if (w4 >= 0) jmp 0x7caa4
7cac0: 15 13 b0 02 00 00 40 3f 00 ff ; if (w2 == 0) jmp 0x7cb06
7caca: 1a b0 03 ;
7cacd: 52 b0 02 ; w3 ← 乱数 0〜(w2-1)
7cad0: 1f b0 02 00 00 ; w2 = 0
7cad5: 1f b0 01 00 00 ; w1 = 0
7cada: 1a b0 04 ;
7cadd: 74 b8 00 b0 01 ; w4 ← weight
7cae2: 15 10 b0 04 00 00 40 15 00 ff ; if (w4 == 0) jmp 0x7cafe
7caec: 20 b0 02 b0 04 ; w2 += w4
7caf1: 15 12 b0 02 b0 03 41 06 00 ff ; (!(w2 >= w3)) jmp 0x7cafe
; (和) >= (乱数値) の場合(注意: ">" ではない)
7cafb: 1e b0 01 ; ret w1
7cafe: 20 b0 01 00 01 ; w1 += 1
7cb03: 12 d6 ff ; jmp 0x7cada
7cb06: 1e 00 00 ; ret 0
|
鋼賀の隠し穴 43F の店の出現率
43F に店が出現する確率は約 45/2968 (≈ 1.52 %) です。
(店フラグが on となる確率が約 1/53(0x35 で "巫女" ?)、店を設置可能なマップが選択される確率が約 45/56 です)
店が出現する時刻 [PC 表示用]
店の出現の有無(ダンジョンの乱数値)は、「ダンジョンに入る前にセーブを行います」の画面で「はい」を押した時刻によって決まります。
43F に店が出現する(15 分先までの)時刻一覧:
ソース
+
|
... |
;--------------------------------------
; script: 0xc8394 から呼ばれる
;--------------------------------------
; a0 ← (48 04)
; a1 〜 a15 ← 0 (x86: 0x4de2bd (0x4dc550) 内で初期化される)
;--------------------------------------
caac0: 1f b0 03 00 00 ; w3 = 0
caac5: 15 10 70 05 00 05
10 70 02 00 2b 41 2e 00 ff ; if ((ダンジョン ID) == 5 && (階層) == 43) {
caad4: 15 14 b8 01 00 00 41 0c 00 ff ; if (a1 > 0) {
caade: 1a b0 02 ; dest = w2
caae1: 52 b8 01 ; w2 = 乱数 0〜(a1-1)
caae4: 12 08 00 ; } else {
caae7: 1a b0 02 ; dest = w2
caaea: 52 00 35 ; w2 = 乱数 0〜52
; }
caaed: 15 10 b0 02 00 00 41 0b 00 ff ; if (w2 == 0) {
caaf7: 1f b0 03 00 20 ; w3 = 0x20 // 店フラグ
caafc: 44 40 06 ; set flag (40 06)
; }
; }
...
c8394: 35 2b 27 01 48 04 ; call 0xcaac0 (a0: (48 04))
;--------------------------------------
; 鋼賀の隠し穴 43F 店処理
;--------------------------------------
...
c9bfa: 1a b0 0a ; dest = w10
c9bfd: 52 00 02 ; w10 = 乱数 0〜1
c9c00: 15 10 b0 0a 00 00 41 09 00 ff ;
c9c0a: 45 80 01 ; clear flag (80 01)
c9c0d: 12 05 00 ; jmp 0xc9c13
c9c10: 44 80 01 ; set flag (80 01)
...
c9c3f: 15 01 80 01 41 0b 00 ff
1f b0 0c 00 26 ; w12 ← 0x26 (黄泉水底ノ鎖)
12 07 00
c9c4f: 1f b0 0c 00 4a ; w12 ← 0x4a (黄泉巫女神ノ盾)
...
c9c7f: 15 01 80 01 41 0b 00 ff
1f b0 0c 00 4a ; w12 ← 0x4a (黄泉巫女神ノ盾)
12 07 00
c9c8f: 1f b0 0c 00 26 ; w12 ← 0x26 (黄泉水底ノ鎖)
|
店主焼き 成功確率
店主焼き実行時にアプリケーションが終了する(アクセス違反が起きる)かどうかは、(主に)以下の 3 つの要素に依存しています:
- アスカの向き
- 実行時に取得される 0〜4 の範囲の乱数値
- プロセス AsfPc.exe の仮想アドレス 0x03e003e4 が読み取り可能かどうか(基本的に、起動時に決定します)
店主焼き 成功表
補足:
- (不定) はプロセス AsfPc.exe の仮想アドレス 0x03e003e4 が読み取り可能であった場合に限り成功します。
方向 ID |
アスカの向き |
乱数値 0 |
乱数値 1 |
乱数値 2 |
乱数値 3 |
乱数値 4 |
成功確率 |
0 |
上 |
○ |
(不定) |
× |
× |
× |
20 % or 40 % |
1 |
右上 |
○ |
× |
× |
× |
×? |
20 % |
2 |
右 |
○ |
× |
× |
○ |
○ |
60 % |
3 |
右下 |
○ |
× |
× |
× |
○ |
40 % |
4 |
下 |
○ |
× |
× |
× |
○ |
40 % |
5 |
左下 |
○ |
○ |
× |
○ |
○ |
80 % |
6 |
左 |
○ |
(不定) |
× |
× |
○ |
40 % or 60 % |
7 |
左上 |
○ |
(不定) |
○ |
× |
○ |
60 % or 80 % |
店主焼き 内部処理結果
+
|
... |
方向 ID |
乱数値 |
オフセット |
画像 (?) 処理数 |
結果 |
Exception |
0 |
0 |
0x000548 |
2 |
○ |
|
0 |
1 |
0x00056c |
1 |
? |
アクセス違反: 0x03e003e4 |
0 |
2 |
0x000580 |
160 |
× |
アクセス違反: 0xffd9000c |
0 |
3 |
0x000f84 |
9 |
× |
アクセス違反: 0x00060009 |
0 |
4 |
0x001018 |
9 |
× |
アクセス違反: 0x00300414 |
1 |
0 |
0x000574 |
2 |
○ |
|
1 |
1 |
0x000598 |
1 |
× |
アクセス違反: 0xbc28bc2c |
1 |
2 |
0x0005ac |
160 |
× |
アクセス違反: 0xfd73f115 |
1 |
3 |
0x000fb0 |
4294954189 |
× |
アクセス違反: (予測不能) |
1 |
4 |
-0x03237c |
(不定) |
×? |
アクセス違反: (予測不能) |
2 |
0 |
0x0005a0 |
2 |
○ |
|
2 |
1 |
0x0005c4 |
1 |
× |
アクセス違反: 0xfd73f115 |
2 |
2 |
0x0005d8 |
160 |
× |
アクセス違反: 0x00000004 |
2 |
3 |
0x000fdc |
0 |
○ |
|
2 |
4 |
0x000fe0 |
0 |
○ |
|
3 |
0 |
0x0005cc |
2 |
○ |
|
3 |
1 |
0x0005f0 |
1 |
× |
アクセス違反: 0xfd73f115 |
3 |
2 |
0x000604 |
160 |
× |
アクセス違反: 0x000c000b |
3 |
3 |
0x001008 |
4294967288 |
× |
アクセス違反: 0x00300414 |
3 |
4 |
0x000f8c |
0 |
○ |
|
4 |
0 |
0x0005f8 |
2 |
○ |
|
4 |
1 |
0x00061c |
1 |
× |
アクセス違反: 0xfd73f115 |
4 |
2 |
0x000630 |
160 |
× |
アクセス違反: 0x00000004 |
4 |
3 |
0x001034 |
1791 |
× |
アクセス違反: (予測不能) |
4 |
4 |
0x008028 |
0 |
○ |
|
5 |
0 |
0x000624 |
2 |
○ |
|
5 |
1 |
0x000648 |
1 |
○ |
|
5 |
2 |
0x00065c |
160 |
× |
アクセス違反: 0xfffcfff6 |
5 |
3 |
0x001060 |
0 |
○ |
|
5 |
4 |
0x001064 |
0 |
○ |
|
6 |
0 |
0x000650 |
2 |
○ |
|
6 |
1 |
0x000674 |
1 |
? |
アクセス違反: 0x03e003e4 |
6 |
2 |
0x000688 |
160 |
× |
アクセス違反: 0xfff2fff5 |
6 |
3 |
0x00108c |
8 |
× |
アクセス違反: 0x00060009 |
6 |
4 |
0x001110 |
5 |
○ |
|
7 |
0 |
0x00067c |
2 |
○ |
|
7 |
1 |
0x0006a0 |
4 |
? |
アクセス違反: 0x03e003e4 |
7 |
2 |
0x0006e4 |
0 |
○ |
|
7 |
3 |
0x0006e8 |
1791 |
× |
アクセス違反: 0xfff90007 |
7 |
4 |
0x0076dc |
0 |
○ |
|
|
ソース
- DATA016.BIN (0x126800-0x2db78b): 店主焼きの際に参照されるデータ
- 例: アドレス: 0x126ee8 (0x126800 + 0x06e8) の値 (0xff 0x06 ...) を int16_t として解釈した場合、1791 となります。
- script:
+
|
... |
...
4caed: 1a b0 03
4caf0: 52 00 05 ; w3 ← 乱数 0〜4
4caf3: 4f 56 00 ff b0 03
4caf9: 00
|
+
|
... |
;------------------------------------------------------------------
; edx の値(店主焼きの場合、乱数値 0〜4)に応じて、ポインタ(オフセット)を求める
;------------------------------------------------------------------
...
4e3186: 85 d2 test edx,edx
4e3188: 74 14 je 0x4e319e
4e318a: 55 push ebp
4e318b: eb 03 jmp 0x4e3190
4e318d: 8d 49 00 lea ecx,[ecx+0x0]
4e3190: 0f bf 29 movsx ebp,WORD PTR [ecx]
4e3193: c1 e5 04 shl ebp,0x4
4e3196: 4a dec edx
4e3197: 8d 4c 29 04 lea ecx,[ecx+ebp*1+0x4]
4e319b: 75 f3 jne 0x4e3190
4e319d: 5d pop ebp
...
4e31d3: 0f bf 49 02 movsx ecx,WORD PTR [ecx+0x2] ; (向き, 乱数値) == (右上, 4) の場合、アクセス違反を生じうる
...
;------------------------------------------------------------------
; 画像周りの処理?
;------------------------------------------------------------------
414782: 8b 45 48 mov eax,DWORD PTR [ebp+0x48] ; eax: オフセット
414785: 8d 50 04 lea edx,[eax+0x4]
414788: 0f bf 00 movsx eax,WORD PTR [eax]
41478b: 85 c0 test eax,eax
41478d: 56 push esi
41478e: 57 push edi
41478f: 89 54 24 10 mov DWORD PTR [esp+0x10],edx ; edx: オフセット+4
414793: 89 44 24 2c mov DWORD PTR [esp+0x2c],eax ; eax: 処理数
414797: 0f 84 08 01 00 00 je 0x4148a5
...
...
4148e0: 8b 4c 24 10 mov ecx,DWORD PTR [esp+0x10] ; ecx: オフセット
4148e4: 0f bf 79 02 movsx edi,WORD PTR [ecx+0x2] ; edi: 画像 ID?
4148e8: 8b 55 44 mov edx,DWORD PTR [ebp+0x44]
4148eb: 8b 4a 14 mov ecx,DWORD PTR [edx+0x14]
4148ee: 8a 45 0a mov al,BYTE PTR [ebp+0xa]
4148f1: c1 e7 04 shl edi,0x4
4148f4: 03 f9 add edi,ecx ;
...
...
414973: 8b 57 0c mov edx,DWORD PTR [edi+0xc]
414976: 8b 42 04 mov eax,DWORD PTR [edx+0x4] ; (アクセス違反を生じる箇所)
...
...
414df0: 8b 4c 24 10 mov ecx,DWORD PTR [esp+0x10]
414df4: 8b 44 24 2c mov eax,DWORD PTR [esp+0x2c]
414df8: 83 c1 10 add ecx,0x10 ; (オフセット) += 16
414dfb: 48 dec eax ; (処理数) -= 1
414dfc: 89 4c 24 10 mov DWORD PTR [esp+0x10],ecx
414e00: 89 44 24 2c mov DWORD PTR [esp+0x2c],eax
414e04: 0f 85 d6 fa ff ff jne 0x4148e0
|
その他(未整理)
+
|
(処理一覧 [一部のみ] および ソース) |
ファイルオフセット (復号化された DATA020.BIN) |
バイトコード |
乱数の範囲 |
用途 |
0x019dc |
52 b8 03 |
0〜 |
投げ物の命中判定 |
0x05199 |
52 00 08 |
0〜7 |
武器「ケ」印の武器はじき判定 |
0x05c97 |
52 b0 09 |
0〜 |
アスカの攻撃の命中判定 |
0x05f51 |
52 00 20 |
0〜31 |
武器「飯」, 「に」印のドロップ判定(補足: 「おにぎり」のドロップ確率: 1/32 × (「飯」印の個数) + 6/32 × (「に」印の個数) ) |
0x05f71 |
52 00 10 |
0〜15 |
武器「銭」印のドロップ判定 |
0x0601e |
52 00 08 |
0〜7 |
武器「会」印 + 「会心の腕輪」 での会心判定 |
0x0603c |
52 00 04 |
0〜3 |
武器「会」印 または 「会心の腕輪」 単独での会心判定 |
0x06127 |
52 00 08 |
0〜7 |
武器「眠」印の睡眠状態化判定 |
0x0759a |
52 00 10 |
0〜15 |
盾「眠」印の睡眠状態化判定 |
0x077ff |
52 00 10 |
0〜15 |
盾「飯」印のおにぎり状態化判定 |
0x0789b |
52 00 04 |
0〜3 |
「たかとびの腕輪」の高飛び判定 |
0x09530 |
52 00 02 |
0〜1 |
アイテムの祝福状態の消失判定 |
0x10016 |
52 00 0a |
0〜9 |
モンスターの出現判定(前回の出現から一定ターン数経過後、毎ターン判定) |
0x130bb |
52 00 65 |
0〜100 |
ワナの発動判定(補足: (乱数値) ≤ (境界値) の場合にワナが発動する) |
0x28b46 |
52 01 00 ff |
0〜254 |
モンスターの起床判定(出現時) |
0x28be2 |
52 01 00 ff |
0〜254 |
モンスターの固定アイテム所持判定(出現時?) |
0x2b523 |
52 00 08 |
0〜7 |
モンスターからの攻撃の回避判定 #1(乱数値が 0 であった場合、回避率を 100 % に設定する) |
0x2c280 |
52 01 00 fb |
0〜250 |
ダメージ計算 |
0x2f844 |
52 01 00 ff |
0〜254 |
モンスターのアイテムドロップ判定(固定アイテムは除く) |
0x2f947 |
52 01 00 ff |
0〜254 |
モンスターの起床判定(部屋出入り時) |
0x2f98a |
52 01 00 ff |
0〜254 |
モンスターの起床判定(隣接時) |
0x309ab |
52 00 07 |
0〜6 |
レベルアップ時の最大 HP 上昇量の計算 |
0x31ec3 |
52 00 64 |
0〜99 |
モンスターの痛恨判定 |
0x3308c |
52 00 64 |
0〜99 |
モンスターの分裂判定(補足: (乱数値) ≤ (境界値) の場合に分裂するため、分裂確率は設定確率よりも 1 % 高い) |
0x34cd5 |
52 00 64 |
0〜99 |
モンスターからの攻撃の回避判定 #2 |
0x77ad5 |
52 00 06 |
0〜5 |
「困った巻物」の効果の選択 |
0x797a2 |
52 00 20 |
0〜31 |
「識別の巻物」の特殊効果判定(0: 全識別) |
0x7cacd |
52 b0 02 |
0〜 |
武器・盾の修正値、壺の容量、杖の回数、矢・石の数の計算など |
0x8225a |
52 00 06 |
0〜5 |
「ねがいの腕輪」の効果の選択 |
0x8697f |
52 00 06 |
0〜5 |
「まずそうなおにぎり」の効果の選択 |
0x86b38 |
52 00 07 |
0〜6 |
「特製おにぎり」の効果の選択 |
0x86dfb |
52 00 03 |
0〜2 |
「コヨリのおにぎり」の効果の選択 |
0x86f48 |
52 00 28 |
0〜39 |
「奇妙なおにぎり」の効果の選択 |
0x8a235 |
52 00 64 |
0〜99 |
ワナの消滅判定 |
0x95c6a |
52 01 7f ff |
0〜32766 |
救助用の冒険の識別子 |
0xc7046 |
52 01 7f ff |
0〜32766 |
ダンジョン生成用の乱数値の計算 |
0xc7612 |
52 00 64 |
0〜99 |
アイテムの(初期状態での)未識別状態の判定 |
0xc767c |
52 00 64 |
0〜99 |
アイテムの呪い状態の判定 |
0xc769b |
52 00 64 |
0〜99 |
アイテムの祝福状態の判定 |
0xc7e23 |
52 b8 02 |
0〜 |
出現アイテムの種類の選択 |
0xc7eb8 |
52 b0 03 |
0〜 |
(種類を固定した状態での)アイテムの選択 |
0xca880 |
52 b8 03 |
0〜 |
出現モンスター・ワナの選択 |
0xcaa24 |
52 b8 02 |
0〜 |
BGM・地形グラフィックの選択 |
|
共鳴バグ(ドラゴンセットバグ)
このバグは(おそらく)条件分岐に用いるレジスタの指定ミスに因るものです。
指定されたレジスタは(おそらく)初期化されていないため、基本値が加算されるかどうかは不定(または、それまでの行動依存)と考えられます。
少なくとも、以下のタイミングで共鳴バグは発生 または 解消します:
- アスカの攻撃後
- 装備の変更時
- やりすごしの壺からの復帰時
- モンスターの出現時
- 階層変更時
このバグは、以下のようにスクリプトを変更することで解消します。
+
|
... |
; 共鳴効果による基本値の加算の有無
;
...
cd293: 1a 70 0c
cd296: 35 7e 25 00 ; (70 0c) ← 共鳴セット番号
- cd29a: 15 11 b0 06 00 00 41 0e 00 ff ; (b0 06) が 0 の場合、基本値の加算を行わない(元の処理)
+ cd29a: 15 11 70 0c 00 00 41 0e 00 ff ; (70 0c) が 0 の場合、基本値の加算を行わない(変更後)
cd2a4: 1a 88 00
cd2a7: 35 33 26 02 70 0c 00 01 ; 基本値 加算量の設定
|
未識別名の選択手順
種類 k(0: 腕輪, 1: 草, 2: 巻物, 3: 杖, 4: 壺) の i 番目のアイテムの未識別名番号 uk, i は以下の関数と同等の処理によって決定されます。
(補足: 偏りが生じないシャッフルではありません。例えば、(初期状態で全ての壺が未識別となるダンジョンにおいて)「保存の壺」の未識別名が「四角い壺」となる確率は約 10.2 %、「重厚な壺」となる確率は約 1.0 % です)
constexpr size_t K = 5;
constexpr size_t sizes[5] = {46, 33, 64, 35, 25};
auto unidentified_name_indices(AsukaRng& rng, const size_t ratios[K]) {
std::vector<std::vector<uint8_t>> ret(K);
for (size_t k = 0; k < K; ++k) {
const size_t n = sizes[k];
size_t m = n * ratios[k] / 100; // 約 ratios[k] % のアイテムを未識別とする
if (m > n) m = n;
auto& u_k = ret[k]; u_k.assign(n, 0xff); // 初期状態は識別済み(0xff)とする
for (size_t u = 0; u < m; ++u) {
int r = rng.range(n);
for (size_t i = 0; ; i = (i + 1) % n) {
if (u_k[i] != 0xff) continue;
if (--r >= 1) continue;
u_k[i] = u; // 種類 k の i 番目のアイテムの未識別名番号を u とする
break;
}
}
}
return ret;
}
ダンジョンデータ
各ダンジョンのデータは DATA019.BIN 中に圧縮データとして格納されています。
また、各(圧縮)データの (格納位置, バイト数) は DATA000.BIN 中に記述されています。
ダンジョン生成
ダンジョン生成用の乱数値
日本標準時 (JST) h 時 m 分 s 秒に(「大きいおにぎり」のみが自動的に追加される)ダンジョンに入った場合、ダンジョン生成用の乱数値は以下の関数 dungeon_seed と同等の処理によって計算されます。
ここで、c は食料を呪い状態にするための確率設定値で、直前の場所(「すぐにやり直す」を選択した場合はダンジョン)での設定値を入力します。
例:
- 「十六夜の里」「鋼賀村」「八神楽の森」の場合: 0
- 「白蛇島」「裏白蛇島」の場合: 5
uint16_t dungeon_seed(size_t h, size_t m, size_t s, size_t c) {
h = (h + 15) % 24; // JST -> UTC
AsukaRng rng(h * 3600 + m * 60 + s);
rng.range(29999);
rng.range(30000);
rng.range(30000);
// 自動的に追加されるアイテムに対する乱数消費
// 「大きいおにぎり」用
size_t r = rng.range(100); // 呪い状態判定用 乱数値
if (r >= c) rng.range(100); // 祝福状態判定用 乱数値
return rng.range(0x7fff);
}
階層別 乱数値
乱数値 s のダンジョンの(内部)階層値 f に移動した際、乱数生成器は以下の関数 floor_seed が返す値と同一の値によって初期化されます。
uint16_t floor_seed(uint16_t s, uint16_t f) {
static constexpr uint16_t consts[128] = {
0x015a, 0x6a44, 0x56e1, 0x5c6b, 0x6b9c, 0x46b9, 0x20de, 0x7fde,
0x660e, 0x0276, 0x35fe, 0x73be, 0x048e, 0x722e, 0x7348, 0x6210,
0x7bdb, 0x670c, 0x621d, 0x7995, 0x3f5b, 0x2365, 0x4245, 0x01c4,
0x20e3, 0x0697, 0x315a, 0x40ca, 0x1b7f, 0x45ed, 0x0df7, 0x35ea,
0x2924, 0x0b6d, 0x4152, 0x679a, 0x5760, 0x7357, 0x334f, 0x2aef,
0x66e0, 0x1bda, 0x6d1a, 0x01d4, 0x31d4, 0x7502, 0x3d5d, 0x58a2,
0x73b5, 0x2333, 0x3e99, 0x1131, 0x6774, 0x3d43, 0x592b, 0x049c,
0x3721, 0x608e, 0x4c95, 0x4cda, 0x367b, 0x115e, 0x155c, 0x715a,
0x4c9f, 0x0d0d, 0x1e29, 0x3266, 0x0d83, 0x66d4, 0x251d, 0x5667,
0x5cca, 0x29b2, 0x3175, 0x4e26, 0x1cd3, 0x708b, 0x25c1, 0x566e,
0x2967, 0x2095, 0x66e6, 0x206d, 0x295e, 0x4c9e, 0x550a, 0x7215,
0x3314, 0x00e6, 0x162b, 0x51ba, 0x3c74, 0x4e85, 0x5eab, 0x0f90,
0x7c4c, 0x5012, 0x659e, 0x675f, 0x29ab, 0x75df, 0x6e1c, 0x0986,
0x1aaf, 0x465c, 0x62f0, 0x137c, 0x6953, 0x1679, 0x1216, 0x5feb,
0x2c6e, 0x6c38, 0x120d, 0x6298, 0x5236, 0x467b, 0x73b6, 0x09da,
0x7a53, 0x1388, 0x10b5, 0x29ed, 0x7936, 0x0350, 0x7fbc, 0x21ee
};
if (s == 0) s = 1234;
return (s + consts[f & 0x7f]) & 0x7fff;
}
初期未識別名
乱数値 s のダンジョンでの各アイテムの初期未識別名は、以下の関数と同等の処理によって決定されます。
auto initial_unidentified_name_indices(uint16_t s, const size_t ratios[K]) {
auto rng = AsukaRng(floor_seed(s, 0));
return unidentified_name_indices(rng, ratios);
}
計算機(時刻検索・乱数値列挙)[PC 表示用]
時刻検索結果
乱数値列挙
レアアイテム
注意: 到達可能かどうかは未調査です。
白蛇島
プチフェニックスの箱(祝福)
ダンジョンの乱数値 |
SOS の呪文(42F) |
詳細 |
0x480c |
すいおは ておふこ ちう |
41F 店: 1 個 |
0x6e92 |
ねづねど びほなも やが |
41F 店: 1 個 |
0x7ca7 |
とおずべ ふつてづ せを |
41F 店: 1 個 非推奨です。39F の階段で中断し 40F から再開した場合、出現しやすいようです。(出現しない場合もあります) |
裏白蛇島
ケンゴウのカタナ
ダンジョンの乱数値 |
SOS の呪文(99F) |
詳細 |
0x56c0 |
みけげむ ばらそた えひ |
72F 店: 1 個 74F 店: 1 個 |
ドラゴンキラー(龍神剣)
ダンジョンの乱数値 |
SOS の呪文(99F) |
詳細 |
0x0bc3 |
すんくむ ぐんくど なお |
42F 店: 1 個 49F 店: 3 個 |
0x162d |
ぶるゆか わまたた だづ |
24F 店: 3 個 45F 店: 1 個 |
0x2d22 |
ぐだてづ びつかゆ ねば |
43F 店: 3 個 46F 店: 1 個 |
0x5654 |
ぞにもう のぢすた ゆめ |
47F 店: 3 個 70F 店: 1 個 76F 店: 1 個 |
0x7f55 |
つみらえ とあせを せゆ |
22F 店: 1 個 38F 店: 2 個 43F 店: 1 個 |
補足: 記載していない階層にも出現する可能性があります。
最終更新:2025年02月25日 19:53