00:05:45 03Darby02 07* 0.34-a0-983-gc4236cc629: Remove 4 of the 5 ladies of the lake 10(9 minutes ago, 1 file, 3+ 4-) 13https://github.com/crawl/crawl/commit/c4236cc629e6 00:59:33 -!- indigaz26 is now known as indigaz2 01:27:09 <06m​umra> I had some thoughts on this but then I started looking at due_megacathedral and now I'm even more confused about what it's supposed to be doing 🙂 01:27:23 <02D​arby> same 01:27:46 <06m​umra> I feel like there should be some additional shuffling or replacement of C and D 01:28:01 <06m​umra> And NSUBST: C = 5:C / *:. is surely doing nothing as there are 5 C's anyway? 01:28:55 <06m​umra> Reading it, I would have assumed that each trigger gets its own instance of data, and therefore with 6 spawners one would expect 60 bats always 01:30:21 <06m​umra> But I think, because the same Lua object is applied to all the glyphs, initially the data object is shared when the level is first created. But then once you go off level and come back, the Lua triggers are reconstructed, and at that point each trigger gets its own instance of data 01:30:53 <06m​umra> Which explains that if you leave the level immediately and come back you'll get 60+ bats, or if you stay on the level there are only 10 01:37:21 <06m​umra> Firstly I think the fix at the internal level is that lua_marker should always clone any data object in the trigger (I also need to check if the actual triggerer is cloned -- does the spawn frequency also go up when you return to the level as there are now 6+ separate turn triggerers?) Cloning is what I think I'd expect on a scripting level, it's multiple separate triggers, not a single trigger somehow shared across multiple tiles, it's 01:37:22 very confusing this way Then the vault should spawn less bats per spawner and also do some better manipulation of the Cs and Ds to limit the number of spawners 01:41:12 <06m​umra> However this still doesn't solve the issue that the vault doesn't really work as designed as you're somewhat unlikely to ever see the effect take place unless you stumble into the vault early 01:41:39 <06m​umra> Even then, the turn count is so high that you'll only see bats spawn if you're resting in the vault 01:42:57 <02D​arby> yeah I've thought over the vault itself and have a course of action in mind for it, it's definitely the general lua issue you mentioned that concerns me more 01:45:35 <02D​arby> that is, but reading the original commit I think it was intended to place 5 guaranteed altars and not 6. also easily resolvable. 01:48:31 <06m​umra> I am reminding of ages ago I was trying to make a vault that had a bunch of gravestones and would have zombies rising up out of the graves on a timed trigger, I ended up leaving it as I similarly couldn't find a satisfactory way of making the experience play out as intended. What I think would be really interesting is to have this kind of ambush vault be possible to implement but you need to avoid a couple of things 1) it's a bit of 01:48:32 an autoexplore trap. You can put runed doors on the outside but that wouldn't work for something like my graveyard vault and I feel sometimes it's kind of too strong a signal of "don't go in here" 2) the timed spawns need to only start once the player enters the vault, but you also want them to only happen in LOS, otherwise when the player recognises what's going on they can duck out, wait a while, and lure things (similar to tesseract issues) 3) if 01:48:32 you want a timed sequenced to only happen in LOS you need something to encourage the player to stay in there 01:50:09 <02D​arby> that description sounds like a transporter vault to me personally 01:51:14 <02D​arby> (not to speak on the thornier questions of Lua-triggered spawns generally) 01:51:50 <06m​umra> wondering what your idea for a course of action is, but i do have a couple ideas for how to implement something like the above (like it's similar to what transporter vaults achieve, but i'm thinking of something that you naturally discover while exploring; transporter vaults, similarly to runed doors, feel less organic) 01:52:53 <02D​arby> understandable 01:52:57 <06m​umra> i mean you could have a transporter vault that appears empty, then things start spawning in when you enter it, but this feels like a very spoilery trap 01:53:13 <02D​arby> yeah, that's one of said thornier questions 01:56:44 <06m​umra> (I just tested this and as suspected, the turn triggerer also suffers this issue of only getting cloned once you leave and come back) 01:57:03 <06m​umra> I'm wondering now if there are any other vaults suffering from similar issues that have never been noticed? 01:57:55 <02D​arby> yeah 01:58:05 <02D​arby> that was the source of the lady of the lake fix 01:58:19 <02D​arby> I searched for similar vault triggers 01:59:16 <02D​arby> as far as I can tell, most others are single-tile triggers, portals, sprints, etc, and not of issue, though it's possible I've missed something 02:05:18 <06r​egret-⸸nde※> My approach for most all of this is that it's trying to ambush with mostly (vault-redefined) bats, on D:8, while the rest of the population is wraiths appropriate for the depth, and therefore the entire vault premise even before its functionality is deeply flawed. 02:06:09 <06r​egret-⸸nde※> I've got a fistful of things I was going to do for a shorter vault review on top of my current commit batch, so I'll just fit revising the vault to not use any lua into such. 02:07:00 <02D​arby> sounds good! 02:12:42 <02D​arby> (at the very start I wanted to somehow keep the lua spawn gimmick but the moment I looked deeper into it I realized it simply couldn't work with that layout and enemy selection) 02:14:12 <06m​umra> yeah. had a good search around and came to the same conclusion 02:19:14 <06m​umra> although applying the fix I mentioned could inadvertently affect Doroklohe wizlab and hellmonk_volcano_collapse. it's also possible that these weren't quite working as intended, and i'm also slightly unsure if synchronized_markers could also have a hidden issue (it might not be obvious with those if they get triggered multiple times after coming back to level as it'll be producing the same result, but it means a bunch of lua triggering 02:19:14 redundantly for an effect that's already taken place) 02:21:48 <06m​umra> hmm yeah doroklohe is certainly relying on the data object being shared between triggers 02:23:31 <06m​umra> there doesn't seem to be a reliable way to have some data that will be shared between a set of lua triggers, but just in the scope of a given vault (like, you could use a global variable, but then if that vault was spawned a 2nd time you'd have stale data from the first spawn) 02:25:43 <02D​arby> yeah, maybe we should just document that this isn't a thing you should try to do in the main dungeon 02:26:27 <02D​arby> or possibly ever (I'm not sure if there's a way to replicate the bug in portals or sprint but I wouldn't be shocked) 02:27:17 <06m​umra> Actually yes. 02:27:28 <06m​umra> If you go e.g. to Oka's arena or Abyss 02:27:42 <02D​arby> ah yep makes perfect sense 02:28:21 <06m​umra> also, just saving the game and reloading presumably also triggers it 02:28:38 <06m​umra> speedrun strats 🙂 02:45:50 <06m​umra> ok i was mistaken, doroklohe only has a single trigger so it's fine. but i'm sure something is going to turn out broken. and i'm now reasonably sure that lua:fog_machine has a slightly different but related issue 02:47:25 03WizardIke02 07* 0.34-a0-984-g469e5f41f7: Fix flash_view in tiles 10(7 minutes ago, 4 files, 18+ 23-) 13https://github.com/crawl/crawl/commit/469e5f41f78b 02:52:08 <06m​umra> (Have confirmed that saving/reloading has the same effect as leaving and re-entering the level, although it was pretty obvious that would be the case) 02:53:33 <06m​umra> I think the only correct way to fix this is to properly copy the triggers when they are created. Anything that relies on the shared instances was already broken and also needs to be fixed 03:05:14 <06m​umra> (Of course the way to fix just this vault is to have a single turn count trigger, and have that scan for markers on a specific prop, and pick one at random to spawn a bat at. Which is how some other vaults do it e,g, zonguldrok wizlab, which are therefore not problems. Bit it doesn't fix lua_marker being buggy when applied to multiple glyphs and the same mistake could easily happen again) 03:10:31 <06m​umra> Anyway given index is removing the Lua completely and I haven't (yet) found anything else affected by this it doesn't seem pressing 03:13:25 <02D​arby> yeah, I think we've converged on the answer being "going forward, don't make vaults that rely on sharing the same Lua data between different triggers" 03:14:01 <02D​arby> which, the two vaults that made this mistake are pretty ancient anyway 03:24:16 <06m​umra> What's more confusing is there are some vaults that do seem to be sharing data between triggers, when they're using synchronized_markers, and it doesn't have an issue on save/reload 03:24:24 <06m​umra> e.g. ossuary_boxes_badplayer 03:25:16 <06m​umra> (or maybe in this case, it looks like it's sharing data.triggered, but actually that's rendundant because synchronized_markers is already making sure it only triggers once...) 03:27:38 <06m​umra> or perhaps in that case we're only seeing the data on the primary trigger whichever replica triggers it 03:32:12 Experimental (bcrawl) branch on underhound.eu updated to: 0.23-a0-5261-gd9800d219b 03:54:48 <06m​umra> In terms of an "ambush" style of vault actually being done effectively. I'm thinking about a system along these lines: - Firstly a new tile flag that prevents autoexplore if the tile is in sight (possibly resting as well). This can be applied to a whole area, and then must be cleared once the ambush event is over to. It'd print a message when you first see it along the lines of "You have a bad feeling about this place" (and a similar 03:54:48 message when trying to explore/rest) - This has a more general purpose of simply being able to have vaults that must be experienced with manual exploration, so a vault creator has a bit more power to design areas that will be revealed in an intended fashion and not miss details simply because autoexplore didn't find them interesting (maybe no_explore and no_rest could be separate flags) - Spawning can be done in a couple of different ways. Having a 03:54:49 chance to spawn when new tiles are revealed vs spawning on a timer that is only active when in LOS. And spawning at designated positions vs just spawning near to the player, like at 1-3 tiles range. Might be nice to avoid spawning directly adjacent to the player so they have more opportunity to do something. (A 3rd option is spawning from a unit which can itself be killed to end the ambush, this could function as a soft introduction to the tesseract 03:54:49 mechanic.) - In the case of spawns happening over time, something to encourage the player to spend more time inside the vault. I'm thinking things like webs everywhere, or debris that have to be cleared to get to loot. Or, something new like a locked door that will take many turns to open... 03:59:31 <06m​umra> (There is Zonguldrok wizlab which already does the zombie ambush pretty well; it works there specifically because it's a portal vault and the layout makes it work. It's just not currently possible to have this kind of thing happen reasonably organically in a vault that just shows up in the dungeon) 04:10:22 03WizardIke02 07* 0.34-a0-985-g09e2fcb399: Remove old unused targeting overlays 10(23 minutes ago, 5 files, 0+ 51-) 13https://github.com/crawl/crawl/commit/09e2fcb399cb 05:13:00 03WizardIke02 07* 0.34-a0-986-g934f5e3708: Fix graphical glitch with some doors created in wizmode 10(5 minutes ago, 1 file, 10+ 6-) 13https://github.com/crawl/crawl/commit/934f5e37088f 05:35:31 Unstable branch on crawl.akrasiac.org updated to: 0.34-a0-985-g09e2fcb (34) 06:53:05 <12g​e0ff> re: modernjs PR. It includes a port of DWEM's rc editor, but what is DWEM's license? There's no info here, https://github.com/refracta/dcss-webtiles-extension-module nor here https://greasyfork.org/en/scripts/493267-dcss-webtiles-extension-module-loader. If this editor is gonna be a part of the webserver, its license info has to be mentioned somewhere. 07:03:53 <06m​umra> Sure it's a fair question. I was working under the assumption that ASCIIPhilia is happy for it to be contributed. It is mostly a wrapper for ACE Editor whose license is here and seems fine: https://github.com/ajaxorg/ace/blob/master/LICENSE (Technically, the plugin already included portions of crawl's code, in the form of options_guide.txt, and therefore by definition must already be distributed under the same license as crawl...) 07:14:01 <06m​umra> The integration needs further cleanup and finalising anyway; but, since it seems this entire PR is probably months away from being possible to merge (waiting for CAO upgrade slated for post-tournament) I'm not inclined to put much further effort into it for now. 07:17:08 <12g​e0ff> i thought there was a plan to test the modernized server on one server (CDI?) before rolling the changes to others 07:18:30 <12g​e0ff> 'cause applying such big change to all servers at once feels a bit risky 07:20:40 <06m​umra> Even if tested, the problem is getting a version of node.js onto CAO so it can even build the js bundle itself. 07:22:01 <06m​umra> gammafunk found a path to get an updated image on CAO (which would additionally enable us moving to C++ 20) ... but decided such a big server update should probably wait until after the tournament as there is some risk there 07:23:56 <06m​umra> So sure, we could prove out that this works on CDI (and prove out compatibility with DWEM, which I hadn't realised there was significant motivation to support its ... rather unorthodox method of patching scripts in-memory in the browser ...) 07:25:15 <06m​umra> But then this will still languish in a branch until probably early 2026 at which point I'll have some fairly painful git conflicts to deal with to rebase on master, if the existing webtiles js has changed at all between now and then 07:30:48 <06m​umra> (Porting the rc editor specifically was also intended as a demonstration of "look how easy it is to bring some of these features into trunk now" as there was already pushback on the PR if it was going to cause issues with DWEM; in the end though it seems possible to let DWEM still work, unfortunately it means losing the single bundle and loading speed improvements) 08:10:06 <09g​ammafunk> Fwiw I'd imagine the conflicts won't be too bad. Webtiles client just doesn't change much 08:11:14 <09g​ammafunk> Getting a cdi test in near term seems reasonable, in any case 08:32:46 <06m​umra> Hopefully yes, but literally even a small change will definitely conflict as all the files have moved and the entire indentation has changed at the very least, so it'll be something of a case of "spot the difference" to make sure any changes are replicated over correctly 🙂 yeah not huge but it's definitely enough to make me hesitate about going any further with improvements for now 08:47:38 <09h​ellmonk> currrently crawl lists spell_effect_noise for lrd as explosion size 2 with a comment saying it can reach 3 only with crystal walls. I believe this dates to the version of lrd that could destroy walls for extra radius and damage, and we should be returning explosion size 1 for lrd here 09:14:57 <05i​coson> I wish there were a way of versioning the webtiles server distinct from trunk 09:18:59 <06m​umra> well, technically there will be with this PR 09:19:10 <06m​umra> since the node.js package.json has a version number 09:20:34 <06m​umra> but we'd need to do something to enforce actually bumping that when the server code changes 09:21:36 <06m​umra> but yeah, the lobby is rarely changed. the game bundle just needs to be in line with the binary version 09:22:15 <06m​umra> or we could just generate a hash from the lobby assets 09:35:50 <09g​ammafunk> is the idea of versioning the webtiles server that we could have a "protocol breaking" change and bump this server version and a stale client would refuse to play and/or refresh itself if its encoded version was less than the server's broadcasted version? 09:36:43 <06m​umra> i'm not sure what advil was intending with it 09:37:31 <06m​umra> i already included a check in the client to let the player know to refresh if it doesn't match the new import 09:38:19 <09g​ammafunk> right, but just for this specific transition from the current client to yours as implemented in the PR? 09:38:29 <06m​umra> yeah exactly 09:38:46 <06m​umra> would certainly be a good general system to have in place in case there are more lobby updates in the future 09:39:18 <06m​umra> although right now it's something so rare it barely matters and could be achieved by just pinging all the active players if it ever happens (which can already be done right?) 09:39:54 <09g​ammafunk> it's certainly possible to simple encode a "protocol version" in the webtiles client javascript and have the server publish its protocol version in its initial websocket messages 09:40:44 <09g​ammafunk> this doesn't require any special hashing mechanism and is something akin to tag_major/minor that we simply manually encode in a file and is put into appropriate files via the makefile 09:41:12 <06m​umra> it's only useful there if the user ends up with a stale client js -- something which should be tackled separately by adding a hash onto the js filename so it's impossible to load stale js 09:41:43 <06m​umra> the issue i was trying to solve is more: you're in a game, you go back to the lobby, you join a new game and now it's on a new version that expects a newer version of the lobby 09:42:58 <09g​ammafunk> right, and your filename hashing approach can deal with that? as could my proposed scheme, but I guess it really depends on what we're interested in achieving with versioning 09:43:07 <06m​umra> no, it's two separate problems 09:43:20 <06m​umra> so you're still on the same original websocket connection but there's a new js client available 09:43:33 <09g​ammafunk> ah, well my proposed scheme could deal with this issue as well 09:43:42 <06m​umra> so you have to refresh. at that point you'll definitely get the updated client (not a cached version) as long as there's a unique hash in the filename 09:43:56 <09g​ammafunk> it would probably want to encode a protocol version as part of a set of standard lobby messages 09:44:09 <09g​ammafunk> the client would see the mismatch as it got the lobby data 09:44:28 <06m​umra> hmm. this would also imply that the server has been able to restart or is at least able to update its own version number so it can send it over the socket 09:44:53 <09g​ammafunk> yes, that is certainly currently the case and wouldn't change in the forseeable future 09:44:54 <06m​umra> we also need some improved websocket client library so the browser can reconnect the websocket if it drops tbh 09:45:34 <09g​ammafunk> in theory we can send a sigusr and have webtiles reload configuration data but like if there's a python-side change in general, a restart is always required 09:46:17 <09g​ammafunk> webtiles already has this sigusr->reload config support. I'm not sure how rigorously it's been tested though. 09:46:48 <09g​ammafunk> well, it's also possible that this version is encoded in a local file that the server monitors etc 09:48:36 <09g​ammafunk> so if you have a workflow of 1) push commits changing the client (that doesn't involve python-side changes) 2) game rebuilds, updating the server's local protocol version file and pushing the new client 3) the server is always pushing this protocol version in its lobby batches so that "stale" clients with an existing websocket connection can see they need to refresh themselves 09:48:39 <09g​ammafunk> something like that 09:49:01 <09g​ammafunk> basically just saying that we can leverage the webtiles python server to help coordinate these kinds of updates 09:49:30 <06m​umra> yep that works 10:13:45 <12a​sciiphilia> It's GPLv3. I never agreed to use my code in quest to kill DWEM, but from a licensing perspective, anyone can use it. hah. 10:13:50 <12a​sciiphilia> Anyway, it would be a good thing if features like AdvancedRCEditor were integrated into the main line first. 10:14:51 <05i​coson> right now there is no way to pin a webtiles version independently of trunk gameplay code. The way a dgl setup works is that trunk non-versioned webtiles code (python and js) is unconditionally copied into the chroot when trunk is built and updated. In principle this wouldn't have to be trunk, but the scripts for doing that don't exist. It's even more annoying locally if one wants to mix and match versions 10:15:57 <05i​coson> for example, one use case would be to have a "stable" webtiles version that is run on most servers, but a different (still pinned, but more frequently updating) version that is run on one or two servers 10:16:57 <12a​sciiphilia> This is really necessary. I tried implementing it on the client side before, but it would be better if it was officially supported. 10:18:02 <05i​coson> another use case: updating live non-versioned js webtiles code (e.g. anything in client.js) in trunk is extremely risky if you don't know what you're doing, it would be better if a push to trunk could happen without forcing any server to immediately update this code (the usual issue is that the python/js code are changed in tandem, but any python changes require a server restart) 10:20:07 <05i​coson> I think ideally webtiles-the-server would be in a separate repository, but it's extremely difficult/impossible to disentangle the code in a way that allows for this 10:21:47 <06m​umra> See this is a chicken and egg situation. We need the ecmascript upgrade to start easily adding new features to main line. Anyway -- it seems we can do this without killing DWEM. But yes I think it's better for all users if features like the new RC Editor can be available on servers by default 10:22:56 <06m​umra> (Btw. I got the container running with the one line deploy. But the reason I was trying to follow the rest of the readme to build my own container is that I need to add node.js to the container to be able to build the new version from my branch.) 10:25:39 <06m​umra> Yes. This is why I added my own check to let the user know to refresh. Actually no python code changed, but the html has changed, and the game clients beyond this version will be loaded in a slightly different way. 10:26:39 <12a​sciiphilia> I think TypeScript can create yet another barrier—it’s not vanilla JavaScript, and it could one day meet the same fate as something like the Tornado web server. Also, new contributors would need to understand the complex bundling system, which makes me not entirely comfortable with every part of your refactoring. I believe finding harmony with the existing setup is also a valid approach. From that perspective, I think it would 10:26:40 be better to keep RequireJS and modernize only the vanilla JavaScript parts. 10:27:40 <05i​coson> what do you mean by the fate of the tornado server? 10:28:26 <06m​umra> typescript is not going anywhere. but i do agree that it creates a certain barrier to entry. on the other hand, so does C++ 10:28:45 <06m​umra> requirejs also creates a barrier to entry for any web developer who is used to modern day web standsards 10:29:08 <06m​umra> NOT having typescript is a barrier to entry for a developer like myself who uses typescript every day to write web code 10:29:46 <06m​umra> but i think maybe you didn't understand what i posted earlier? 10:30:04 <06m​umra> i've changed the bundler output so that what is produced is a set of requirejs modules 10:30:24 <06m​umra> so DWEM should continue to work fine, but we can write the source code using modern import/export syntax and all the other glorious features of modern day javascript 10:30:29 <06m​umra> which seems to me the best of both worlds 10:30:49 <12a​sciiphilia> https://trends.google.com/trends/explore?date=all&q=tornado%20webserver At this point, I don’t think it’s common to start a WebSocket project with Tornado. I guess that’s also why there have been attempts to write the web tile server in Node. 10:31:10 <06m​umra> (who has attempted to write the server in node?) 10:31:19 <05i​coson> well, many features originally specific to tornado have been incorporated into core asyncio 10:31:24 <05i​coson> but tornado is still actively maintained 10:31:52 <12a​sciiphilia> I think I heard that someone once tried to write it in Node—am I wrong? 10:32:12 <05i​coson> maybe alex? 10:32:17 <12a​sciiphilia> yes 10:32:36 <06m​umra> not to my knowledge. certainly if i was going to write it from scratch, node would be my choice 10:34:54 <12a​sciiphilia> Yes, thank you for providing that kind of support. I just wanted to share more of my perspective because you mentioned the chicken-and-egg situation. 10:35:10 <06m​umra> the problem with trying to keep the requirejs syntax is that it defeats one of the main purposes of this rewrite, which is to be able to have better developer support. with import/export syntax, for instance, i can ctrl-click on an imported method and will jump to that file in vscode. and autocomplete when i am accessing the functions of an object. and error checking on all of this. just some examples of many many advantages of using 10:35:11 proper standards. none of this works with requirejs imports 10:35:40 <06m​umra> if i'm not bringing the js onto proper modern standards, frankly i'm not interested in doing the work 10:36:29 <06m​umra> and regarding the chicken-and-egg situation. having proper imports made it super easy to just import the ace editor and use it. no issue 10:36:39 <06m​umra> whereas requirejs would be a PITA 10:36:52 <12a​sciiphilia> Yes, if we try to find reasons to remove RequireJS, we could go on endlessly. But if we insist on keeping it, we could also come up with almost every possible reason to justify that too. 10:37:41 <12a​sciiphilia> Anyway, I think it’s right to follow the direction led by the lead maintainer. It’s not an unreasonable approach, after all. 10:41:09 <06m​umra> i'm not sure who this lead maintainer is 🙂 10:42:27 <12a​sciiphilia> At this point, that would be you. Does it sound a bit strange to call you the lead maintainer? What I meant was simply the person who’s currently most passionate and actively working on improving the code. 10:43:37 <12a​sciiphilia> in webtiles code section 10:46:43 <12a​sciiphilia> Since English isn’t my native language, it’s hard for me to catch subtle nuances. Would “lead developer” be a more accurate expression? Anyway— 10:53:54 <06m​umra> i think "lead" sounds strange in terms of dcss devteam structure generally ... but certainly, it's probably fair to say i have the most overall experience of web development out of at least any active dev team members. part of the reason i haven't contributed more heavily in webtiles improvements is because of the aging code standards. but maybe also, since it's what i do all day for full time work, i get more enjoyment out of dabbling 10:53:54 in other areas of the codebase and exercising C++ coding which I don't get to do at work at all 10:55:59 <12a​sciiphilia> I didn't mean to say anything similar to the senior developer(?). I literally just wanted to say who is the most active contributor right now. 11:01:56 <06m​umra> anyway don't worry i understood. it's an area i'm happy to take more ownership of, but it's also hard to anticipate how much time i'll have available in the future. but my hope with improving the js infrastructure a bit is it might make it easier for new contributors to get involved (and, easier for others in the dev team who are perhaps less comfortable in js - modern syntax is much more readable). (and yes, i definitely support your 11:01:56 concerns about typescript specifically ... while it would make things incredibly robust it would definitely cause some friction, and typescript can be pretty fickle. i think such a thing would have to wait until there are at least other regular contributors who are also comfortable in ts) 11:31:29 <04d​racoomega> While the comment itself is incorrect now, I think it's arguable whether or not spell noise should be listing the 'most common' noise or the 'highest practical' noise. Like, fire storm specifically also lists the noise for getting max radius on the explosion, which generally happens less than half the time (and the comment explicitly says it's 'worse-case' 11:31:51 <04d​racoomega> I believe this is only used for the spell UI anyway 12:21:31 <06m​umra> Idea I had to give deep elves a more unique racial feature: Give them a "deep magic reserve", so if you fall to 0MP you'll immediately gain 1MP at the start of the next turn (maybe with a cost, like some doom). So you can just keep on casting your lowest level spells. Rises to 2MP at XL9 and 3MP at XL18 (by which stages of the game they are not your best spells, but you have the utility of e.g. always being able to blink or summon imps or 12:21:32 something small). If that's too broken, even with the doom cost, maybe just like RegenMP+++ kicks in at very low MP, so you'll recharge enough for a spell every other turn or similar. 12:27:26 <04d​racoomega> I mean, they have doubled MP regen as it is, and I feel that's reasonably high impact while being pretty simple and inobtrusive (which I feel like is good in their case). Like, I realize that people regularly say deep elves aren't very strong and this may be true, but nobody is saying this about their ability to cast lots of spells. (Just that even being great at this doesn't compensate for their fragility.) 12:30:17 <04d​racoomega> (Personally, I've enjoyed deep elves a decent bit more since I gave them doubled MP regen and it does feel like your reserves in a protracted fight are quite expansive compared to most people ) 12:31:01 <03i​mplojin> i'd thought about taking the doublecasting idea out of the later versions of the moth PR and trying to work it into a mutation and giving that to DE but as mentioned above being able to cast spells isn't their problem 12:37:46 <06m​umra> I was thinking along the lines that when that magic does run out they can be in a lot of trouble (especially early game), and being able to still cast something but with a cost could help them (but yeah, it doesn't make them significantly less squishy) 12:37:56 <02D​arby> after doing a lot of math, I have come to the conclusion that their ability to cast powerful spells early with high spellpower is somewhat overstated—more elementally specialized species actually overtake them in their own specialties, while being less fragile—but their MP management, versatility, and reliability in being able to cast whatever they find is second to none 12:41:07 <04d​racoomega> Their spellcasting apt does tend to give the a huge MP lead on other species fairly early on (and I've definitely had the regen being obviously relevant) 15:10:13 <06m​umra> A question. Is anyone aware of any reason we've never used the DejaVu font in webtiles? (i.e. same as desktop) 15:10:25 <06m​umra> (I'm assuming just because nobody's ever done it) 15:10:34 <06m​umra> This is what it looks like 15:10:37 <06m​umra> https://cdn.discordapp.com/attachments/747522859361894521/1430317375160455278/image.png?ex=68f9565c&is=68f804dc&hm=9f3de758382238cad28ba37803e595c45f1be4e374f842a503f9ee2630f26a47& 15:11:06 <06m​umra> Just converted the ttf to woff format so it works as a webfont 15:15:52 <09g​ammafunk> I wouldn't be surprised if WebTiles predates DejaVu 15:16:17 <09g​ammafunk> at least in terms of it being popular 15:17:15 <09g​ammafunk> %git 0.9.0 15:17:15 <04C​erebot> kilobyte * 0.9.0: Update the release date for 0.9 (14 years ago, 1 file, 1+ 1-) https://github.com/crawl/crawl/commit/c6b3ea00df76 15:17:33 <09g​ammafunk> 2011 or so, not sure how prevalent dejavu was at that time 15:17:54 <09g​ammafunk> it did exist before that but I recall it not being a standard OSS desktop font until later 15:18:22 <06m​umra> It's more likely that webtiles predates webfonts being widely supported in browsers 15:19:14 <06m​umra> Hmm, 13 years ago that kilobyte pushed DejaVu to the fonts contrib repo https://github.com/crawl/crawl-fonts 15:19:46 <06m​umra> In my mind the desktop version font had been the same literally forever 15:20:07 <09g​ammafunk> is dejavu common now on windows or mac? 15:20:16 <09g​ammafunk> I'd always thought its adoption was more a linux thing 15:20:27 <09g​ammafunk> this is irrelevant to the original question, of course 15:20:32 <12g​e0ff> Last year (?), there were a few commits that unified the text colours of local tiles and web tiles. So maybe it's time to finally switch webtiles to the same font as local tiles 15:23:25 <06m​umra> No dejavu isn't a default Windows font 15:23:47 <06m​umra> System monospace font on windows is usually Consolas 15:24:56 <06m​umra> mac uses SF Mono apparently (at least as a default, it's possible DejaVu is available) 15:26:09 <06m​umra> but yeah we can just provide it as a webfont then webtiles will look the same whatever system you're running on. Although, I can imagine some folks object to that 🙂 15:26:28 <06m​umra> but the default font looks pretty ugly on windows, DejaVu looks waaay better 15:27:17 <06m​umra> could add an option to specify a different font (there is already an option to choose the glyph mode font) 15:36:57 <06m​umra> wait, that option seems to already exist 15:40:46 Unstable branch on underhound.eu updated to: 0.34-a0-986-g934f5e3708 (34) 16:48:43 New branch created: pull/4842 (1 commit) 13https://github.com/crawl/crawl/pull/4842 16:48:44 03mumra02 07https://github.com/crawl/crawl/pull/4842 * 0.34-a0-987-gd7da29b3e9: Use DejaVu Sans font by default in webtiles 10(4 minutes ago, 14 files, 68+ 16-) 13https://github.com/crawl/crawl/commit/d7da29b3e951 17:22:47 03mumra02 07* 0.34-a0-987-ge7a429eae4: Use DejaVu Sans font by default in webtiles 10(38 minutes ago, 14 files, 68+ 16-) 13https://github.com/crawl/crawl/commit/e7a429eae49e 18:01:06 03dolorous02 07* 0.34-a0-988-gdad79eb2a5: Fix spelling. 10(4 minutes ago, 7 files, 16+ 16-) 13https://github.com/crawl/crawl/commit/dad79eb2a5f2 20:05:11 Casdyne (L22 VSFi) ASSERT(!invalid_monster(&mons)) in 'mon-death.cc' at line 2285 failed. (Elf:3) 20:26:52 !crashlog Casdyne xl=22 vsfi 20:26:53 1. Casdyne, XL22 VSFi, T:41853 (milestone): https://cbro.berotato.org/morgue/Casdyne/crash-Casdyne-20251022-030503.txt 20:30:42 mm, I guess a dead monster was still in the monster list? 21:17:27 <07w​izardike> The hoarfrost cannon shoot the player with its last shot which triggered a blood arrow from the player killing the hoarfrost cannon and then the dead hoarfrost cannon tried to kill itself because it had fired its last shot. This resulted in the dead hoarfrost cannon having an invalid type because it had been reset after it died the first time. 21:19:13 <07w​izardike> This has also happened with lurking horrors that torment triggering blood arrows and then kill themselves 21:20:30 I wish it were easier to tell what kind of dead "monster" was involved 21:24:20 <07w​izardike> It would be nice, although we would need another we to tell when the monster's memory can be reused for another monster as that currently checks if its type is invalid 21:33:43 <07w​izardike> Anyway there are two solutions that I can think of for these crashes 1. Make blood arrows a fineff similar to the retaliation damage from the storm queens shield 2. For all monster's that do damage and then kill themselves, make sure they are alive before killing themself 21:39:41 <07w​izardike> I tempted to go with the first fix as that's what we are doing for similar retaliation sources. But it does mean that this crash is likely to come back every time a new retaliation damage source is added 22:29:05 you could argue that the code is trying to do the second, but asserting instead of simply returning 22:29:30 which wouldn't be the first time 22:31:10 in fact I think that assert's just wrong: "something else got there first, so nothing to do here" 22:35:28 Unstable branch on crawl.develz.org updated to: 0.34-a0-988-gdad79eb2a5 (34) 22:58:29 Windows builds of master branch on crawl.develz.org updated to: 0.34-a0-988-gdad79eb2a5 23:51:47 <07w​izardike> That would fix the crash, although dying isn't the only thing dead monsters shouldn't do and I don't want to check if a monster is dead everywhere. This does seem like a better way to implement the second solution than what I had in mind though 23:55:39 Monster database of master branch on crawl.develz.org updated to: 0.34-a0-988-gdad79eb2a5