トップ «前の日記(2012/11/14) 最新 次の日記(2012/11/16)» 編集

SikabaneWorksが関係するコンテンツ(主に*band系ローグライク)の開発近況・補足から全く個人的な雑記まで。

[WEB:屍の見える丘公園]| [RSS]

Angband | Badiashimshe | C# | CRAUZEL | D'angband/小説草稿 | D'angband/開発 | DarkSouls | Demon'sSouls | DungeonCrawl | ElvenUteruses | Haskell | Hengband | J9シリーズ | LEGO | LineDrawing | MISC | MTG | Mac | Math | Moria | R-18 | Roguelike | Rough | RoughSketch | Ruby | SDL | UNIX | VMware | WarHammer | Zangband | アタシラヂョウヲウ | イラスト | ガジェット | ゲーム | ゲーム紹介 | ゲーム製作技術 | ゲーム論 | スケッチ | ツクール | テクノロジー | ニコニコ動画 | ファルコム | ファンタジー | ヴィーヤウトゥムノ | 別記事追加予定 | 変愚蛮怒 | 変愚蛮怒/スポイラー | 変愚蛮怒/元ネタ探訪 | 変愚蛮怒/攻略 | 変愚蛮怒/開発 | 宗教 | 情報 | 政治 | 文字コード | 日ペ昔話 | 東方ワンドロ | 東方外法漢女 | 歴史 | 漫画製作 | 版権絵 | 画像処理 | 翻訳 | 自然言語 | 艦隊これくしょん | 落書き | 言語解析 | 読書 | 超人ロック | 軍事 | 追記予定 | 通信 | 阿片窟 | 馬鹿馬鹿蛮怒/開発 | 魔法少女まどか☆マギカ | 魚類版深夜の真剣お絵描き60分一本勝負


2012/11/15

[変愚蛮怒/スポイラー]蛆虫爺がパワードラゴン・スケイルメイルを落とす確率(変愚蛮怒 ver2.0.0)

街の徘徊老人を殺したらパワードラゴン・スケイルメイルが手に入ったという逸話を以前どこかに聞いたことがある。これが実際有り得るのかソースをたどってみた。

monster_death()関数

まず蛆虫爺はSATSUGAI時に90%の確率でGOOD/GREATドロップの生成を行う。残り10%は当然デデドン!(絶望)である。(累計確率 90.00%)

ONLY_ITEMなので、落としたのが結局金という心配はない。GOOD|GREATフラグを付加した状態で、make_object()関数へ飛ぶ。

make_object()関数

GOODドロップ時、生成レベルが+10される。

アーティファクトの生成処理でなければ、通常の生成処理に回る。地上では特定ドロップでない限りアーティファクトの生成がありえないので問題ない。

GOODフラグつきで、特定の生成条件がない場合「上質な品物」(kind_is_good())がアイテムの生成条件の中に加えられる。この上質な品物とは、とりあえず、折れた棒とかロクでもないアイテムを除外するものであり、パワー・ドラゴンスケイルメイルも当然含まれる。

get_obj_num_prep()関数へ飛んで、アイテムの生成可能リストを作成する。

get_obj_num_prep()関数

この時点で、kind_is_good()を基準にアイテムの生成可否を判別するもので、生成レベルはまだ入らない。

これが終わったら、一旦make_object()に戻って、すぐget_obj_num()に処理が移る。

get_obj_num()関数

さて、問題はここである。引数で得られた生成階レベルは10。このままではこれより大きい階層のアイテムは生成対象にならないので、Lv110のパワードラゴン・スケイルメイルが生成されるには、深層生成ブースト処理がかからなければならない。この処理に該当する部分がこれである。

	if (level > MAX_DEPTH - 1) level = MAX_DEPTH - 1;

	/* Boost level */
	if ((level > 0) && !(d_info[dungeon_type].flags1 & DF1_BEGINNER))
	{
		/* Occasional "boost" */
		if (one_in_(GREAT_OBJ))
		{
			/* What a bizarre calculation */
			level = 1 + (level * MAX_DEPTH / randint1(MAX_DEPTH));
		}
	}

ブーストはレベルが0より大きく、なおかつ現在のダンジョンに「初心者向け」のフラグが存在しないことが必須条件である。本来ならば、この処理は「地上や初心者向けのダンジョンでは深層生成がかからない」ことを意図していたと思われるのだが、

  • GOOD生成により、生成レベルは最初から10になっている。
  • 地上(ID:0)には「初心者向け」を含めて全てのダンジョンフラグがない。

ので実はここで深層生成が通ってしまう。

GREAT_OBJ = 10となっているので、1/10の確率でブースト成立(累計確率 9.000%)

ブーストによりlevelが 1 + (10 * 128 / (1d128))になるので、これが110以上になる確率は、11/128である。(累計確率 0.7734%)

levelが上がり過ぎると、パワードラゴン・スケイルメイル以上の生成階アイテムも対象に加わり、生成確率が落ちることになるが、幸いにも パワードラゴン・スケイルメイルの110Fは力の指輪(一つの指輪生成専用ベースアイテム)と並んで最も深いので心配はいらない。

この後、アイテム生成のための非一様乱数の中でパワードラゴン・スケイルメイルを引く確率が何分の1かをレアリティなどを元に計算することが可能だが面倒なので、生成レベルさえ一定ならば確率は常に一定であることを確認の上、

蛆虫死亡、ナムアミダブツ

実際に殺して

トレース

ガンダルフ的うさんくささなど微塵もない、真の*ウィザード*的視点で処理を拾い、

確認

確率を確認。1/14336。よって(累計確率 5.358×10^-5% (0.00005358%))

やはり蛆虫爺がホビット的姑息さでどこぞからパワードラゴン・スケイルメイルを略取し、自らのマゾム館(意味深)に隠している可能性は、微粒子レベルで存在しているのである。たまげたなぁ。

完全な実演をしろだって?TAS、どうにかしろ(無責任)