00:22:23 Unstable branch on cbro.berotato.org updated to: 0.35-a0-175-g117663b8c5 (34) 00:55:47 Monster database of master branch on crawl.develz.org updated to: 0.35-a0-175-g117663b8c5 04:34:30 Experimental (bcrawl) branch on underhound.eu updated to: 0.23-a0-5261-gd9800d219b 18:06:22 New branch created: pull/5126 (1 commit) 13https://github.com/crawl/crawl/pull/5126 18:06:23 03RypoFalem02 07https://github.com/crawl/crawl/pull/5126 * 0.35-a0-176-g5e62bf4039: fix: Make Naga/Salamander undead slither when animated (tekkud) 10(46 minutes ago, 1 file, 4+ 1-) 13https://github.com/crawl/crawl/commit/5e62bf403973 19:59:29 veric (L10 MDFw) ASSERT(you.running.turns_passed < buggy_threshold) in 'delay.cc' at line 592 failed. (Excessive delay, 700 turns passed, delay type 9999299) (D:8) 21:32:10 <08o​____0> Funny bug. You don't get the rest interupt for the ancestor if the ancestor is out of sight 21:36:49 <08o​____0> For the ancestor reaching full hp, I mean. Easy to reproduce in a killhole. Make sure your ancestor is damaged and you are at full hp/mp. Put the ancestor where the monsters usually stand in the killhole and stand next to them, so that the ancestor can't walk behind you. Tell them to guard the area and while they are in LoS, wait. If they are out of LoS when they reach full hp (which is probably because you can only see 1 tile that they 21:36:49 could walk on) then you will crash. 21:58:35 <08o​____0> There's concerns in a code comment and the PR that added this features about the "information leak" of knowing that your ancestor hp is healed when they are out of line of sight. https://github.com/crawl/crawl/pull/900. The easiest way to fix this bug would be to just let you know when they are healed anyway 22:21:44 <04d​racoomega> Wait, it crashes if your ancestor reaches full HP while out of LoS?? 22:25:43 <04d​racoomega> I certainly don't seem able to reproduce this 22:26:18 <08o​____0> Make sure you are at full hp/mp when you start waiting and you can see your ancestor initially 22:29:45 <04d​racoomega> I did that 22:30:20 <04d​racoomega> A bunch of times now 22:30:28 <08o​____0> hmmm 22:31:26 <08o​____0> So you wait for how many turns? You see the "Ancestor HP restored." message? 22:33:31 <04d​racoomega> I mean, I am not seeing that message most of the time since my ancestor is healing while out of sight of me 22:33:36 <04d​racoomega> But that seems like correct behavior, imo 22:33:49 <08o​____0> https://github.com/crawl/crawl/blob/117663b8c56cc0ec2560fa3e6d18c0efa5a6b34c/crawl-ref/source/mon-act.cc#L166 there's where the interupt happens. It can only happen on the turn the ancestor reaches full hp (if it was already at full hp, the function returns early) and only when they are in LoS 22:34:22 <08o​____0> Hmmm, I can try with a default RC maybe 22:34:34 <08o​____0> Oh do you have the wait for ancestor to heal thing turned off? 22:36:19 <04d​racoomega> Is it on or off by default? (I'm only using defaults) 22:36:43 <04d​racoomega> It does seem to be on by default 22:37:19 <04d​racoomega> (But like, I'm not seeing an obvious reason any of the related code would crash, either) 22:37:25 <04d​racoomega> At least on a brief review 22:37:51 <08o​____0> I got it to crash again with my current rc. Let me try with default now. 22:40:07 <08o​____0> What do you mean? The rest mode is 9999999 which goes down until something stops it. In this case if you can't see the ancestor and are already at full hp/mp, nothing stops it so it crashes at after 700 turns (hence 9999299) 22:40:32 <08o​____0> When it hits that assert 22:42:17 <04d​racoomega> I... I mean, resting at full HP only spends 100 turns 22:42:22 <04d​racoomega> By default, anyway 22:42:32 <04d​racoomega> Regardless of anything happening or not 22:43:07 <04d​racoomega> Surely we don't want default behavior that you can ever 'rest indefinitely'. That seems bad for many non-ancestor-related reasons. 22:43:19 <08o​____0> yeah haha 22:43:29 <04d​racoomega> "Rest until Zot finds you" >.> 22:43:49 <08o​____0> Well it crashes before then too I think haha 22:45:04 <08o​____0> rest_wait_ancestor = false If rest_wait_ancestor is set to true then resting will only stop when the ancestor's health is fully restored in addition to player HP or MP (or both, if rest_wait_both is set). Hmmm, I don't have this option set 22:47:06 <04d​racoomega> Oh, somehow I missed in all this that it was actually resting indefinitely to wait for an interrupt 22:47:31 <04d​racoomega> But are you saying you were getting this crash without that option on? 22:49:29 <08o​____0> Yes, I just reproduced it again with default rc 22:49:34 <04d​racoomega> Okay, so did I, actually 22:50:15 <04d​racoomega> I think what was happening is that I had been incidentally manually interrupting it before hitting 700 turns >.> 22:50:23 <08o​____0> oh haha 22:50:41 <04d​racoomega> Since I had noticed that my ancestor was already at full HP anyway (by it wandering in and out of sight) 22:50:49 <04d​racoomega> I didn't realize you were talking about that crash above >.> 22:51:07 <08o​____0> It's funny on local tiles with default rc because runrest_delay isn't -1 so you see the ancestor rapidly blink in and out of LoS until the game crashes in 700 turns 22:51:13 <08o​____0> Yeah haha 22:52:16 <04d​racoomega> Frankly, I think the simplest solution is to not wait indefinitely in this case 22:52:38 <08o​____0> ideal haha 22:52:52 <04d​racoomega> Like, there should be no situation that requires resting that long in the first place, right? 22:53:03 <04d​racoomega> No matter how badly damaged either of you are 22:53:46 <08o​____0> That's basically changing the ASSERT to an if statement and saying "max rest length reached" or something? 22:54:24 <08o​____0> Well and checking the run type 22:55:15 <04d​racoomega> Well, I was thinking of just setting the default rest duration to something that itself would never assert 22:55:45 <04d​racoomega> Just wondering if there's any circumstance where this somehow would be inadequate to heal someone, but I'm pretty sure not 22:55:49 <08o​____0> Ah, the default rest duration is encoded as the enum value.... It's strange 22:56:08 <04d​racoomega> I mean, it is, but it could just be a lower number, no? 22:56:51 <04d​racoomega> But maybe I haven't read enough of this code yet 22:57:03 <04d​racoomega> But it seems like if we can have you wait 100 turns, we can also have you wait 500 turns or something 22:57:07 <04d​racoomega> Somehow 22:57:16 <08o​____0> enum run_mode_type { RMODE_INTERLEVEL = -4, // Interlevel travel RMODE_EXPLORE_GREEDY = -3, // Explore + grab items RMODE_EXPLORE = -2, // Exploring RMODE_TRAVEL = -1, // Classic or Plain Old travel RMODE_NOT_RUNNING = 0, // must remain equal to 0 RMODE_CONTINUE, RMODE_START, RMODE_WAIT_DURATION = 100, RMODE_REST_DURATION = 9999999, // just rest until fully healed 22:57:16 RMODE_CONNECTIVITY, // Pathfinding connectivity check, not running. }; So it decrements every turn and if it's too low it becomes wait_duration? 22:57:30 <08o​____0> I really don't like how this is done lol 22:58:08 <04d​racoomega> Yeah, this feels old and rickety (and it's not code I've interacted with a lot, I'll be honest) 22:58:55 <08o​____0> But maybe if it becomes wait duration it's not an issue I dunno 22:59:21 <04d​racoomega> I think it is checked only when started 22:59:30 <08o​____0> A comment suggested that an ogre would have to wait over 200 turns to fully heal but I am not sure if that is true anymore 23:00:56 <04d​racoomega> An oni with robust 3, 27 in all skills, and Divine Vigor still heals to full in less than 500 turns. (Which is a bit irrelevant since Divine Vigor itself doesn't last nearly that long) 23:01:17 <08o​____0> hah 23:01:34 <04d​racoomega> I am pretty sure this is 100% safe unless something very wierd is going on (and if something that wierd is going on without interrupting the player, probably we already didn't want them waiting around forever) 23:02:29 <08o​____0> Yeah I think it's fine to have an upper limit on waiting rather than crashing after reaching an arbitrary limit 23:05:26 <08o​____0> (related is that I'd like to be able to configure that 100, I often enough hit 5 when I don't meant to wait 100 turns haha) 23:06:01 <08o​____0> (like waiting around a corner for an enemy but they forgot about me. Or just thinking I need to heal but I didn't) 23:06:40 <04d​racoomega> Yeah, I actually went to check the options guide, since I kind of assumed there was an option for that, but apparently not 23:06:48 <04d​racoomega> (Earlier in this discussion, I mean) 23:06:57 <08o​____0> It's hard coded by the enum haha 23:07:00 <04d​racoomega> Yeah 23:07:07 <04d​racoomega> Very old and rickety 😛 23:12:25 <04d​racoomega> Speaking of which, I've been doing some investigation for refactoring some map marker handling (in anticipation of doing new things with them) and I am pretty sure the only reason Crawl restricts a floor to a single malign gateway (ie: both you and Mnoleg can't have one open at the same time) is that when this was last written or updated, there was no way to uniquely identify a given monster. >.> 23:12:41 <04d​racoomega> ie: Malign Gateway predates mids existing 23:12:59 <08o​____0> :o 23:13:02 <04d​racoomega> So it was impossible to associate a portal with a given monster (to restrict just them to one) 23:13:27 <04d​racoomega> There seems to be no other structural reason I can see for it working this way 23:14:06 <04d​racoomega> (There's a bool for whether it belongs to the player, but otherwise the tentacle is considered to have a non-actor summoner) 23:14:28 <08o​____0> That there was a time after the game was released but before monster id's is very surprising to me 23:15:19 <04d​racoomega> Yeah, not until 0.8, I think. (I think the spell was actually added in the same version that mids were - just earlier) 23:15:44 <04d​racoomega> So everything that tried to refer to a monster would do so by mindex, but that's uh... not suitable for long-term references 23:15:48 <04d​racoomega> Since monsters get reused all the time 23:16:24 <04d​racoomega> I am sure there must have been a bunch of issues related to this prior to that >.> 23:16:35 <04d​racoomega> (Or just very strong limitations on what was possible to try) 23:17:42 <04d​racoomega> In any case, I will probably update this as part of what I'm doing (though I don't have the full shape of the refactoring settled yet) 23:19:43 <04d​racoomega> There is some very... odd code in some of this: C++ const int cooky = unmarshallInt(inf); ASSERT(cooky == MARKERS_COOKY); UNUSED(cooky); C++ static const long MARKERS_COOKY = 0x17742C32; 23:47:48 <08o​____0> (though even with a cap of 500 turns or so max of rest, it would be strange to "wait until ancestor is healed but only if you happen to see the hp tick to 100%") 23:58:22 horredbonez (L19 DsWn) Crash caused by signal #6: Aborted (Elf:1)