もうすぐ全てが明らかになりそうな、DQ9宝地図の中断テーブルや各階層のフロアMAPなどの「計算方法」を
解明するスレです。
アルゴリズム解析が趣味の方、自分でツール・CGI を作りたい方用です。
結論だけ知りたい方は解析依頼スレで聞いた方が早いです。このスレには実用的価値は■全く■ありませんw
・「巨大なテーブルがある」とか「○秒周期」説とかすでにガセと判明している説の話題はスレが
荒れるだけなのでやめてください
(疑似乱数を使って100以下の値に縮退させているので、一見、周期があるようにみえますが、
あくまで「計算」で算出されています)
・検証する場合は、各種のデータが多くの人によって何度も確認されている川崎ロッカー3階の
A箱推奨
地図名:あらぶる光の地図Lv86 発見者:さわぴ
通称:ロッカー(川崎駅のロッカーで配布していたのが起源)
内容:S4A6マップ
■0xB7 0x3CA2■
場所:90
地図No:183/15522
・そのままCGIに転用できて、共有/共同検証できるので、言語はperl推奨。ま、読めれば何でも構いませんが。。。
■既にわかってること1
疑似乱数は非常に簡単
sub dq9_rand
{
$SEED = $SEED * 1103515245 + 12345;
return $SEED >> 0x10 & 32767;
}
宝箱のアイテム解明では、この乱数値をさらに32767で割り、パーセントの整数部分で
ある 0〜99(0x63)を用いる
■だいぶ解明されてきたこと
・宝箱の中身決定は、(MAP種別16bit、 中断技秒数、 あともう1個なにか?)から$SEEDを
決定しているだけで、乱数SEEDそれ自体を使い回していない模様。
・「あともう1個なにか?」は、階層か宝箱数の累積数あたりと推測されている。この推測は、川崎
ロッカー等で、「1階もぐる度に1秒ずつずれる」という現象に強く符合する。
■既にわかっていること2
疑似乱数0〜99(0x63)が算出されると、それをインデックス0〜15に置き換える。すなわち
疑似乱数→インデックス
0〜9 → 0
10〜19 → 1
20〜29 → 2
30〜39 → 3
40〜49 → 4
50〜64 → 5
65〜74 → 6
75〜84 → 7
85〜92 → 8
93 → 9
94 → 10
95 → 11
96 → 12
97 → 13
98 → 14
99 → 15
したがって、出現確率15%のもの、10%のもの、8%のもの、1%のものがある
(仮説)乱数シードは
マップ種別(16bit)+階数+(秒数-5)
ではないか。なお、ここでの秒数は、「ちゅうだんデータから〜」のAボタン押下と
同時にストップウォッチオンするものとする。したがって、即開けが7秒(6以下に
意味はない)
川崎ロッカーの場合、マップ種別(16bit)は、0x3CA2 であるから、
7sec $SEED=0x3CA7
8sec $SEED=0x3CA8
9sec $SEED=0x3CA9
と使われていくと推測。要検証
川崎ロッカー3階A箱即開けのアルゴリズム
1.(仮説)により、7秒の$SEED=0x3CA7
2.これで上記乱数計算すると(use bigint; 必須)、生の乱数値0x62BE
3.0x62BEを0x7FFF で割り戻すと10進で77.1%→77(0x4D)
4.インデックス化して7番→しにがみの首飾りか?
そんなことより鶴のソースくれ
同じく8秒($SEED=0x3CA8)で生乱数は、0x2485で0x7fff で割り戻して28→インデックス2 これがげんま石か?
同じく9秒($SEED=0x3CA9)で生乱数は、0x664Bで0x7fff で割り戻して79→インデックス7
インデックス7だから・・・さっきのしにがみの組飾りに戻った。
仮説ビンゴっぽい
川崎ロッカースレの人に助成検証たのむか・・・
全くもって汎用性がないのだがw、「川崎ロッカー3階A箱中断表作成プログラム」。既に解明されてる
箱なので実用性もないがww
use bigint;
@indexTable=(
0,0,0,0,0, 0,0,0,0,0,
1,1,1,1,1, 1,1,1,1,1,
2,2,2,2,2, 2,2,2,2,2,
3,3,3,3,3, 3,3,3,3,3,
4,4,4,4,4, 4,4,4,4,4,
5,5,5,5,5, 5,5,5,5,5,
5,5,5,5,5,
6,6,6,6,6, 6,6,6,6,6,
7,7,7,7,7, 7,7,7,7,7,
8,8,8,8,8, 8,8,8,
9,10,11,12,13,14,15
);
foreach $sec (7..100)
{
$SEED = 0x3ca0+$sec;
$SEED = $SEED * 1103515245 + 12345;
$rand =($SEED >> 0x10 & 32767);
$rand99 = int($rand*100/32767);
printf "$sec %X %X $indexTable[$rand99]\n",$rand,$rand99;
}
計算結果
秒 生 割 インデックス
7 62BE 4D 7
8 2485 1C 2
9 664B 4F 7
10 2811 1F 3
11 69D8 52 7
12 2B9E 22 3
13 6D64 55 8
14 2F2B 24 3
15 70F1 58 8
16 32B7 27 3
17 747D 5B 8
18 3644 2A 4
19 780A 5D 9
20 39D0 2D 4
21 7B97 60 12
22 3D5D 2F 4
23 7F23 63 15
24 40EA 32 5
25 2B0 2 0
26 4476 35 5
27 63D 4 0
28 4803 38 5
29 9C9 7 0
30 4B8F 3B 5
31 D56 A 1
32 4F1C 3D 5
33 10E2 D 1
34 52A9 40 5
35 146F F 1
36 5635 43 6
37 17FC 12 1
38 59C2 46 6
39 1B88 15 2
40 5D4F 48 6
41 1F15 18 2
42 60DB 4B 7
43 22A1 1B 2
44 6468 4E 7
45 262E 1D 2
46 67F4 51 7
47 29BB 20 3
48 6B81 53 7
49 2D47 23 3
50 6F0E 56 8
51 30D4 26 3
52 729A 59 8
53 3460 28 4
54 7627 5C 8
55 37ED 2B 4
56 79B3 5F 11
57 3B7A 2E 4
58 7D40 61 13
59 3F06 31 4
60 CD 0 0
7→しにがみ
2→げんま
3→3000
8→オリハル
4→賢者水
9→メタ剣
12→メタ鎧
15→メタ靴
5→メダル
0→パンドラ
1→羽
6→グビ金
11→メタ盾
13→メタ頭
残るは10と14か。どうみてもメタスラ装備だな
10が槍ぽいか?
■川崎ロッカー3階A箱一覧表作成スクリプト
use bigint;
@indexTable=(
0,0,0,0,0, 0,0,0,0,0,
1,1,1,1,1, 1,1,1,1,1,
2,2,2,2,2, 2,2,2,2,2,
3,3,3,3,3, 3,3,3,3,3,
4,4,4,4,4, 4,4,4,4,4,
5,5,5,5,5, 5,5,5,5,5,
5,5,5,5,5,
6,6,6,6,6, 6,6,6,6,6,
7,7,7,7,7, 7,7,7,7,7,
8,8,8,8,8, 8,8,8,
9,10,11,12,13,14,15
);
@itemTable=(
'パンドラ','羽','げんま','3000','賢者水','メダル','グビ金','死神','オリハル',
'メタ剣','メタ槍(仮)','メタ盾','メタ鎧','メタ頭','メタ籠手(仮)','メタ靴'
);
foreach $sec (7..200)
{
$SEED = 0x3ca0+$sec;
$SEED = $SEED * 1103515245 + 12345;
$rand =($SEED >> 0x10 & 32767);
$rand99 = int($rand*100/32767);
$index=$indexTable[$rand99];
printf "$sec:$itemTable[$index] ",$rand,$rand99;
}
13 :
名無しさん@お腹いっぱい。:2009/08/20(木) 17:22:37 ID:Cx5RlGxE
ほしゅ
14 :
名無しさん@お腹いっぱい。:2009/08/20(木) 23:48:05 ID:F8AAoMD0
良スレ支援あげ
いちおつです。。
中断テーブルに比較すると
・宝箱の数・配置
・フロア別配置
とか簡単です。すでにCGI提供もしてます。
ぜひ連携していきましょう!
17 :
名無しさん@お腹いっぱい。:2009/08/20(木) 23:53:54 ID:4t/Ps/yL
さげちまったよ
18 :
名無しさん@お腹いっぱい。:2009/08/21(金) 12:24:05 ID:D/sqQk6H
宝箱割り当てのアルゴリズム(いわゆるSランクとかAランクとかの意)
・フロア別宝箱数は、MAP生成時に決まっている(プロトタイプでは外生する)。
・乱数シードは マップ種別(16bit)+階層
・各階層の宝箱数(上述のとおりこの時点ではすでに確定している)の2倍乱数
ルーチンを回して、シードをかえる
・階層によりランクコードの下限値と上限値が決まる
・下限値+(上限値-下限値)×乱数%で、宝箱のランクが決定される
以上につき、川崎ロッカーで実証
■川崎ロッカープロトタイプスクリプト(宝箱ランクの決定)
use bigint;
$SEED = 0; #global(strict で書く人は注意)
#もうおなじみの基本乱数
sub dq9rand{
$SEED = ( $SEED * 1103515245 + 12345) & 0xffffffff; # 今回は使い回すので念のためマスクしておく
$rand =($SEED >> 0x10 & 32767);
return $rand;
}
#上限〜下限に散らす乱数派生関数
sub dq9rand2{
$from=shift;$to=shift;
$diff=$to-$from+1;
return int ( ( dq9rand()-1 )*$diff/32767 ) + $from;
}
@minlist=(1,1,1,1,2,2,3,3,4,5,1,4);
@maxlist=(2,2,3,4,5,6,7,8,9,9,10,10);
@tnum=(0,0,1,1,1,1,2,3,1,3,2,3,1,3);# プロトタイプなので、各層の宝箱数は外生してしまう
# メインルーチン
for($depth=3; $depth<=14;$depth++){
$SEED = 0x3ca2+$depth;
$idx = (($depth-1)
>>2) +8;
for($j=0;$j<$tnum[$depth-1]*2;$j++){
dq9rand();
}
for($j=0;$j<$tnum[$depth-1];$j++){
$tRank=dq9rand2($minlist[$idx],$maxlist[$idx]);
print "$depth階:ランク$tRank\n";
}
print "\n";
}
実行結果↓
S箱だのA箱だのというのは、もちろん2ちゃんねるの俗称であって、内部的には1〜10(0x0a)までの
数値で表されている。
3階のランク9が、A箱で、9階から登場するランク10がS箱。ランク 1〜8 について、サイトごとに表記
が揺れているのはよく知られている。
3階:ランク9
4階:ランク9
5階:ランク9
6階:ランク9
7階:ランク9
7階:ランク7
8階:ランク8
8階:ランク8
8階:ランク9
9階:ランク10
10階:ランク1
10階:ランク10
10階:ランク1
11階:ランク2
11階:ランク2
12階:ランク5
12階:ランク2
12階:ランク4
13階:ランク10
14階:ランク10
14階:ランク6
14階:ランク7
21 :
名無しさん@お腹いっぱい。:2009/08/21(金) 20:44:01 ID:mOkdVFdd
川崎スレから来ましたwww
出遅れた− _| ̄|○
既知の部分ってほとんど残ってないじゃん
22 :
名無しさん@お腹いっぱい。:2009/08/21(金) 20:47:09 ID:IvfOhfuW
┏ ━ゝヽ''人∧━∧从━〆A!゚━━┓。
╋┓“〓┃ < ゝ\',冫。’ 、 ' 〃Ν ; ゛△│´'´,.ゝ'┃. ●┃ ┃┃
┃┃_.━┛ヤ━━━━━━━∧_∧━━━━━━━━━━ ━┛ ・ ・
∇ ┠─Σ┼ ○<,,`∀´,,>○ 冫 そ',´; ┨'゚,。来てやったニダー!
.。冫▽ < ゝ、 ,ノ 乙 ≧ ▽
。 ┃ Σ (⌒ゞ ,l, 、'’ │ て く
┠─ム┼ ゝ,,ノ ノゝ. 、,,’.┼ ァ Ζ┨ ミo'’`
。、゚`。、 i/ レ' o。了 、'’ × 个o
○ ┃ `、,~´+√ ▽ ',!ヽ.◇ o┃
┗〆━┷ Z,.' /┷━''o ヾo┷+\━┛,゛;
俺が来たからには安心なされ
>>3 線形合同法使ってるのはわかるんだが、この式は逆アセンブルでもして確定させたのか?
あと16進を100分立に変換するのって、100のMOD値のが一般的じゃね?
その辺も調べたの?それとも仮説?
>>23 上品にいえばggrks
本音で言えば「二度と来るな。失せろ!カス」
> その辺も調べたの?それとも仮説?
コードが全く読めない厨房っているんだな。初めて見たわ。これがゆとりっていうやつ?
/$_55_____________PUSH_EBP
|._8BEC___________MOV_EBP,ESP
|._83EC_14________SUB_ESP,14
|._E8_39FFFFFF____CALL_dq9tmap1.00401000
|._8945_F4________MOV_DWORD_PTR_SS:[EBP-C],EAX
|._8B45_F4________MOV_EAX,DWORD_PTR_SS:[EBP-C]
|._8945_EC________MOV_DWORD_PTR_SS:[EBP-14],EAX
|._C745_F0_000000>MOV_DWORD_PTR_SS:[EBP-10],0
._DF6D_EC________FILD_QWORD_PTR_SS:[EBP-14]
|._DD55_F8________FST_QWORD_PTR_SS:[EBP-8]
|._DC25_90314100__FSUB_QWORD_PTR_DS:[413190]
|._DD5D_F8________FSTP_QWORD_PTR_SS:[EBP-8]
|._DB45_08________FILD_DWORD_PTR_SS:[EBP+8]
|._DC4D_F8________FMUL_QWORD_PTR_SS:[EBP-8]
|._DC35_88314100__FDIV_QWORD_PTR_DS:[413188]
|._DD55_F8________FST_QWORD_PTR_SS:[EBP-8]
_|._E8_227E0000____CALL_dq9tmap1.00408F1C
|._8BE5___________MOV_ESP,EBP
|._5D_____________POP_EBP
\._C3_____________RETN
貼るならこっちだろ常考
:02003C30 E59F2020 ldr r2,[r15, #+0x20] ;r15+0x20=*(02003c58)=#34533008(0x020eee90)
:02003C34 E59F0020 ldr r0,[r15, #+0x20] ;r15+0x20=*(02003c5c)=#1103515245(0x41c64e6d)
:02003C38 E5923000 ldr r3,[r2, #+0x0] ;r2+0x0=*(020eee90)=#1696729393(0x65220931)
:02003C3C E59F101C ldr r1,[r15, #+0x1c] ;r15+0x1c=*(02003c60)=#32767(0x00007fff)
:02003C40 E0000093 mul r0,r3,r0
:02003C44 E2800039 add r0,r0,#0x39
:02003C48 E2800A03 add r0,r0,#0x3000
:02003C4C E5820000 str r0,[r2, #+0x0] ;r2+0x0=*(020eee90)=#1696729393(0x65220931)
:02003C50 E0010820 and r0,r1,r0,lsr #0x10
:02003C54 E12FFF1E bx r14 (Jump to addr_02003B0C?)
おっと、逆アセとはいえ、あんまり貼ると著作権法違反か(爆)
23みたいな「コード嫁ない」厨にはまったく笑いのツボがわからんと思うが
02003C44 E2800039 add r0,r0,#0x39
02003C48 E2800A03 add r0,r0,#0x3000
0x3039=12345(10進) な?←■ここプロなら笑うとこ(爆)
32 :
名無しさん@お腹いっぱい。:2009/08/22(土) 06:26:12 ID:yglJRafG
なにこのキモスレ
x86は読めるけどARMは読めないんだよなー
なんか参考になるサイトとかある?
>>31 だからそういう「私立文系」はコード改造スレへ逝けと
典型的すぎて笑える
やべぇ…
見ただけで分かる俺は異端すぎるわ
箱のランクが違うと
>>12で言うところのindexTableが異なることを確認。
S箱の場合、
@indexTable = (
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
6, 6, 6, 6, 6, 6, 6, 6,
7, 7, 7, 7, 7,
8, 8, 8, 8, 8,
9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 );
で、
@itemTable = (
'パンドラボックス', 'リサイクルストーン', 'グビアナきんか', 'おもいでのすず', 'けんじゃのせいすい',
'天使のソーマ', 'せかいじゅのは', 'きんかい', 'オリハルコン', 'ほしくずのつるぎ',
'きしんのまそう', 'サウザンドダガー', 'ひかりの杖', 'グリンガムのムチ', 'しゅらのこん',
'竜王のツメ', 'ひっさつのおうぎ', 'グレートアックス', '大地くだき', 'メテオエッジ','天使の弓'
);
となる。
素朴な疑問なんだけど、
>>3 で、
dq9_rand の値をさらに32767で割り、パーセントの整数部分で
ある 0〜99(0x63)を用いる
ってなってるけど、
dq9_rand の値が 32767 のときはどうなるの?
当然ながらゼロだ
われら協力した甲斐があったというもんだ(笑)
・・・ということでスレ目的も達成したようですので
―――――――――― このスレは終了です ――――――――――
このまま沈めてください
42 :
名無しさん@お腹いっぱい。:2009/08/25(火) 22:03:30 ID:317PDxil
あ
>>40 それって、このスレたつ前から有ったじゃまいかw
>>43 中断技表が実装されたのは昨日の夕方らしいお?w
(それまでは1頁目だけだったかと記憶。B〜I箱まであったような気もするがw あ、消したって書いてあるな↓)
757 名前:名前が無い@ただの名無しのようだ[sage] 投稿日:2009/08/25(火) 16:52:38 ID:PeDDeFb/0
ご無沙汰しております。検索サイト人です。ツールもってない人とかMacの人、携帯の人用に地味にw
ttp://dq9.hustle.ne.jp/mapsearch.cgi こんなサイトやっておりますが、この度、「中断技表」の計算・表示機能を追加しました。
上記の一番右の種別がリンクになってますので、あとは直感的に飛べると思います。
なお、宝箱のランクですが、Treasure Rank の生数字をそのまま出しています。S箱とA箱以外、
サイトによって対応関係がバラバラなので。。。すこし可読性が悪くてすみません
なお、最初の検索結果で同じ理由からB箱〜I箱までの個数表示をやめました(もともと、あまり
意味のない機能でしたので)。
進化してたのかw
検索しなかったので気がつかなかった
>>40 >>45-6 いろいろご協力ありがとうございました。
ご指摘のとおり、B〜I 箱は、「自分の使ってるサイトのと一致しない」との
苦情が多く、整備したところで、あまり使われてないwようなので、サクっと
削除し、第2面=階層別に tRank数値で表示するようにしました。
それと、ARMスレ
>>44、興味深いです。ちょっと覗いていきます
48 :
名無しさん@お腹いっぱい。:2009/08/27(木) 09:03:57 ID:3knnbzPZ
>>45さん
そのサイトにはいろいろとお世話になっております。
多分中断技表のページが出ないのは,
混み合っているのではなく,そのページ自体の
HTMLのtitleのタグの終了部分</title>が文字化け?になっているため
ちゃんとページが表示ません。
スレ違いでしたらすみません;
ID:OREvu2T+
indexTableはどうやって求めるのさ
これマルチプレイにも応用できそうな感じなんだけど道が遠いなあ。
とりあえずかなり大雑把に実機で検証してみたが
・複数人で同じ戦闘をこなす
↓
・複数人で同時に戦歴を開く(必要ないかも)
↓
・複数人で同時に戦歴を閉じる
という手順を取ったら全員同じ物が宝箱から出てきた。
中断なしで全員同じアイテムが取れるのはいいんだが
最初に出てくるアイテムが分からないから現状では
「先に宝箱を開けた人と同じ物が取りたい」もしくは「別の物が欲しい」
くらいにしか役に立たないんだが
検索サイト人です。
久しぶりに覗いてみたら・・・
>>48 だいぶ前に気づいて直しましたが、初期の頃は失礼しました。
>>50 > indexTableはどうやって求めるのさ
中断表の左上リンクに javascript版を上げておきました。
ブラウザ機能でソースみれるはずですので、参考にしてください
(javascriptだと、最初の1回送る分があるので、インデックステーブルも累積値
にまとめてあります。本当はこのスレにあるとおり、tabel[0〜99]にバラけた方が
計算効率はいいです。ローカルonlyで開発するときなど)
それと、
質問等ある場合、後継?の
ttp://schiphol.2ch.net/test/read.cgi/gameurawaza/1251245241/ の
方がいいと思いますよ
53 :
名無しさん@お腹いっぱい。:2009/09/08(火) 22:47:08 ID:Y3lKcFMR
>>18 > ・フロア別宝箱数は、MAP生成時に決まっている(プロトタイプでは外生する)。
上記アルゴリズムの解析はどこかのスレで行われてました?
良ければ教えて頂きたい。
中断という機能使わずに毎回洞窟で同じ場所の宝箱で同じアイテムを
出す事ってまず無理?
>>54 中断テーブルさえ用意すれば中断しなくても可能
とりあえず手当たり次第に開けてみてタイミングを推測すればいい
>>55 中断テーブルというのは
その宝箱の何秒で何がでてくるというパターンみたいなものですか?
>>57 ありがとう。
うーんでも難しいなー。
>>40のデータでやってみた結果
サイトには即開けが小さなメダルなんだけど
中断せずにクイックセーブ、ロード使う場合って即明け関係ないんだよね?
セーブしてから宝箱開けたら賢者の聖水だった。
戦歴開いて閉じるを適当に7秒〜15秒の間を1秒間隔で中身確めた所
メダルがあったりオリハルコンがあったりしたんだけど
パターン表みてもどのあたりなのか全然分からなかった。
>>40のデータは中断した場合のみのテーブルなの?
それ以外では方法ではテーブルパターンってバラバラになっちゃうの?
中断しようがしまいがテーブルは一緒。
中断すればスタート位置を確定できるというだけ。
中断しない場合、現在位置のポインタがどこかわからないので
秒数を記録しながらいくつか開けてみて、当てはまる場所を探すしかない。
まず、このあたりを勉強されたら?wwww
―――――――――――――――――――――――――――
■中断技わかりやすい説明■(ゆとり向け)
・宝箱と同じフロアにいって、中断する。宝箱の真ん前でやるのがふつうだが
必ずしも近くに寄る必要はない
・「ちゅうだんしたデータからはじめる」のときにストップウォッチ同時押し
・地図名が出るのでユルユルとBボタン(焦る必要なし!落ち着け)
・ユルユルとSELECT押しなどで戦歴開く(焦る必要なし!落ち着け)
↑
この2つのタイミングは全く無関係。とにかく落ち着けw ゆっくり確実に
・指をSELECTボタンに乗せたままストップウォッチ凝視
・指定の時間になったら、SELECTボタンオン!
↑
ここだけ神経とがらせろ!
・ユルユルと超リラックスしながら宝箱あけ。敵が近かったら、一度
逃げても良い。何歩歩こうが階段さえあがらなかれば無関係
(ただし、戦闘をしてはいけない。その場合、中断からやり直し)
■即開けとは■
・中断再開後、地図名を消した後、せんれきを開かずに宝箱をあけるだけ。
>>59 その当てはまる場所なんだけど
テーブルって一定時間経過するとループされる?
たとえば500秒以上なるとまだ7秒からのテーブルに戻るとか。
もしそれがなければ当てはまる場所を見つけてるなんてかなりキツそうだ・・・
そういえばそうだな。
調べてみたらループすんじゃね?
>>62 馬鹿すぎるwwww
・テーブルなど存在しないw
・毎回疑似乱数計算する
<引用>
:02003C30 E59F2020 ldr r2,[r15, #+0x20] ;r15+0x20=*(02003c58)=#34533008(0x020eee90)
:02003C34 E59F0020 ldr r0,[r15, #+0x20] ;r15+0x20=*(02003c5c)=#1103515245(0x41c64e6d)
:02003C38 E5923000 ldr r3,[r2, #+0x0] ;r2+0x0=*(020eee90)=#1696729393(0x65220931)
:02003C3C E59F101C ldr r1,[r15, #+0x1c] ;r15+0x1c=*(02003c60)=#32767(0x00007fff)
:02003C40 E0000093 mul r0,r3,r0
:02003C44 E2800039 add r0,r0,#0x39
:02003C48 E2800A03 add r0,r0,#0x3000
:02003C4C E5820000 str r0,[r2, #+0x0] ;r2+0x0=*(020eee90)=#1696729393(0x65220931)
:02003C50 E0010820 and r0,r1,r0,lsr #0x10
:02003C54 E12FFF1E bx r14 (Jump to addr_02003B0C?)
<ここまで引用>
各解析スレで超有名になった乱数アルゴリズムです。
高級言語で書くと
020eee90 : ←SEED
int dq9_rand(void)
{
SEED = SEED * 1103515245 + 12345; // 0x39+0x3000=12345(10進)
return SEED >> 0x10 & 0x7ffff; //r1=#32767(0x00007fff) at :02003C3C 行
}
・ループするようにみえるがそれは■気のせい■。毎回疑似乱数計算
1103515245か…
ループするのに数十年かかるな…
すまん
>>63
>>63 37秒周期で似たようなループを持っていることが多い。
かなり微妙な言い回しだけど実用上は問題ないと思う。
レア装備とか確実に取りたいっていう目的だと厳しいけど、
ソーマいっぱい取りたいとかその程度なら十分いける。
67 :
名無しさん@お腹いっぱい。:2009/09/09(水) 22:07:32 ID:G0jP5ZR6
53です。
誰か知ってる方いませんか…?
自分でも色々調べてはいるんですが、見つからなくて…
68 :
63:2009/09/10(木) 00:04:34 ID:Dr1THI6l
ダメだ1000秒まで研究したけど
目的のテーブルに当てはまる所が見つからなかった・・・
>>64-65 ・・・
( ゚д゚)
あとは「中断」のかわりに「教会で記録&再開」というのはどうだ
再開後に同じタイミングで同じ行動を取れば中断テーブルが使えると思うんだが
基本seed に秒数を加算して1~3回振ってるだけだから
この擬似乱数の本来の性能より
はるかに規則的な振る舞いになってしまっているな。
rand(x) と rand(rand(x)) なら相関薄いだろうが、
この場合 rand(x) と rand(x+1) だからね。
宝箱の内部変数が1 の場合
2秒後の結果は 1103515245 / 65536 *2 = 33676.613
= 32768 + 908.613
となり、908か909 ずれていく。
908.613 * 36 = 32710で、32768の 99.82 %
つまり72秒周期で5〜6周は1秒以内の差に収まる擬似ループが続く。
同様に内部変数が2の場合は、
2秒後が約1349 ずれる感じになるから、
24セット = 48秒で擬似ループしているように見える。
内部変数が3の場合は、
毎秒126 前後加算になるので、
32768/126 で
約260秒の擬似ループに見える。
攻略wikiには確かに72秒周期、48秒周期、260秒周期が書いてあって、
経験則でしっかり見つけられていたんだな。
このスレ見てか、
「テーブルなど存在しない!毎回擬似乱数振っている!テーブルは全て間違いだ!」
と主張してwikiの該当ページを消してた輩がいたが、とんだ恥さらしだな。
(もちろん、その後復旧されている)
産業で
73 :
名無しさん@お腹いっぱい。:2009/09/24(木) 04:45:05 ID:YqL1g0w2
もうネタないの?
オンリーモンスター検索くらい?
最初の神ツールも完全じゃないからできれば検索できると
潜る目安としては完璧になるんだけどね。
前述の宝箱の数とかのアルゴリズム公開してくれないかなぁ。
76 :
名無しさん@お腹いっぱい。:2009/10/09(金) 17:28:49 ID:9FT/xQOq
あげ
77 :
名無しさん@お腹いっぱい。:2009/11/10(火) 08:04:55 ID:Dri/bCED
ほしゅのあき
868 :名無しさん@お腹いっぱい。[sage]:2009/08/14(金) 08:15:41 ID:3kOCr73S
>>866 1地図…17バイト
敵減フラグ…1バイト (01敵無 02オンリー 04敵減)
ボス…1バイト
敵RANK…1バイト
深さ…1バイト
地形…1バイト
名1…1バイト、名2…1バイト、名3…1バイト (名3は値が同じでも地形ごとに異なる)
LV…1バイト
宝HI…1バイト、宝FG…1バイト、宝DE…1バイト、宝BC…1バイト、宝SA…1バイト
宝(数)…1バイト
オンリーモンスター…1バイト
データ終端…1バイト(00)
876 :名無しさん@お腹いっぱい。[sage]:2009/08/14(金) 10:02:08 ID:tLHStzho
>>868 SUGEEEEEE!!!!
さっそく読み出しスクリプト書いてみた(先頭10個)w
@key=('減','boss','RANK','深','形','n','n','n','LV','HI','FG','DE','BC','SA','宝数','only','');
open IN,"mapdata.bin" || die;
foreach (1..10){
read IN,$buff,17; @data=split //,$buff;
foreach $i (0..15){
print $key[$i].unpack("H2",$data[$i]).' ';
}
print "\n";
}#空白は全角にしてるからコピペじゃだめだぞw
そうすると、残るは
@(RANK,SEED)→からこのデータへのアクセスと
A(RANK,SEED)→MAP形状生成・宝の配置アルゴリズム
B各宝箱の中断技テーブル計算アルゴリズム
か。てっきりBとかこの.binファイルに巨大テーブルが格納されてるのかと思ってたわw