Ticket #37324

2.2.Xの間のアイテム追加/調整

Eröffnet am: 2017-07-05 20:31 Letztes Update: 2017-07-15 21:01

Auswertung:
Verantwortlicher:
Status:
Offen [Owner assigned]
Komponente:
(Keine)
Priorität:
5 - Mittel
Schweregrad:
5 - Mittel
Lösung:
Keine
Datei:
Keine

Details

2.2.X系の間のモンスターの追加、調整を本チケット上で匿名でも募集しつつ行っていきます。

Ticket-Verlauf (3/17 Historien)

2017-07-05 20:31 Aktualisiert von: deskull
  • New Ticket "2.2.Xの間のアイテム追加/調整" created
2017-07-05 20:32 Aktualisiert von: deskull
Kommentar

https://osdn.net/projects/hengband/forums/30152/32991/66202/

の探索のオーブ、ダイアナの長弓を検討中。

2017-07-05 23:15 Aktualisiert von: deskull
Kommentar

https://osdn.net/projects/hengband/forums/30152/32991/66356/ フォーラムから。クロスボウの★追加は踏まえて行っているので不要かもしれないがとりあえずリンク。

2017-07-05 23:17 Aktualisiert von: deskull
Kommentar

https://osdn.net/projects/hengband/forums/30152/32991/66380/ 古い城の報酬案だが、普通に★として追加してもいいはず。

2017-07-05 23:31 Aktualisiert von: deskull
Kommentar
2017-07-06 08:15 Aktualisiert von: None
Kommentar

★追加などよりは慎重なバランスの検討が必要かと思われますが、☆近接武器に各種*スレイ*も出るようになど小幅なテコ入れはできないでしょうか?
元々有用な物が出る確率が低い近接武器のランダムアーティファクトですが、 ここ数年のエゴ強化と武器修復実装に取り残されてさらに役立つことが少なく、また個性の薄い物になっている印象を受けます。
常用する武器に/邪はほぼ必須と言えますが現状☆に付く可能性は8%程度しかなく、 特化兵器にするにしても*スレイ*が竜以外は付かないので、それらが手軽に得られるようになった今の○○スレイヤーエゴにすら見劣りしています。

雑な素案ですがartifact.c のrandom_slay() にて、/人竜オト巨デ死動が付く場合に

case 9:
case 10:
 add_flag(o_ptr->art_flags, TR_SLAY_ORC);
  if (one_in_(4)) add_flag(o_ptr->art_flags, TR_KILL_ORC);
のように低確率で*スレイ*付加 (後にバイアスによる追加時にパワーの無駄うちにならないように、else は使わず下位のスレイと同時付与)
X龍に振り分けられていたcase17 は/邪に与えて付与率を現状の1.5倍に
例えばこんな感じなら行き過ぎない若干の強化と、各種*スレイ*持ちの特化兵器も出るようにバリエーション増加が図れるのではないかと。

2017-07-12 21:53 Aktualisiert von: deskull
Kommentar

None への返信

★追加などよりは慎重なバランスの検討が必要かと思われますが、☆近接武器に各種*スレイ*も出るようになど小幅なテコ入れはできないでしょうか?
元々有用な物が出る確率が低い近接武器のランダムアーティファクトですが、 ここ数年のエゴ強化と武器修復実装に取り残されてさらに役立つことが少なく、また個性の薄い物になっている印象を受けます。
常用する武器に/邪はほぼ必須と言えますが現状☆に付く可能性は8%程度しかなく、 特化兵器にするにしても*スレイ*が竜以外は付かないので、それらが手軽に得られるようになった今の○○スレイヤーエゴにすら見劣りしています。
雑な素案ですがartifact.c のrandom_slay() にて、/人竜オト巨デ死動が付く場合に
{{{ case 9: case 10:  add_flag(o_ptr->art_flags, TR_SLAY_ORC); if (one_in_(4)) add_flag(o_ptr->art_flags, TR_KILL_ORC); }}} のように低確率で*スレイ*付加 (後にバイアスによる追加時にパワーの無駄うちにならないように、else は使わず下位のスレイと同時付与)
X龍に振り分けられていたcase17 は/邪に与えて付与率を現状の1.5倍に
例えばこんな感じなら行き過ぎない若干の強化と、各種*スレイ*持ちの特化兵器も出るようにバリエーション増加が図れるのではないかと。

ありがとうございます。確かに懸念すべき点ではあったので、検討してみます。

2017-07-12 21:59 Aktualisiert von: deskull
Kommentar

deskull への返信

https://osdn.net/projects/hengband/forums/30152/32991/66380/ 古い城の報酬案だが、普通に★として追加してもいいはず。

色々考えて以下のように追加。

★グレート・ソード『サンブレード』 (4d6) (+12,+12)
    +2の修正: 腕力, 器用さ, 耐久力
    対: 邪悪, アンデッド, 悪魔
    武器属性: 理力
    麻痺知らず, 永久光源(半径 1)
    発動: なし
    レベル 30, 希少度 80, 9.0 kg, $65000
ロングソードはすでに★が多すぎるという話と、FF11ではグレートソードに分類されているらしいことからこうしたが、 理力+主要スレイで3d5でなく4d6を与えたために強すぎるのではという懸念もあり。まずいと思ったらダイスをいっそ下げるがスレイを減らす。

Kommentar

deskull への返信

https://osdn.net/projects/hengband/forums/30152/32991/66380/ 古い城の報酬案だが、普通に★として追加してもいいはず。

色々考えて以下のように追加。

★グレート・ソード『サンブレード』 (4d6) (+12,+12)
    +2の修正: 腕力, 器用さ, 耐久力
    対: 邪悪, アンデッド, 悪魔
    武器属性: 理力
    麻痺知らず, 永久光源(半径 1)
    発動: なし
    レベル 30, 希少度 80, 9.0 kg, $65000
ロングソードはすでに★が多すぎるという話と、FF11ではグレートソードに分類されているらしいことからこうしたが、 理力+主要スレイで3d5でなく4d6を与えたために強すぎるのではという懸念もあり。まずいと思ったらダイスをいっそ下げるがスレイを減らす。

2017-07-12 21:59 Aktualisiert von: deskull
Kommentar

ダブった。

2017-07-13 20:00 Aktualisiert von: deskull
Kommentar

ベースアイテムの生成率が気になったので、自前スポイラーも確認しつつobj-desc.spoの出力内容に追加した。

2017-07-13 20:26 Aktualisiert von: deskull
Kommentar

やはりサンブレードが強すぎるとの意見を方々とぐりっどばぐで聞き、相談しながら以下のように修正。

★グレート・ソード『サンブレード』 (3d6) (+12,+12) [+10]
    +3の修正: 知能
    対: 邪悪, アンデッド
    武器属性: 理力
    麻痺知らず, 永久光源(半径 1)
    発動: なし
    レベル 30, 希少度 150, 9.0 kg, $65000

  • ダイスブーストはなしに
  • レアリティアップで後の赤魔向け報酬以外での入手可能性をさらに減らす。
  • 原典に悪魔スレイはほぼないようなので削除して、最深層で強力に刺さる敵は減らす。
  • 肉体パラメータ全強化は削除し、代わりに(FFTA位でしかないようだが)防御修正としてAC+10を付加。また知力デュアル職向けとして+3知力を追加。

これで理邪持ち★として最高峰としつつ、強すぎない程度にはなった、はず。ゴルンノヴァ先輩の悶絶はいずれ上方修正の予定で晴らす。

2017-07-14 01:53 Aktualisiert von: deskull
Kommentar

サンブレード再三修正。

★グレート・ソード『サンブレード』 (3d6) (+16,+20) [+10]
    +3の修正: 知能
    対: 邪悪, アンデッド
    武器属性: 理力
    麻痺知らず, 永久光源(半径 1)
    発動: なし
    レベル 30, 希少度 150, 9.0 kg, $65000
理邪で 3d6(期待値10.5)×(2×1.5+2) = 52.5 にもうちょっと固定値に色乗せて+20で72.5に。

2017-07-14 01:58 Aktualisiert von: deskull
Kommentar

併せて理*邪*化と、序盤~中盤向けとしてゴルン・ノヴァを調整。

★ブロード・ソード『ゴルン・ノヴァ』 (2d5) (+10,+10)
    +2の修正: 腕力, 器用さ
    対: *邪悪*
    武器属性: 理力
    発動: なし
    レベル 20, 希少度 25, 7.5 kg, $40000
階層とレアリティをオルクリスト辺りと比較しながら調整。スレイ 3.5×1.5+2 = 7.5 を鑑みてダイスは据え置き、*悪魔*は(原作では上級魔族には聞かないとのことなので)削除、命中/ダメージ修正は原則の下限とした。

2017-07-14 10:47 Aktualisiert von: None
Kommentar

上で言われていたベースアイテムの出現確率に関してですが、
デバッグモードでの階層別アイテム出現率の表示に2つほど改善できる点があると思いましたので、 拙いコードですが修正案を作ってみました。

既存のwizard2.c 中の prt_alloc()関数をこれで置き換える形になります。
2000文字超えるかも知れないので、詳細は次のコメントにて

#define K_MAX_DEPTH 110 /*!< アイテムの階層毎生成率を表示する最大階 */

/*!
 * @brief アイテムの階層毎生成率を表示する / Output a rarity graph for a type of object.
 * @param tval ベースアイテムの大項目ID
 * @param sval ベースアイテムの小項目ID
 * @param row 表示列
 * @param col 表示行
 * @return なし
 */
static void prt_alloc(byte tval, byte sval, int row, int col)
{
	int i, j, k;
	int home = 0;
	u32b rarity[MAX_DEPTH];
	u32b total[MAX_DEPTH];
	s32b display[22];
	cptr r = "+---Rate---+";
	object_kind *k_ptr;


	/* Get the entry */
	alloc_entry *table = alloc_kind_table;

	/* Wipe the tables */
	(void)C_WIPE(rarity, MAX_DEPTH, u32b);
	(void)C_WIPE(total, MAX_DEPTH, u32b);
	(void)C_WIPE(display, 22, s32b);

	/* Calc. total chance for each depth */
	for (i = 0; i < alloc_kind_size; i++)
	{
		for(j = table[i].level; j < MAX_DEPTH; j++) total[j] += table[i].prob1;
	}
	/* Scan all entries */
	for (i = 0; i < K_MAX_DEPTH; i++)
	{
		for (j = 0; j < alloc_kind_size; j++)
		{
			int prob = 0;
			int prob2 = 0;
			/* Acquire this kind */
			k_ptr = &k_info[table[j].index];
			/* Accumulate probabilities */
			if ((k_ptr->tval == tval) && (k_ptr->sval == sval))
			{
				home = k_ptr->level;
				/* w/o level boost */
				prob = table[j].prob1;
				if(table[j].level <= i)
				{
					/* max. 3 rolls */
					/* 40% : 1roll */
					prob2 = prob * 40;
					/* 50% : 2rolls, 1st lower level, 2nd this kind */
					if(table[j].level > 0) prob2 += prob * 50 * total[table[j].level - 1]/total[i];
					/* 50% : 2rolls, 1st this kind, 2nd lower/or/same level */
					prob2 += prob * 50 * total[table[j].level]/total[i];
					/* 10% : 3rolls, 1st,2nd lower level,3rd this kind */
					if(table[j].level > 0) prob2 += prob * 10
						* total[table[j].level - 1] / total[i]
						 * total[table[j].level - 1] / total[i];
					/* 10% : 3rolls, 1st lower level,2nd this kind, 3rd lower/or/same level */
					if(table[j].level > 0) prob2 += prob * 10
						 * total[table[j].level - 1] / total[i]
						 * total[table[j].level] / total[i];
					/* 10% : 3rolls, 1st this kind, 2nd,3rd lower/or/same level */
					prob2 += prob * 10 
					  * total[table[j].level] / total[i]
					  * total[table[j].level] / total[i];

					prob2 *= MAX_DEPTH * (GREAT_OBJ - 1) / GREAT_OBJ;
					rarity[i] += prob2 * 1000 / total[i] * 100;
				}

				/* w/ level boost */
				prob = table[j].prob1;
				int b_level = 0;
				/* calc. for randint1(128) */
				for(k = 0; k < MAX_DEPTH; k++)
				{
					if(i > 0) b_level = 1 + (i * MAX_DEPTH / (k + 1));
					if(b_level > MAX_DEPTH -1) b_level = MAX_DEPTH - 1;
					if(table[j].level <= b_level)
					{
						/* max. 3 rolls */
						/* 40% : 1roll */
						prob2 = prob * 40;
						/* 50% : 2rolls, 1st lower level, 2nd this kind */
						if(table[j].level > 0) prob2 += prob * 50 * total[table[j].level - 1]/total[b_level];
						/* 50% : 2rolls, 1st this kind, 2nd lower/or/same level */
						prob2 += prob * 50 * total[table[j].level]/total[b_level];
						/* 10% : 3rolls, 1st,2nd lower level,3rd this kind */
						if(table[j].level > 0) prob2 += prob * 10
							* total[table[j].level - 1] / total[b_level]
							* total[table[j].level - 1] / total[b_level];
						/* 10% : 3rolls, 1st lower level,2nd this kind, 3rd lower/or/same level */
						if(table[j].level > 0) prob2 += prob * 10
							* total[table[j].level - 1] / total[b_level]
							* total[table[j].level] / total[b_level];
						/* 10% : 3rolls, 1st this kind, 2nd,3rd lower/or/same level */
						prob2 += prob * 10 
							* total[table[j].level] / total[b_level]
							* total[table[j].level] / total[b_level];

						rarity[i] += prob2 * 100000 / GREAT_OBJ / total[b_level];
					}
				}
			}
		}
	rarity[i] /= MAX_DEPTH;
	}

	/* Calculate probabilities for each range */
	for (i = 0; i < 22; i++)
	{
		/* Shift the values into view */
		int possibility = 0;
		for (j = i * K_MAX_DEPTH / 22; j < (i + 1) * K_MAX_DEPTH / 22; j++)
			possibility += rarity[j];
		display[i] = possibility / 50;
	}

	/* Graph the rarities */
	for (i = 0; i < 22; i++)
	{
		Term_putch(col, row + i + 1, TERM_WHITE,  '|');

		prt(format("%2dF", (i * 5)), row + i + 1, col);


		/* Note the level */
		if ((i * K_MAX_DEPTH / 22 <= home) && (home < (i + 1) * K_MAX_DEPTH / 22))
		{
			c_prt(TERM_RED, format("%2d.%04d%%", display[i] / 10000, display[i] % 10000), row + i + 1, col + 3);
		}
		else
		{
			c_prt(TERM_WHITE, format("%2d.%04d%%", display[i] / 10000, display[i] % 10000), row + i + 1, col + 3);
		}
	}

	/* Make it look nice */
	prt(r, row, col);
}

2017-07-14 10:55 Aktualisiert von: None
Kommentar

改善点の1つは単純に小数点の位置がずれていたのを修正。

もう1つは、get_obj_num() 関数にて50%の確率で2回、10%の確率で3回 アイテム選択を繰り返して最も高い生成レベルのものを選ぶ処理を計算に入れたことです。
この効果は意外に大きく、 レベル0や1のアイテムは複数回選択があった場合にほぼ排除されるので元の選択率の0.4倍近くまで下がり、
逆に今の生成レベルちょうどのものは、どこかで選ばれるとほぼ採用となるので 元の選択率の 0.4 + 0.5*2 + 0.1*3 = 1.7倍近くまで上がります。

以下に計算結果の例を挙げておきます。
★の入手数が増える後半階層でのグレート・ソードの出現率の高さなどが把握できます。
現状でもStatistics から100万回生成などすれば正しく見積もれましたが、それよりはたいぶ便利になるかと。

新計算 (旧計算 <旧表示>)

スピードの指輪 80F/Rare1
80F 0.3629% (0.215% <0.0215%>)

松明 1F/Rare1
80F 0.1033% (0.215% <0.0215%>)

ブロード・ソード 10F/Rare1 + 15F/Rare1
15F 1.1866% (0.830% <0.0830%>)
50F 0.4035% (0.458% <0.0458%>)
80F 0.3664% (0.431% <0.0431%>)

グレート・ソード 30F/Rare1 + 40F/Rare1
40F 0.7949% (0.516% <0.0516%>)
50F 0.6314% (0.458% <0.0458%>)
80F 0.5651% (0.431% <0.0431%>

PDSM 110F/Rare64
35F 0.0001% (0.000% <0.0000%>)
100F 0.0003% (0.000% <0.0000%>)

2017-07-14 12:44 Aktualisiert von: deskull
Kommentar

以前手を加えていた要素にバグや見落しがあったことも含めて驚きました。 以下の件、追って確認した上で、反映させていただきます。本当にありがとうございます。

None への返信

改善点の1つは単純に小数点の位置がずれていたのを修正。 もう1つは、get_obj_num() 関数にて50%の確率で2回、10%の確率で3回 アイテム選択を繰り返して最も高い生成レベルのものを選ぶ処理を計算に入れたことです。
この効果は意外に大きく、 レベル0や1のアイテムは複数回選択があった場合にほぼ排除されるので元の選択率の0.4倍近くまで下がり、
逆に今の生成レベルちょうどのものは、どこかで選ばれるとほぼ採用となるので 元の選択率の 0.4 + 0.5*2 + 0.1*3 = 1.7倍近くまで上がります。 以下に計算結果の例を挙げておきます。
★の入手数が増える後半階層でのグレート・ソードの出現率の高さなどが把握できます。
現状でもStatistics から100万回生成などすれば正しく見積もれましたが、それよりはたいぶ便利になるかと。
新計算 (旧計算 <旧表示>) スピードの指輪 80F/Rare1
80F 0.3629% (0.215% <0.0215%>) 松明 1F/Rare1
80F 0.1033% (0.215% <0.0215%>)
ブロード・ソード 10F/Rare1 + 15F/Rare1
15F 1.1866% (0.830% <0.0830%>)
50F 0.4035% (0.458% <0.0458%>)
80F 0.3664% (0.431% <0.0431%>)
グレート・ソード 30F/Rare1 + 40F/Rare1
40F 0.7949% (0.516% <0.0516%>)
50F 0.6314% (0.458% <0.0458%>)
80F 0.5651% (0.431% <0.0431%>
PDSM 110F/Rare64
35F 0.0001% (0.000% <0.0000%>)
100F 0.0003% (0.000% <0.0000%>)

2017-07-15 21:01 Aktualisiert von: deskull
Kommentar

前々から言われていたコーウィン籠手を、魔術系職業も扱えるよう、麻痺知らず追加。

★アヴァロンの主コーウィンのガントレット [2,+15]
    +4の修正: 耐久力
    耐性: 冷気
    維持: 耐久力
    麻痺知らず, 急速回復
    発動: なし
    レベル 10, 希少度 40, 1.2 kg, $43000

Dateianhangliste

Keine Anhänge

Bearbeiten

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » Anmelden