Angband.oook.cz
Angband.oook.cz
AboutVariantsLadderForumCompetitionComicScreenshotsFunniesLinks

Go Back   Angband Forums > Angband > Vanilla

Reply
 
Thread Tools Display Modes
Old September 9, 2018, 12:54   #1
wobbly
Veteran
 
Join Date: May 2012
Location: Adelaide, Australia
Posts: 2,152
wobbly is on a distinguished road
how does stealth work?

Just checking some stuff.

A monster wakes on it's own turn? Perception is effectively multiplied by monster speed & divided by player speed.
Chance is stealth dependent?
Amount of sleepiness lost is distance dependent?
wobbly is offline   Reply With Quote
Old September 9, 2018, 13:26   #2
wobbly
Veteran
 
Join Date: May 2012
Location: Adelaide, Australia
Posts: 2,152
wobbly is on a distinguished road
Ok monsters wake in book keeping time not their turn. So player speed matters, monster speed doesn't?
wobbly is offline   Reply With Quote
Old September 9, 2018, 16:45   #3
t4nk
Swordsman
 
Join Date: May 2016
Posts: 330
t4nk is on a distinguished road
Quote:
Originally Posted by wobbly View Post
Just checking some stuff.
The calculations are:

edit: (LOL, disregard that. I just remembered that my Angband repo is on 4.0.5! I recall Nick changed stealth when he changed pathfinding)
edit2: (It seems he changed it back? well, then the description below is correct)

Player's noise is 1 << (30 - stealth). In other words, noise is 2 in the power of (30 - stealth).

Then, the game does this:
Code:
int notice = randint(1024);

if (notice * notice * notice <= noise)
{
    int wake_up_amount = 1;

    if (distance_to_player < 50)
         wake_up_amount = 100 / distance_to_player;

    wake_up_monster_a_little(wake_up_amount);
}
The noise stuff is in player-calcs.c: calc_bonuses() and other stuff in mon-move.c: process_monster_timed().

edit: in 4.1.3 it's in monster_reduce_sleep()

Quote:
A monster wakes on it's own turn? Perception is effectively multiplied by monster speed & divided by player speed. Chance is stealth dependent?
Amount of sleepiness lost is distance dependent?
Yes to all of that.

Last edited by t4nk; September 9, 2018 at 17:04.
t4nk is offline   Reply With Quote
Old September 9, 2018, 16:47   #4
t4nk
Swordsman
 
Join Date: May 2016
Posts: 330
t4nk is on a distinguished road
Quote:
Originally Posted by wobbly View Post
Ok monsters wake in book keeping time not their turn. So player speed matters, monster speed doesn't?
I think it does. process_monster():
Code:
    
    /* Not enough energy to move yet */
    if (mon->energy < minimum_energy) continue;

    ...

    /* Give this monster some energy */
    mon->energy += turn_energy(mspeed);

     /* End the turn of monsters without enough energy to move */
     if (!moving)
         continue;

    /* Use up "some" energy */
    mon->energy -= z_info->move_energy;

    /* Check if the monster is active */
    if (monster_check_active(c, mon)) {
        /* Process timed effects - skip turn if necessary */
         if (process_monster_timed(c, mon))
t4nk is offline   Reply With Quote
Old January 15, 2020, 13:16   #5
DavidMedley
Swordsman
 
Join Date: Oct 2019
Posts: 273
DavidMedley is on a distinguished road
How does distance affect stealth?

I'm going to relate what my research has tentatively discovered. Confirmation or correction greatly appreciated.

Question: How does distance affect stealth?

Answer:
We know from the monster recall that there's a max distance at which a creature can notice you. This is calculated essentially the same as walking distance i.e., down hallways, around corners, through doors, but not through walls. Anywhere from that max to 5 squares away (50 feet) is identical in terms of the chance you will disturb the monster and the amount it will be disturbed.

At range 1 (adjacent), 2, 3, 4 a monster is 10, 5, 3, 2 times as disturbed if you fail the stealth check. The amount a monster is disturbed is subtracted from it's sleepiness, and if sleepiness gets to 0 or less it wakes up.

-----
End of response. Code and my interpretation of it below.

Code:
int sleep_reduction = 1;
int local_noise = c->noise.grids[mon->grid.y][mon->grid.x];

/* Test - wake up faster in hearing distance of the player 
 * Note no dependence on stealth for now */
if ((local_noise > 0) && (local_noise < 50)) {
	sleep_reduction = (100 / local_noise);
}
I believe noise.grids contains the distance sound has to travel to get to a particular square i.e., down hallways and through doors but not through rock. I can only assume that it is in "feet" or 10*number of game spaces.
DavidMedley is offline   Reply With Quote
Old January 15, 2020, 16:02   #6
DavidMedley
Swordsman
 
Join Date: Oct 2019
Posts: 273
DavidMedley is on a distinguished road
Monster Awareness Ratings

I'm going to relate what my research has tentatively discovered. Confirmation or correction greatly appreciated. I'm sure I'm missing something, based on experiments.

Question: What do the monster "awareness" ratings mean in game terms?

Answer:
The descriptions given in monster recall correspond to values between 0 and 255. The table below shows what a monster race's "sleepiness" is based on that description.
Code:
Min	Max	Description
0	0	is ever vigilant for
1	1	is vigilant for
2	3	is very observant of
4	5	is observant of
6	10	is fairly observant of
11	25	takes a while to see
26	45	takes quite a while to see
46	75	tends to overlook
76	95	pays little attention to
96	200	pays very little attention to
201	255	prefers to ignore
When an individual monster is created in the dungeon (not summoned) it starts with a personalized sleepiness equal to RS*2+1d(RS*10) where RS is racial sleepiness. The level 1 "wild dog" has racial sleepiness 10, so each one will start with 20+1d100 individual sleepiness.

Each time a monster would normally get a turn, you have a chance to disturb its sleep. You must be within its detection range. If you do disturb it, its sleepiness goes down by 1 (or more if you're closer than 50 feet). If the monster reaches 0 sleepiness it wakes up. The chance for you to disturb a monster is 100% at stealth 0 or less, and decreases by almost exactly 50% for every 3 points of stealth, up to 28 where the minimum of about 0.20% is reached.

--------
But by that description, monsters would sleep about 10x too much!! So I must be missing something. Here's the code that I'm pretty sure converts the racial sleep into individual sleep (I need better terms there, as well).

Code:
	/* Enforce sleeping if needed */
	if (sleep && race->sleep) {
		int val = race->sleep;
		mon->m_timed[MON_TMD_SLEEP] = ((val * 2) + randint1(val * 10));
	}
DavidMedley is offline   Reply With Quote
Reply


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
how much do you value stealth in the endgame? Sky Vanilla 6 February 3, 2017 09:04
Legendary stealth Pete Mack AAR 8 July 13, 2016 20:08
Stealth Antoine Vanilla 10 June 11, 2013 04:35
Stealth vs Aggravation Tibarius Vanilla 7 July 11, 2011 22:57
Insane stealth Timo Pietilš Vanilla 32 March 31, 2011 22:52


All times are GMT +1. The time now is 16:14.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2020, vBulletin Solutions Inc.