00:20:20 Unstable branch on CRAWL.XTAHUA.COM updated to: 0.23-a0-703-gdf2d5e0 (34) 01:28:12 Unstable branch on crawl.develz.org updated to: 0.23-a0-703-gdf2d5e0 (34) 01:59:44 Windows builds of master branch on crawl.develz.org updated to: 0.23-a0-703-gdf2d5e0 02:59:35 Monster database of master branch on crawl.develz.org updated to: 0.23-a0-703-gdf2d5e0 06:35:06 one question, does crawl use multithreading in any way? 08:31:05 I see crawl uses assert. are asserts enabled for production builds too? 08:32:30 speaking from personal experience, I have never used assert in any of my projects, because I have found it more effective to log a bug and try to continue the process in a buggy condition in the least destructive way 08:34:55 and you never got bug reports due to that buggy state down the line? 08:35:07 possibly a lot later then when the original bug happened? 08:37:11 Some but not all of the asserts can be reached in non-debug builds 08:39:59 basically what I'm doing in my projects is to log/report a bug instead of assert. the standard procedure is something like this: 08:39:59 printf(stderr, "%s: forbidden condition met on line %d in %s.\n", __FUNCTION__, __LINE__, __FILE__); 08:39:59 and then continue the process in a way that would try to overcome the buggy condition in a least disruptive way for the user 08:42:13 *correction: fprintf :P 08:42:14 depending on what your programs do, you might get worse corruption later on. possibly even inconsistent data which is a lot harder to debug. 08:42:48 true, got to have some common sense on this :P 08:43:01 yeah 08:44:53 it makes development somewhat more convenient in a sense that when you test your code changes you could get several of these forbidden conditions logged, so with one test you could nail several bugs. 10:16:36 Hyena: it may help to orient you to this question to read through this classic so discussion: https://stackoverflow.com/questions/17732/when-should-assertions-stay-in-production-code 10:16:54 crawl ASSERT is not just an assertion the way it's sometimes used, it's an assertion plus error handling 10:17:11 and yes, they are enabled in production code, because the point is largely the error handling (and reporting for online games) 10:17:57 it's not safe (and wouldn't be helpful in crawlcode) to disable the error handling part, because many cases checked with ASSERT in this codebase will lead to inconsistent states, invalid memory access, etc if execution continues 10:18:14 for example, many uses are of the form ASSERT(x) where x is a pointer 10:19:48 now you may think that any cases like this are cases that should be refactored so the check isn't needed, and this is usually true, but highly non-trivial - and the point is that the solution isn't to continue execution 10:21:10 ASSERTs triggering in crawlcode are relatively rare, too, so it's not likely that you'd log a bunch of independent ASSERTs at one time 10:21:54 anyways, we will not be disabling error handling code in production crawl... 10:22:55 oh, and there is an option to disable them entirely but this is never used because bug reports that come from crashes with ASSERTs disabled would be really useless, plus the risk of corrupted saves, etc 10:25:05 !crash 10:25:16 !crashlog 10:25:25 20541. Alkatraz, XL27 KoHu, T:64846 (milestone): https://webzook.net/soup/morgue/trunk/Alkatraz/crash-Alkatraz-20190112-171348.txt 10:25:25 20541. Alkatraz, XL27 KoHu, T:64846 (milestone): https://webzook.net/soup/morgue/trunk/Alkatraz/crash-Alkatraz-20190112-171348.txt 10:25:34 ok, so you're not casually throwing around asserts to begin with, right? when it comes to an assert, it's already pretty bad. then it all makes sense. 10:25:39 that's a sample output from the error handling code 10:27:11 yes, an ASSERT is exactly used when you want to check a condition from which the program should not continue 10:27:32 (though in practice for a game there are plenty of things like that that wouldn't be absolutely fatal per se) 10:27:37 got it. thanks. so not to be used to enforce gameplay related rules, such as character's hp should never be higher than max hp and so on 10:27:48 well, that probably is an assert somewhere 10:27:52 sorry, an ASSERT 10:28:13 (it's helpful to keep in mind the caps, to separate it from c++ `assert` which we do not use) 10:28:44 we would in practice want the game to crash if that ever occurs, because something has become corrupted about the character 10:29:21 that example crash above is resulting from an item's memory being accessed after delete 10:30:36 also, because the error handling reports to us (for online games) immediately, we would want to see if something complicated happened to lead to that hp state so it could be fixed asap 10:31:06 usually an ASSERT like that would fail as the result of some fairly complex interaction that wasn't intended in a particular change 10:32:29 %git 10:32:29 07NormalPerson702 {ebering} * 0.23-a0-703-gdf2d5e0: Improve text when gaining/losing god abilities and on ^ screen 10(10 months ago, 3 files, 143+ 83-) 13https://github.com/crawl/crawl/commit/df2d5e0dd90a 10:33:56 %git 0a1fc62c7c503 10:33:56 07advil02 * 0.23-a0-690-g0a1fc62: Prevent recursion for `viewwindow` 10(3 days ago, 1 file, 90+ 69-) 13https://github.com/crawl/crawl/commit/0a1fc62c7c50 10:35:41 (I was just checking the commit number rather than doing that as a communicative act re the discussion about ASSERT, but it's actually a pretty good example of how ridiculously complicated behavior *after* memory corruption can be, it took me like 6-8hrs of debugging work to track down the actual problem there) 10:42:43 so, how did you find the bug? tracking down memory corruption related bugs is tedious. what clues did you have? did you use valgrind? 10:43:01 03NormalPerson702 07https://github.com/crawl/crawl/pull/938 * 0.23-a0-675-gb95f920: Convert `enum spschool_flag_type` to `enum class spschool` 10(8 days ago, 35 files, 648+ 645-) 13https://github.com/crawl/crawl/commit/b95f9208d745 10:43:01 03NormalPerson702 07https://github.com/crawl/crawl/pull/938 * 0.23-a0-676-g6c21634: Convert `enum nothing_happens_when_type` to `enum class nothing_happens` 10(6 days ago, 7 files, 24+ 23-) 13https://github.com/crawl/crawl/commit/6c2163499d58 10:43:01 03NormalPerson702 07https://github.com/crawl/crawl/pull/938 * 0.23-a0-677-gb42bdf6: Convert `enum miscast_source` to an enum class 10(6 days ago, 15 files, 124+ 99-) 13https://github.com/crawl/crawl/commit/b42bdf6decdd 10:43:01 03NormalPerson702 07https://github.com/crawl/crawl/pull/938 * 0.23-a0-678-ge4e5336: Convert `enum recall_t` to an enum class 10(6 days ago, 3 files, 10+ 10-) 13https://github.com/crawl/crawl/commit/e4e53360c4ca 10:43:01 03NormalPerson702 07https://github.com/crawl/crawl/pull/938 * 0.23-a0-679-g4bfc837: Add a note to docs/obsolete/cut_spells.txt 10(22 hours ago, 1 file, 9+ 1-) 13https://github.com/crawl/crawl/commit/4bfc837cabec 10:44:33 I've never gotten valgrind to work on os x (where I do my development), though I think there's some xcode-based tool that I haven't really tried. For this one I mostly spent some time thinking about the code and using lldb 10:45:40 that method requires prior knowledge of crawl display code, I think 10:46:48 iirc I discovered by accident that there was unexpected recursion going on after setting a breakpoint in a place that got me a stack trace illustrating it 10:47:40 nice.. so that helped you get to the the point where you could reliably reproduce the the memory corruption, thus isolating the bug? 10:48:19 03NormalPerson702 07https://github.com/crawl/crawl/pull/938 * 0.23-a0-704-ge987824: Convert `enum spflag_type` to `enum class spflag` 10(9 days ago, 19 files, 543+ 506-) 13https://github.com/crawl/crawl/commit/e9878248d985 10:48:19 03NormalPerson702 07https://github.com/crawl/crawl/pull/938 * 0.23-a0-705-g06ea48e: Convert `enum spschool_flag_type` to `enum class spschool` 10(8 days ago, 35 files, 648+ 645-) 13https://github.com/crawl/crawl/commit/06ea48e1d0be 10:48:19 03NormalPerson702 07https://github.com/crawl/crawl/pull/938 * 0.23-a0-706-gb11cdb3: Convert `enum nothing_happens_when_type` to `enum class nothing_happens` 10(6 days ago, 7 files, 24+ 23-) 13https://github.com/crawl/crawl/commit/b11cdb3b10eb 10:48:19 03NormalPerson702 07https://github.com/crawl/crawl/pull/938 * 0.23-a0-707-g829b3b2: Convert `enum miscast_source` to an enum class 10(6 days ago, 15 files, 124+ 99-) 13https://github.com/crawl/crawl/commit/829b3b24fdb4 10:48:19 03NormalPerson702 07https://github.com/crawl/crawl/pull/938 * 0.23-a0-708-g10b9812: Convert `enum recall_t` to an enum class 10(6 days ago, 3 files, 10+ 10-) 13https://github.com/crawl/crawl/commit/10b981260a4f 10:48:19 03NormalPerson702 07https://github.com/crawl/crawl/pull/938 * 0.23-a0-709-g7cf2d0e: Add a note to docs/obsolete/cut_spells.txt 10(23 hours ago, 1 file, 9+ 1-) 13https://github.com/crawl/crawl/commit/7cf2d0e49164 10:48:21 ah the first step towards reproducing it was getting the settings from a player who had triggered the bug and bisecting + trying misc stuff until I got it 10:48:23 since it was pretty random 10:48:33 but yeah, pretty much 10:48:45 Hyena: Also, if this isn't obvious, the save is not eaten by dying to an ASSERT, so rather than playing on in a buggy state and perhaps things getting worse, play can resume once the bug is fixed. 10:48:56 ah good point 10:49:17 yes, a lot of effort has been spent over the years towards trying to avoid errors resulting in save corruption at all costs 10:49:21 aha, that concludes it, thanks! 10:49:53 Cynically speaking also the user is much more likely to report it if the game stops :-) 10:49:57 heh 10:50:01 I have strong background with online multiplayer games, so such reasoning is completely new for me :D 10:50:11 but it makes total sense 10:51:04 there is a way of printing error messages to the player and continuing, and ime they do tend to report that too, but I think that's because we do it so rarely (and they always worry about save corruption too) 10:52:30 Theoretically also you could routinely grep everyone's logfiles 10:53:10 I've had my fun times with recursion myself too. recursion and changes to the global state is a dangerous combination :D and pretty hard to prevent 11:03:18 was crawl originally in C and later converted to C++ ? 11:04:46 it was c++ from the beginning, or at least built using a c++ compiler...though the original developer's c++ was notoriously idiosyncratic 11:06:05 first release of linley's dungeon crawl: https://github.com/crawl/crawl-ancient/commit/3f8128f59b04b793ca57867a21d96791a5819a68 11:08:42 I can see :D 11:09:53 was crawl built from scratch? or did it use something else for the engine? (I don't know much about the history of roguelikes) 11:11:01 from scratch, there weren't many things resembling engines in 1997 11:22:55 -!- Tiobot is now known as Guest59365 11:28:44 good to see C++11 being used btw 11:32:29 Linley's Crawl is mostly C with // comments, IIRC 11:33:57 but to remind you, I'd still like to know if there has been any use for multithreading so far? 11:34:51 I can see -lpthread flags in the makefile 11:35:24 how is it used? 11:42:21 multithreading is not currently used, at one point kind of recently the database loading that happens at the beginning of the game was multithreaded, but we disabled that because it was buggy with no real gain 11:42:53 aidanh may have some longer-term plans to do UI stuff for local tiles with multiple threads, not sure what his current thinking on that is 11:43:45 %git 6841d05e474ce 11:43:45 07advil02 * 0.21-a0-113-g6841d05: Single-threaded db init (5354) 10(1 year, 6 months ago, 1 file, 1+ 29-) 13https://github.com/crawl/crawl/commit/6841d05e474c 11:44:49 Make the clouds in Desolations multithreaded so one player in a Desolation can use up all the server's CPU rather than needing one player per core, er... 11:49:10 perhaps aidanh may be interested in something then... I actually have an idea about a potential use case for multithreading or even "multiprocessing". while I'd probably not be ready for implementing it just yet, it doesn't hurt to throw this idea out for the community to think about --- when the game is waiting for the player's next turn, spawn a copy of the current game in either a separate process or a separate thread and execute 11:49:11 the monte carlo method on the outcome of the player "passing their turn", and see how fast the player would die. then report back the results of such simulations and thus progressively evaluating a probabilistic threat level to the player's life. this could be useful for newbies to help them evaluate the real dangerousness of their current situation in a probabilistic manner 11:50:34 I'm not sure that kind of simulation would need multithreading, really 11:50:44 when using tiles you'd see something like an indicator on the HUD, Threat: 34% which tells you that there's a 34% of chance to die on your next turn if you do nothing 11:51:05 but what aidanh (sorry fot he pings) was talking about was really different, it was just having a separate thread for ui updating from the game itself, so that the local tiles graphics would be smoother 11:51:52 yes that would also be helpful, perhaps to display the time counter in real time? how many seconds the game has lasted and so on 11:51:59 I think that could often result in highly misleading output if read naively. If one space separates me from a 2HO, Threat is 0%. Then I step next to it and it splatters me all over the landscape. 11:53:15 this simulation/sandbox could really be used in many different ways. doing nothing is just one of the options 11:54:04 things would get especially interesting if that sandbox thread crashes due to some assert :D 11:54:14 then you would receive real-time feedback if your character is close to a bug 11:54:52 it basically helps you peek into the future and gather statistics 11:55:17 and the time when you're waiting for the player input would be perfect for this, because otherwise cpu is idle anyway 11:55:42 Hyena: CPU is very possibly not idle but wanted by the other players. 11:56:14 I'm not thinking in terms of webtiles, this might be disabled there 11:57:27 I think by "webtiles" you mean "online"? Now, I'm not a developer but I suspect as far as possible differences between the online and local interfaces are felt to be bad. 11:57:46 I believe chess games have something like this. chess master for example. chess is of course a turn based game, but the game looks into the possible future turns and if you get check mate in next turn then it alerts you about it 11:58:38 Chess analysis programs have Chess engines connected to them, but they're used for study, not in live play 12:00:13 so it would be perfect addition to playing crawl for study purposes locally / offline then :P 12:03:42 I'd me a hard no on this. To be able to do it well would be some very welcome but *massive* refactoring: crawl state is a mishmash of externs, not easily deep-copied; the crawl game loop is tightly coupled to the assumption that it can talk to the UI whenever it likes. 12:05:05 However, even with those refactors, displaying the "chance to die next turn if you press ." is misleading to a new player. The number will, by necessity, be very opaque (your chance is 34% but what's contributing to it? do you show that too?) 12:05:52 A general rule of thumb we've followed for quite a long time is to hide numbers when possible and give qualitative input instead. 12:06:14 I think it would be possible to pull this off without massive refactoring or any of those concerns :P 12:06:43 This is because numbers can be opaque and lead to analysis paralysis ("do I want 142 or 144 spellpower at a trade-off of 1 AC??????") 12:07:08 Which is ultimately a u.i. screw. We strive to only share the important information with the player. 12:07:14 btw I love the concept of hiding the numbers ;) 12:07:25 too muc math in modern games 12:07:45 diablo probably got it started 12:07:48 I mean math that is exposed to the end users 12:08:25 but about that sandbox thing, that's why I said "multiprocessing" because threading it could be a nightmare, but spawning a new process can be done in a perfectly isolated matter 12:08:52 just feed the player's current savegame to the sandbox as a parameter and some other flags to indicate that it's a sandbox 12:09:17 sure it's slower and more wasteful than doing it with threading and what not, but it's something already :D 12:18:44 Unstable branch on crawl.akrasiac.org updated to: 0.23-a0-703-gdf2d5e0 (34) 12:20:13 well, if you can get it to work it could conceivably be an interesting analysis tool, we do have other analysis tools like fsim (fight simulator) that print numbers. It sounds to me like it might be a bit harder than it would first appear to get to work, though. 12:20:50 I agree with ebering that integrating it with the game itself while playing wouldn't be practical 12:21:22 (fsim is a wizmode tool that is sometimes used in parallel to a game to make choices about weapons and training) 12:25:33 the way to approach the question might rather be, how do you do search (in the AI sense) in crawl's state-space 12:25:47 I'm not sure literally simulating every possibility would be the first thing I'd try 12:26:18 not every possibility, just random ones. or perhaps the most probable ones based on some predefined heuristics 12:26:40 and do it tens of thousands of times to gather information 12:28:01 this method is also a candidate for more advanced AI for monsters, such that they would perhaps do more complex actions against the player :P 12:28:25 Hyena: More advanced AI for monsters turns out, in roguelikes, usually to be a thing you don't want. 12:28:56 bosses then 12:29:28 Lait's Smart Kobolds, say, or the Angband experiments with monster AI where groups of weak monsters with ranged attacks would spread out around the walls of a room to murder you with massed fire when you entered 12:32:32 just throwing things out here, what about "other cave explorers" ? let's say from time to time the initial portal that leads into the dungeon will also spawn a "group of heroes" like in dungeon keeper. and they would be basically competitors/interlopers for the main character. they would delve into the dungeon, use advanced ai to steal gold and food. they would not be aggressive towards the main player by default ( unless the main ch 12:32:32 aracter decides to attack them or something ) but the natural dungeon inhabitants would of course see those invading bands of heroes as enemies 12:33:10 I was always amused that in Doom 1 and Doom 2 monsters fought amongst themselves, and I think this is lacking from crawl. some occasional battle encounters between elves and orcs would be fun. 12:36:14 except it doesn't work that way in crawl 12:36:33 consider that the entrance to the Elven Halls is at the bottom of the Orcish Mines 12:36:54 It seems likely the deep elves and orcs are best mates, given you find orcs in the Elven Halls and indeed the Orcish Mines are on their front doorstep... but more generally, the thing about this sort of complex idea is that you have to make it work and demonstrate it improves the game 12:37:26 yes, that's why I'm here for ;) 12:37:42 now, I've always thought Mennas and demons ought to be squaring off at times... 12:37:42 but I'm not sure it improves the game at all 12:37:42 suspect it'd mostly add to tedium 12:38:16 geekosaur: Angels and Zinnies / Ely/TSO worshippers fighting also seems a bit odd... 12:38:42 Hyena: I mean, as in, you'd have to produce a patch (that improves gameplay) 12:39:12 I'd expect them to gang up, tbh. that is, behave like a spontaneous band 12:39:29 sort of the reverse of this 12:40:38 likewise I'd expect random orcs to join Saint Roka's band (or indeed have a chance of joining the band of any knight or warlord) 12:40:45 if we consider the whole dungeon as one faction, then the only obvious way to add 3rd party conflicts is to introduce other adventurers who similarly to the main character entered the dungeon in order to loot it 12:41:26 As a side note the main character entered the dungeon in order to save the world 12:41:31 sadly, f yo uconsider the whole dungeon as one faction, the inevitable endpoint is the dungeon entrance is like the vaults:5 ambush but with panlords 12:41:46 why exactly would they wait for an invader to gain enough experience to go after the orb? 12:42:38 They're one faction, but they're not super organised 12:44:21 but to add to gameplay mechanics it would be really rewarding if certain monsters "didn't get along". so a clever player would lure slimes into a place where there are a lot of vault guards ( because slimes like to corrode metal and vault guards happen to have full metal armor :P ) so it would add the the possibilities how player could defeat the monsters by setting them fight each other 12:47:27 geekosaur: I think it's a bonus strip, but Order Of The Stick works around this because the evil lich in charge is bored, so stocks the dungeon with weak creatures at the top so he can watch the adventures hack them apart for a few days' entertainment 12:48:04 Hyena: I think in general NetHack and its variants are much more keen on that sort of mechanic. 12:48:53 Hyena, except that gameable mechanics in general are kinda bad. I could see a variant where they'll go after each other when nothing else is going on… but be highly prone to drop everything and go after the marauding adventurer 12:49:09 but this sounds like a lot of work for little gameplay gain 12:49:17 ... in a Crawl context, I think you'd be told that if it's worth going it becomes not something a clever player will do but something everyone will routinely do, and a lot of inter-level luring would be rather tedious 12:49:32 s/worth going/worth doing/; 12:55:52 gonna chime in with another hard no. Inter-level luring is tedious; making monsters hostile to one another will encourage that. It also is rife with the possibility of no-brainers: lure a horde of popcorn to give you meatshields against a tough monster e.g. 12:56:15 sure, it's nice flavour, but we put gameplay before flavour 12:56:18 ebering: or lure a horde of popcorn to set up a Grand Finale hem-hem :-) 13:01:54 the issue existing in current crawl doesn't mean we want more of it :) 13:03:11 I dunno that it's really worth doing with Usk anyway 14:57:05 IDK where you guys take it that conflicts between 3rd parties would be all over the place and gamable, ruining gameplay and what not. seems pessimistic. do you pour your food over with a mountain of spice and salt before you eat it? of course it would ruin the meal. having a one or two random encounters where monsters fight amongst themselves is a whole different story. all those issues you named about this are easily solvable, and i 14:57:05 f this idea is good enough then sooner or later a dev will come to implement it. if no one else then maybe one day that would be me, but for now I'm going to fix some simple bugs to get myself familiar with the codebase :P btw xom is my favourite god exactly for the reason that he adds spice to an otherwise dull gameplay. if random things (such as monsters fighting with each other) are allowed to happen at a very small and randomized 14:57:05 rate then interesting things will happen adding value to the overall gaming experience. this is how great gaming stories are born, when unexpected and rare circumstances come together and make something extraordinary happen ;) 15:18:57 maybe the unmolested perspective is important in some sense, but people should probably take a look at the code before they posit ideas 15:19:31 it's probably because i've been spoiled by github and PRs, and haven't had to live with mantis being the primary bug tracker since the beginning of time, but ideas without code feel so empty to me 15:23:04 sorry my VPN got disconnected, not sure if I missed anything 15:23:52 just a quick comment by me, saying it might make your ideas more well recieved if you take a look at the code first 15:24:10 you think I haven't? 15:24:28 halfway fixing 11821 ATM 15:25:23 i'm not looking to start an argument, but judging by your first point (the idea of running a duplicate game loop in the background being easy), i'd guess you haven't spent the amount of time required to make those kinds of judgements. 15:25:44 a lot of the code is pretty... archaic 15:36:04 switch__: the devteam tries to take a more encouraging tone than that 15:36:09 ambitious new contributors are welcome! 15:36:15 switch__: I hope that's not your standard answer to non-programmers looking to contribute ideas for crawl :) devs are supposed to creatively look ways how to enhance the product effectively rather than find excuses for not doing it, right? even if some random thought does not get to the point of being actually implemented, it just may ignite an idea in someone else leading to a better version of crawl. 15:36:34 even if that ambition needs some guidance so we can get them onto the same page 15:36:49 Hyena: switch__ isn't a devteam member 15:37:33 yeah I read there supposed to be +v behind the names of devs or something, but I see none. what's with that? 15:37:52 it shows for my IRC client 15:37:54 devteam members have irc mode +v in this channel 15:37:56 that would depend on your IRC client, I suppose. i see the +v just fine 15:38:06 ok, I have pidgin 15:38:17 throwback softwaare 15:38:23 I haven't used that in ages 16:03:39 I don't see +v anywhere but there are some special icons in front of a several users: advil, aidanh, amalloy, |amethyst, bh, ebering, gammafunk, Medar, Napkin, neunon and wheals ... are these devs? just trying to figure out what's the meaning of these icons. other users don't have such icons 16:05:10 yes, sounds like people with voice 16:42:52 03mgdelmonte02 07https://github.com/crawl/crawl/pull/939 * 0.23-a0-678-g3a263ef: added lua spells.path function fixed coding style added optional src coordinates -- allows determining path of spells cast from other locations removed unnecessary restrictions changed spells.path to return table of {x,y} 10(3 days ago, 1 file, 65+ 0-) 13https://github.com/crawl/crawl/commit/3a263eff4480 16:42:52 03mgdelmonte02 07https://github.com/crawl/crawl/pull/939 * 0.23-a0-684-g207bd2b: Merge branch 'add-spells-path' of https://github.com/mgdelmonte/crawl into add-spells-path 10(4 minutes ago, 0 files, 0+ 0-) 13https://github.com/crawl/crawl/commit/207bd2bc2281 16:48:37 yoooooo 16:53:30 welcome back 17:18:32 for the record, I just committed my proposed fix for 11821 under my fork of crawl. I will make the PR later, but you can already take a look and possibly let me know if you see any immediate problems with it: https://github.com/1Hyena/crawl/commit/b713196bd16335b46de515cc9a4b18f1f5b79f14 17:19:11 my first contribution to crawl :P 17:36:30 Hyena: thank you for contributing! the most healthy projects are those that are welcoming to new faces 17:37:15 floraline: Am I right in remembering you've got some variants on CKO? 17:37:43 bcrawl and hellcrawl are installed on CKO 17:38:23 floraline: Thanks. Are your dgamelaunch config files available? I was thinking of offering Gooncrawl & I'm shamelessly lazy. 17:39:54 Pinkbeast: https://github.com/neilmoore/dgamelaunch-config/commit/2a140174b9c2cc6a28de1d93ada237b9b5660fc5 17:40:02 my files are on git but i don't have a commit that is quite as clear as this one 17:40:24 floraline: Cheers 17:40:26 this should be all the changes that you need to add any experimental or fork 17:41:40 Thanks, that looks like what I wanted. 17:44:00 Hyena: this page describes the best practices for a good git commit messages: https://chris.beams.io/posts/git-commit/#seven-rules 17:44:56 i don't know exactly what standard is used in crawl, and your commits might not be directly merged anyway, but that should be a good starting point 17:44:57 a crawl specific addendum: if the commit fixes a bug the commit message typically ends with the bug number in parens, eg (11821) 17:45:31 we basically follow those 17:45:54 except the subject line, which can go up to 72 chars (or more if its really necessary) 17:52:44 ??patch 17:52:44 patch[1/2]: Too get details about how to discuss and submit a patch or pull request, see: https://github.com/crawl/crawl/blob/master/crawl-ref/docs/develop/contribution-process.md 17:52:58 recommend you start with the guide we made if you're new to contributing 18:28:44 thanks for the links about contribution rules, I browsed them through once already but will do it again before making the PR. can't do it today though, too late here, going to sleep :P 20:08:11 gammafunk: I'm thinking of finishing off removing the ~ glyph from des 20:08:26 I was thinking of putting either clear_door or runed_clear_door on that glyph 20:09:16 runed_clear_door should eventually become the default of =, but that could be a good default for just clear_door ; however that ~ removal work has be to done carefully 20:09:16 because many vaults use that as an intermediate glyph 20:09:22 and some of those will let it default to nothing 20:09:36 I started to do this myself, but there's a lot of vaults to look at 20:09:53 argument in favor of just clear_door is that it lets me add cleaar doors to some elf layouts and realize infiniplex's dream 20:10:06 well you can do that just fine regardless of the glyph used 20:10:26 what I'm saying is that it shouldn't be rushed since many vaults will silently break 20:10:49 I think = should become runed_clear_door, and yeah ~ would be good for clear_door 20:11:03 but my main concern is not breaking the many vaults that use ~; ensuring that those are properly converted 20:11:22 so we're pretty close to the freeze and I'd be a bit worried about rushing the change 20:11:30 I'm not sure I follow. If they're currently using ~ and correctly kfeat or nsubsting it 20:11:43 then nothing should go wrong if the meaning of ~ changes 20:11:51 since it's currently "random depth appropriate trap" 20:12:01 if it's not overrident 20:12:15 (this is why I picked ~ instead of something that currently has no meaning) 20:12:17 yeah, right; that's true, the default isn't floor. Those vaults should all be reglyphed though 20:12:49 I take it you have a t date in mind if we're talking freeze 20:13:05 I was thinking...I think it's feb 8? 20:13:20 %git 0.22.0 20:13:20 07gammafunk02 * 0.22.0: Remove old hints code about Sif Muna refusing worship (RoGGa, 11578) 10(5 months ago, 1 file, 1+ 15-) 13https://github.com/crawl/crawl/commit/1bde85e82f1c 20:13:56 would definitely be around the right time, works ok for me timing-wise 20:14:04 although there's the issue of server to host the tournament 20:14:42 but regarding the ~ thing, I think clear door is a good choice, and yeah if ~ has a default def than that should indeed work ok; the reglyphing should happen but can wait 20:15:00 but also, regarding infiniplex's layout, that doesn't depend on what the glyph is 20:15:08 you can just modify the layout to set whatever kfeat etc you need 20:16:01 |amethyst: you mentioned that you'd like to retire cszo soon; should we look to find another server to host the next tournament (say feb 8th)? 20:16:31 sadly I don't think we can quite enable more systematic uses of runed clear door yet (like making = default to that, like I said) 20:16:42 since autoexplore with those is a little weird 20:17:09 if you have one blocking access to items that you can see, you just get a message of "partially explored, unreachable items" 20:17:18 due to the logic that travel uses 20:17:39 oh, I see what my hangup was. mapgrd in dlua context just sets the raw text of the vault's grid 20:17:52 and then thaat gets processed later in the builder 20:18:08 still gonna remove ~ meaning random mechanical trap 20:18:16 as part of the quest to remove those forever 20:18:31 yeah; if you're confident that the reassign of meaning to the new door won't break anything, you can do that too 20:18:37 I forgot how that one was already defined 20:19:14 but would be good to reglyph vaults using that as an intermediate; I'm all for reassigning glyphs with defaults when you actually need the symbols 20:19:26 but in probably 100% cases of existing usage of ~, it's not needed 20:19:54 my guess is that, since it already has a meaning of trap, most uses are gonna be trap related 20:20:07 oh, that is most certainly not the case 20:20:16 they use it for just random purposes 20:20:46 it's a good "weird thing" or "stuff to put on floor" symbol 20:20:56 I've seen a few vaults use it for liquid 20:21:09 because it looks like the console glyph we use for water/lava 20:21:29 mmm 20:22:03 from dat/des, do git grep -P "~(?!=)" 20:22:20 that weeds out most of the spurious hits from lua things like '~=' 20:22:42 ya I've got that open now 20:22:50 branches/lair.des:KMONS: ~ = plant 20:22:50 branches/lair.des:KFEAT: ~12345%*|! = W 20:23:01 good stuff 20:23:09 lol 20:24:17 doesn't look toooooo bad 20:24:47 definitely doable, yeah, just not a 30 minute project 20:25:08 but it's also something that can be done over time; my only real concern was breakage 20:25:22 the autoexplore issue for runed clear doors though, that is a bit less clear 20:26:29 ooh, some fun converting the sprints though 20:26:33 they like to use ~ for weird stuff 20:27:36 this kind of vault overhault can take longer than it seems, since you want to test each vault you change and testing it can take time 20:27:45 just so easy to make a small error that isn't obvious 20:27:56 s/overhault/overhaul/ 20:32:14 yeah; I've got a build that complains about vaults that use ~'s default meaning and I'm running mapstat with it 20:32:22 to hunt down anyone who might break 21:38:04 03ebering02 07* 0.23-a0-704-g7fdf9c5: Add clear doors to some Elf layouts. 10(89 seconds ago, 3 files, 9+ 9-) 13https://github.com/crawl/crawl/commit/7fdf9c5c27d4 21:40:48 Just with a KFEAT for now 21:40:55 turns out infiniplex's layouts are great 21:41:08 he had a nice specific spot where they were kfeated to floor 21:41:27 erm, to doors 21:41:59 yeah, he did take the time to structure his code nicely 21:43:14 what is on cszo? just static content right? 21:43:35 the content can be hosted in an S3 bucket. I guess tourney scripts need somewhere to run though 21:43:53 should be possible to spin up a little VPS for the tournament duration every six months 21:45:23 yes, it is, but then it needs to run for 16 days + maybe 1-2 weeks prior and then static content has to be moved 21:47:00 the website files? yeah, a periodic (eg minutely) sync to s3 from the same box should work 21:47:01 if cszo is available for this tournament, we should probably use that this time, but after that we should for sure look for a new host 21:47:13 Unstable branch on crawl.kelbi.org updated to: 0.23-a0-704-g7fdf9c5c27 (34) 21:47:14 just need to know how much RAM/disk/cpu the tourney takes 21:48:00 well, we can't give out a s3 url to the tournament either 21:48:27 well we could, but that would be a bit weird; I guess it's not actually critical what the url looks like 21:50:14 looks like we have a bit less than 6gb taken for the past tournament data 21:50:56 can't really say more about ram/cpu since it's postgres with a python script in the background; whatever you get from that + http access 21:51:31 a 21:51:34 along with crontabs fetching rc files every 15 minutes in some cases 21:52:05 advil: might be able to point tournament.dcss.io at something 21:52:41 yeah, for static content hopefully something like that could be arranged 21:53:41 yep, cloudfront can give S3 a pretty domain for nearly no cost (well, pay per gb, but I can't imagine tournament plus old cszo data would transfer a lot) 21:54:30 huh. actually you don't even need cloudfront at all, s3 natively supports it. That might be annoyingly slow though 21:59:37 thinking timeline. Feb 8 works fine for me for a tournament start; I guess we want to have the point release done a few days earlier (6th?) 22:00:09 maybe target the 23rd for feature freeze? 22:01:54 alexjurkiewicz: this weekend is basically expired; will you be back in the land of the typing next weekend? I'd like to get datafiles merged for this release 22:02:54 we've often done the release the same day or day before since servers have already installed the branch beforehand anyhow, but the 6th would be fine 22:03:38 26th might be a better day for freeze, but we can revisit that I guess 22:03:52 er 27th 22:04:19 solid week for bugfixes and some change 22:10:52 yeah, I was hoping that I could scrounge up some oss hackathon or other that weekend and get some new people interested in a bugsquash athon 22:10:59 but if not oh well 22:12:19 I guess that doesn't have to wait for freeze 22:19:33 yeah, typically the bug fix rush sort of begins before freeze 22:24:07 ebering: my availability is good for 10am-12pm Sunday morning AEDT (11pm Sat - 1am Sunday GMT) 22:25:18 and any time sat 26 - mon 28 is probably doable, although it sounds not good based on the above? 22:26:39 that'd be cutting it a bit close; I'd prefer to do it on 19-20 22:27:44 is `git describe` guaranteed to be accurate during a stable release? at what point are the new tags pushed to the repository? 22:28:07 yeah sorry for the tiny window, that's all I have remaining 22:28:20 how dare you :) 22:30:43 floraline: git describe is always accurate relative to what branch is checked out; it simply assembles a string based on the most recent tag and the hash 22:31:10 releases have their own branch (of the from stone_soup-0.XX) 22:31:17 and those always have a released version tag as the most recent one 22:32:04 if you want to know our general release process, see: https://github.com/crawl/crawl/blob/master/crawl-ref/docs/develop/release/guide.txt 22:32:40 but we branch the stone_soup release branch around freeze and tag it with a beta tag 22:32:53 then we make a new tag for the next dev version in master 22:33:15 these are different branches so there's no conflict 22:34:04 s/of the from/of the form/ 22:36:08 ebering: so that time is a lock? I'll calendarise it 22:36:37 alexjurkiewicz: my life is not so well calendarised; can we go with soft-lock for now? 22:37:13 sure m8 22:58:44 gammafunk: the guide says to tag trunk only after the next diverging commit. i'm concerned about that window of time between the commit and the new dev version tag 22:58:57 won't that new diverging commit show the wrong tag during that window? 22:59:28 and potentially all other commits until that tag is created 23:01:44 the tag is only "wrong" in the sense that it is a 0.X-a0 tagged game after 0.X-b1 has been tagged 23:02:30 well after the new dev tag is created, that commit will change from 0.X-a0 to 0.X+1-a0 right? 23:02:55 or am i misunderstanding how this works 23:02:57 which is "that commit" 23:03:09 %git 0.22-b1 23:03:10 07gammafunk02 * 0.22-b1: Update the changelog through 0.22-a0-900-g8945bfbd8a 10(6 months ago, 1 file, 14+ 1-) 13https://github.com/crawl/crawl/commit/b94f922fbb0d 23:03:15 %git 0.23-a0 23:03:15 07advil02 * 0.23-a0: Remove obsolete discussion of ghosts (11562) 10(6 months ago, 1 file, 3+ 5-) 13https://github.com/crawl/crawl/commit/030cbd369d74 23:03:24 the first trunk commit (intended for 0.24) after 0.23 diverges into a release branch 23:04:06 oh, I see; you're worried that the new commit (which should get the tag 0.24-a0) won't have the tag until the tag is pushed to the repo at possibly a later time 23:04:16 right 23:04:25 uh, this is my first release as a team member 23:04:41 my gut is to say "we wont do that" but maybe someone with more experience can give the real answer 23:04:47 so my system will register that commit as a 0.23 game and will transfer 0.23-a0 trunk games to that version 23:05:19 it will also transfer 0.23-a0 to 0.24-a0 if they're trunk games 23:05:42 dgl uses git describe for pretty printing, but organizes games as branches 23:05:42 i've modified savegame-transfer to not do that 23:05:45 oh. 23:06:32 it uses git describe to know whether a given trunk commit is targeting the same release 23:08:12 are you configuring cko to move trunk games to stable for their target release when it's available? 23:09:30 i'm not exactly sure what behavior i want yet 23:09:59 the way i've modified it now, if there are very old trunk games like from 0.17, they would only transfer up to the latest 0.17 trunk version and not fly all the way up to 0.23 23:10:44 but it also means 0.23 games will not continue to transfer to 0.24, which might not be desirable for current ongoing games 23:11:15 yeah; that diverges from how other servers operate, where master stays master and when you transfer you get the latest 23:11:40 in principle the save compat code works, but a transferred character can get a raw deal 23:11:48 with an inventory full of wands of removedness 23:14:05 well, maybe this idea is not that helpful. i'll think on that some more 23:14:58 you'd just need to make an exception for the most recent number, no? 23:15:16 right, that's what i was thinking 23:15:16 while you'ree poking with things, do you want to update pr 800 to use getattr? 23:15:48 but is it really that useful to prevent 0.17 games from transferring to 0.24? would any player even care if their game changed that much? 23:16:40 it's the hazard of letting a trunk game age 23:16:58 sure i'll look at 800 now 23:18:47 i like the idea 23:19:06 personally, it'd be more in line with what i'd want if i were to come back to an old game 23:21:35 that experience is available, it's called playing stable :) 23:21:57 floraline: next divergent commit is always made by the person pushing the tag 23:22:50 that is to say that this is all done by one person doing all this stuff at the same time 23:24:05 ok great, that solves that problem 23:25:07 I'm not sure what's your motivation for preventing transfers from older trunk versions into current trunk 23:25:12 something about cleaning up old versions? 23:25:38 if a player has a parked game and they choose to transfer 23:25:50 it's far more likely they'd want to transfer it to the latest version I think 23:26:26 i think i'm going to retract my changes, i would rather not change the expected behavior for savegame transfer 23:26:29 since they have the option to not transfer, they can simply not transfer if they want to e.g. stay on 0.17 23:27:03 I even had a recent game where I did this 23:27:11 !lm . vsdk begin x=vlong 23:27:12 1. [2014-11-16 21:25:57] [vlong=0.16-a0-2303-g5327d74] gammafunk the Torchbearer (L1 VSDK of Yredelemnul) began the quest for the Orb on turn 0. (D:1) 23:27:19 !lg . vsdk x=vlong 23:27:20 1. [vlong=0.22-a0-422-g9628fc8] gammafunk the Slayer (L27 VSDK of Yredelemnul), escaped with the Orb and 3 runes on 2018-05-18 18:44:40, with 1696813 points after 70775 turns and 7:13:15. 23:27:31 !lm . vsdk begin x=vlong,gid 23:27:33 1. [2014-11-16 21:25:57] [vlong=0.16-a0-2303-g5327d74;game_key=gammafunk:cao:20141016212555S] gammafunk the Torchbearer (L1 VSDK of Yredelemnul) began the quest for the Orb on turn 0. (D:1) 23:27:34 !lg . vsdk x=vlong,gid 23:27:35 1. [vlong=0.22-a0-422-g9628fc8;game_key=gammafunk:cao:20141016212555S] gammafunk the Slayer (L27 VSDK of Yredelemnul), escaped with the Orb and 3 runes on 2018-05-18 18:44:40, with 1696813 points after 70775 turns and 7:13:15. 23:27:40 just a game I had parked years ago 23:28:16 i'm in the process of automating savegame transfers and i was trying to figure out the best way to do it 23:28:50 i was thinking this would be helpful in the event that someone's old game was automatically transferred 23:29:22 doing this change would allow me to transfer all old saves in the interest of saving disk space and reduce the number of trunk versions on hand 23:29:22 but it would also keep players' games in the version they left it in 23:29:52 so e.g. all the different 0.17 games would be transferred to the same version, so i would only have to keep a single 0.17 trunk binary 23:30:05 i don't have any such games right now so this is just hypothetical 23:30:22 yeah, I imagine it'd be best to just transfer them to latest trunk 23:30:28 only wrinkle might be if we break save compat 23:31:14 in which case that can't be done and you would have to transfer them to something like the latest stable (or the most recent stable relative to their current version, like you were planning) 23:31:37 from what i can tell, the transfer script already handles a change in save compatibility 23:31:45 it will just transfer you to the latest version it can 23:32:26 just based on the latest trunk build it has with the same major version? 23:32:44 it's been a while since I looked at those scripts 23:32:45 right 23:33:43 all i did was make it so in addition to filtering on the same major version, it also filtered on the same 'game version' like 0.23 23:35:21 anyway i think you're right, this is not that useful. and i'm not comfortable with diverging from the expected behavior 23:36:36 i'll probably just end up keeping the latest X binaries and automatically transfer everyone who gets left behind 23:55:45 03floraline02 07https://github.com/crawl/crawl/pull/800 * 0.22-a0-544-g9ceafa5: Use getattr to avoid throwing exception when setting is missing 10(2 minutes ago, 1 file, 1+ 1-) 13https://github.com/crawl/crawl/commit/9ceafa5e6583 23:59:41 Unstable branch on CRAWL.XTAHUA.COM updated to: 0.23-a0-704-g7fdf9c5 (34) 23:59:49 when does the tournament start relative to the creation of the beta branch?