Angband Forums (http://angband.oook.cz/forum/index.php)
-   Development (http://angband.oook.cz/forum/forumdisplay.php?f=10)
-   -   Dummy question on k_info allocation lines (http://angband.oook.cz/forum/showthread.php?t=8851)

 konijn_ March 12, 2018 20:29

Dummy question on k_info allocation lines

Greetings,

I do not understand what these numbers represent:
N:12:Restoring
G:,:d
I:80:19:500
W:20:0:1:1000
A:20/8:30/4:40/1
D:Eating this rare mushroom will restore your body and mind.

I can see a list of 'locale' and 'chance', for each kind, but what do these numbers do in the game?

 Derakon March 12, 2018 20:47

This is saying "at depth 20, this item has rarity 8, at 30 it has rarity 4, at 40 it has rarity 1". When the game chooses to allocate an item, it sums up rarities of all items in the game, scaled by how out-of-depth they would be, then picks one. For example, say the game only had two items: the Mushroom of Restoring, and a Dagger that had a flat rarity of 1 at every depth. At depth 20, then, the game would say "the mushroom is 8 times more likely to drop than the dagger", and generates an allocation range with 9 buckets in it. The first 8, covering values from 0 to .88888... (i.e. 8/9) go to the mushroom, the last 1 goes to the dagger. The game generates a random number between 0 and 1, looks in the allocation range, and generates whichever item corresponds to where it landed.

At depth 30, it does the same thing, except this time the mushroom is only 4 times more common than the dagger, so the mushroom gets values from 0 to .8, and the dagger the rest. And at depth 40, the two split the range 50/50.

In other words, rarity of one item always depends on rarities of every other item in the game. You can only make an item more (or less) common by comparison with other items, and you can't state anything about what percentages of all items are a given item without looking at the percentages of everything else.

(NB I'm not 100% certain that higher numbers are more common; it might be the reverse, in which case you'd need to invert the example so the mushroom is 1/8th as common as the dagger, then 1/4th, then 1:1, at the respective depths).

 Nick March 12, 2018 20:54

Quote:
 Originally Posted by Derakon (Post 128474) (NB I'm not 100% certain that higher numbers are more common; it might be the reverse, in which case you'd need to invert the example so the mushroom is 1/8th as common as the dagger, then 1/4th, then 1:1, at the respective depths).
Higher numbers are in fact less common; this makes sense with the ,Restoring entry because it gets more common the deeper you go.

 konijn_ March 12, 2018 21:04

Got it, thanks guys!

Quote:
 Originally Posted by Nick (Post 128475) Higher numbers are in fact less common; this makes sense with the ,Restoring entry because it gets more common the deeper you go.

 tangar January 24, 2019 20:10

Yet Another Dummy There...

I'm trying to figure out how alloc works, please help :)

After past messager, it seems format changed.. Now it's
Quote:
 # alloc: commonness : min " to " max # 'alloc' is for allocation - depth and rarity, in pairs. It is used to # ensure that certain vital items such as food and recall scrolls # are found throughout the dungeon. The "allocation" depth need not # match the depth as specified in the "properties:" line.
Let's try at this two items (object.txt):

alloc:10:70 to 100

on depth 10, rarity of this blade is from 70 to 100..

VS

Dagger
alloc:20:0 to 100

on depth 20, rarity of dagger is from 0 to 100

I'm trying to figure out how it works.. In previous message there was different structure, eg A:20/8:30/4:40/1 - is like the deeper we go - the more often we would meet mushroom...

"Higher numbers are in fact less common", so the higher rarity - the more rare item.

at depth 10: blade got ~85 rarity; dagger got ~(50/2)=25 rarity, right? So dagger would be in ~3.5 times more often than blade.

at depth 20: blade got ~170 (?) rarity; dagger got ~50

at depth 40 blade got ~ 340 rarity; dagger got ~100 ?

Wierd.

It seems I make something wrong.

Lets take a lantern:
alloc:70:5 to 100

So at depth 70.. wait. Depth 70 for a lantern? :DD :confused:

 Sideways January 24, 2019 20:29

The 10 is the rarity, the 70 to 100 is the depth, not the other way round.

 Nick January 24, 2019 20:34

There are two problems here. One is that the OP was talking about a variant (probably Hellband) which used an older way of specifying how items are found.

The second problem is that the comment is out of date - I am changing it to
Quote:
 # 'alloc' is for allocation - frequency and range of levels found.
So

Quote:
 Originally Posted by tangar (Post 135573) Blade~ of Chaos alloc:10:70 to 100
means frequency of 10, found on levels 70 to 100

Quote:
 Originally Posted by tangar (Post 135573) Dagger alloc:20:0 to 100
means frequency of 20, found on levels 0 to 100.

Note that frequency ranges from a high of 80:
Code:

```name:Cure Light Wounds alloc:80:1 to 15```
down to 1:
Code:

```name:Power Dragon Scale Mail~ alloc:1:100 to 100```

 takkaria January 24, 2019 20:37

Indeed, the file format changed rather a long time ago in Vanilla but not all variants have the newer syntax.

Quote:
 # alloc: commonness : min " to " max
So 'commonnness' is the opposite of rarity - i.e. the higher this number, the more common it is. Min depth to max depth is just that. Objects just have one commonness value for the whole dungeon, but cut off above and below their range.

"Commonness" is how many entries it gets in the object generation table for a given depth. So if it has 100, it will get 100 entries, if it has 10, it'll get 10 entries. So

Quote:
 Skull alloc:50:1 to 100 Broken dagger alloc:100:1 to 100
means that there is a 50/(100+50) chance of getting a skull (33%) and a 100/150 chance of getting a broken dagger (67%)

The old syntax had 'rarity', where rarity of 1 = 100 entries, 2 = 50 entries, 4 = 25 entries, 8 = 12 entries etc., and you could specify multiple rarity/depth pairs to change the allocation through the dungeon.

 tangar January 24, 2019 20:51

Wow! Now it's clear! Thank you, friends!! :DDD

The problem was in description of this value, as there is two notes in object.txt:

1) # alloc: commonness : min " to " max

// good one; especially with your great comments which makes everything so clear!

2)
# 'alloc' is for allocation - depth and rarity, in pairs. It is used to
# ensure that certain vital items such as food and recall scrolls
# are found throughout the dungeon. The "allocation" depth need not
# match the depth as specified in the "properties:" line.

// got an error?

 Derakon January 24, 2019 21:07

I want to highlight takkaria's answer, in particular the fact that how much of a given item you find depends on how much of other items you find. You can't change how many items are generated overall by changing the allocation rules, in other words; you can just make a particular item more or less likely than other items to get "chosen" when the game decides to produce an item.

This is part of why, for example, Potions of Speed are more common early on: they have a fairly flat distribution across the entire game, but at the top of the dungeon there are very few items that can get generated, so a relatively higher proportion of them are Potions of Speed.

All times are GMT +1. The time now is 12:54.