![]() |
#1 |
Veteran
Join Date: May 2012
Location: Adelaide, Australia
Posts: 2,424
![]() |
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? |
![]() |
![]() |
![]() |
#2 |
Veteran
Join Date: May 2012
Location: Adelaide, Australia
Posts: 2,424
![]() |
Ok monsters wake in book keeping time not their turn. So player speed matters, monster speed doesn't?
|
![]() |
![]() |
![]() |
#3 | |
Swordsman
Join Date: May 2016
Posts: 330
![]() |
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); } edit: in 4.1.3 it's in monster_reduce_sleep() Quote:
Last edited by t4nk; September 9, 2018 at 17:04. |
|
![]() |
![]() |
![]() |
#4 | |
Swordsman
Join Date: May 2016
Posts: 330
![]() |
Quote:
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)) |
|
![]() |
![]() |
![]() |
#5 |
Knight
Join Date: Oct 2019
Posts: 894
![]() |
How does distance affect stealth?
Incorrect conclusions deleted, corrected and reposted below.
Last edited by DavidMedley; January 24, 2020 at 04:48. |
![]() |
![]() |
![]() |
#6 |
Knight
Join Date: Oct 2019
Posts: 894
![]() |
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 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)); } |
![]() |
![]() |
![]() |
#7 |
Prophet
Join Date: Apr 2007
Location: Seattle, WA
Posts: 5,912
Donated: $40
![]() |
David--look at the code above. the amount of wakeup is also scaled, by 100/distance. This means that you have to be nearby to wake it up fast, and adjacent you will wake him up in 1/10 nominal time.
Last edited by Pete Mack; January 24, 2020 at 03:08. |
![]() |
![]() |
![]() |
#8 |
Knight
Join Date: Oct 2019
Posts: 894
![]() |
OK. So when I read
Code:
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); |
![]() |
![]() |
![]() |
#9 |
Prophet
Join Date: Apr 2007
Location: Seattle, WA
Posts: 5,912
Donated: $40
![]() |
I do notice that perfect stealth is not actually possible, as there is a 1/1024 chance of disturbance even when stealth is 30.
|
![]() |
![]() |
![]() |
#10 | |
Prophet
Join Date: Dec 2009
Posts: 9,024
![]() |
Quote:
|
|
![]() |
![]() |
![]() |
Currently Active Users Viewing This Thread: 1 (0 members and 1 guests) | |
Thread Tools | |
Display Modes | |
|
|
![]() |
||||
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 |