2012/12/21
■ [変愚蛮怒/スポイラー]自己変容処理の流れ(変愚蛮怒 ver2.1.1)
2012/12/22追記
ソース上、自己変容時に種族変更制限がかかっていることと、自分のプレイ経験上バルログに変化したことが矛盾している件が解決。バグのために実質の種族変更先は「アンドロイド以外」になっていることが判明した。
問題の箇所はここである。
/* * Restrict the race choices by exp penalty so * weak polymorph always means weak race */ if (power < 0) goalexpfact = 100; else goalexpfact = 100 + 3 * randint0(power); do { new_race = randint0(MAX_RACES); expfact = race_info[new_race].r_exp; } while (((new_race == p_ptr->prace) && (expfact > goalexpfact)) || (new_race == RACE_ANDROID)); change_race(new_race, effect_msg);
変化前と同じ種族でなく、アンドロイドでもなく、なおかつ経験値修正未満の種族にしたいのなら、こうでなければならないはずである。
while ((new_race == p_ptr->prace) || (expfact > goalexpfact) || (new_race == RACE_ANDROID));
/* * Restrict the race choices by exp penalty so * weak polymorph always means weak race */
"weak polymorph"といっても、自己変容はこの箇所以外に実装はないので"strong polymorph"なぞ勿論ない。ホモは嘘つき、嘘つきはホモ、よってこの実装者はホモ。(三段論法破綻不可避)
本文
do_poly_self()関数より解析…したのだが、以前の個人的体験と矛盾した事態があるので、それを交えてみる。
- @さんのレベルをpower値にそのまま代入
- 「運」の徳+1
- (power)>d20を満たし、なおかつ種族がアンドロイドでない場合1/3の確率で以下の処理
- powerを10消費
- (power)>d5かつ1/4の確率でpowerを2消費して性別が反転する。
- (power)>d30かつ1/5の確率でpowerを15消費して以下の処理を行う(奇形化)
- 全ステータスが各1/2の確率でvalue:6+d6分低下する、2/3の確率で永久的な喪失
- さらに魅力がvalue:d6分永久的に喪失
- (power)>d20 かつ 1/10の確率を満たす限り、powerを10消費してランダムに突然変異を1つ失う処理を繰り返す。失う変異がもう無かった場合「奇妙なくらい普通になった気がする」
- 種族変化処理を以下の通りに行う。
経験値ペナルティを基準に変化し得る種族を制限、ここまでで(power)が負になっていたら+0%、正ならアンドロイド以外の経験値ペナルティ 3 * (d(power)-1)以下の種族に変更される。
- (power)>d30を満たした時1/6の確率で以下の処理
- powerを20消費
- 「内臓/機械の構造が変化した!」
- 全ステータスが各1/2の確率でvalue:6+d6分低下する、2/3の確率で永久的な喪失。
- 1/6の確率で「現在の姿で生きていくのは困難なようだ!」で(d10)d(@レベル)のダメージ。powerを10消費。
- (power)>d20かつ1/4の確率でpowerを10消費して能力の限界値が変化する。
- (power)>d15かつ1/3の確率を満たす限りpowerを7消費して突然変異を1つ得る。
- (power)>d5を満たすなら、powerを5消費して傷の軽重が変化する。
- 残った(power)の回数分ステータス交換を繰り返す。
以上。
問題は、種族変更処理である。以前自分はアルコン・ティーンチ混沌の戦士で散々自己変容の報奨を受けまくった挙句、終盤、カオス領域の自己変容で種族がバルログになったことがある。
天使から大悪魔とか見事な堕天ぶりだと草を生やしたものだが、この計算式の限りだと、レベルが最大でも種族ペナルティ+117%以上の種族には変身しないことになる。(power:50でも、変身処理に入った時点で-10され、(40-1)×3で最大117)
バージョンはまだ1.6.2であった記憶があるのでその間に変化した可能性がある。今回の解析が間違いでなく、なおかつ自分の記憶が勘違いでないことを祈って、いずれ再調査したい。
いずれにせよ現行では、以前エログロネタ絵で書いたえるふ→半タイタンの変身なぞ有り得ないのであった。しめやかに悶絶。
やっぱり、有り得たじゃないか!(安堵)
■ [D'angband/開発]D'angband開発日誌 part33
- 余計なコメントを削除。(2012/12/19~)
- ifdef JP による煩雑なローカライズの統合。(2012/12/19~)
- 変愚蛮怒のeffect.cで実装されていたステータス処理のリファクタリング中(2012/12/19~)
- 超隠密や、構え、型なども既にtrait系列に加えているので統合可能。折を見て進めるべし。
- traitにalias定義機能を追加(完了・2012/12/20~2012/12/21)
- trait_type構造体、parse_trait_info()、reprocess_trait()などを修正してaliasを追加、並びにhas_trait()関数上でalias処理も走査する機能を実装。
- ただしそれに伴い、現在のフラグ処理上で非常に処理が重くなる。これらの高速化を行うため、フラグ保持を予めcreature_type構造体に収めるなどの改良を行う予定。