-------------------------------------------------------------------------------- 008097b | DracoOmega | 2024-12-11 02:47:28 -0330 Squash all ID flags into one, refactor heavily Crawl's identification game has grown more and more simple over the years, but much of the *backend* for its old complexity remained in the code: there were flags for individually identifying an item's type, plusses, and even each individual artprop of every artefact. At one point in time, these all served a purpose, but most of them are redundant or unnecessary now. This replaces all existing ID flags with a single one, ISFLAG_IDENTIFIED, and refactors a ton of code to be simpler and more clear; items are now either fully identified or unidentified. Multiple completely unnused functions have been removed, a few more have been renamed for clarity, and identification checks for situations where un-ID'd items should be impossible (ie: checking the ID status of equipment the player is currently wearing) are also removed. Old uses of set_ident_flags() and set_ident_type() are both folded into identify_item() as appropriate. get_item_known_info() is removed entirely. With item identification being binary and all monster equipment being pre-identified, this felt like overkill for most current uses. Instead, we just hide unknown properties of items in player-facing description, rather than making a copy of every item with all unknown properties removed (in fact, most uses of this function effectively did so already.) ID checks were added to a few clue item functions, but the only place that required any special handling (as far as I noticed, at least) was calculating attack delay with an unidentified weapon with a speed or heavy brand, and that can be handled more simply. The stanard way to check whether an item is identified is now item_def::is_identified(), which checks not only the ISFLAG_IDENTIFIED on the item itself, but whether the item *type* is known. (A less obvious effect of get_item_known_info was that the item copy could be *more* identified than the original in many cases - in fact, this was seemingly how the game showed items on the floor whose type was known, but which you had not yet picked up, as identified - but that functionality is no longer needed.) Since there are no longer multiple levels of identification, itemspec identification syntax is changed somewhat. Instead of "ident:all" or "ident:type", there is just "pre_id". (I wanted to just use "ident" originally, but this ran into issues with scrolls of IDENTification and trIDENTs...) One minor loss is that item_def::name can no longer be passed ISFLAG_KNOWN_PLUSSES to hide printing of plusses on items, but on reviewing all current uses of this, approximately the only change I can see is that item plusses will be used for the message about manifold assault being incompatible with your current weapon, and the name of armour echoes (which is arguably an improvement for them, now that they're not longer +0 all the time). DESC_DBNAME no longer includes plusses by default (it never made sense there). Given this was a complicated and far-reaching refactor, it is possible some additional bugs remain, but I've verified a plethora of different interactions, both in wizmode and actual gameplay, and they seem correct. Fingers crossed. -------------------------------------------------------------------------------- 146f489 | David Lawrence Ramsey | 2024-12-09 18:26:10 -0600 Add another mythical creature to artefacts. According to E. Nesbit's "The Book of Dragons", it's an inverse griffon, with the lion half in the front and the eagle half in the back. It's spelled leo-griff there, but that doesn't fit the style of e.g. hippogriff. -------------------------------------------------------------------------------- 1592f7d | regret-index | 2024-12-09 20:02:47 -0330 Set up a four-month-long gag (Darby) The process for this went: * Reading through ToME4's list of spell effects and noticing the capacity to make one of one's ally skeletons a Lord Of Skulls, then * comparing Crawl's lack of skeleton spell allies these days (to recieve such a title) to one of Dragon Quest's greatest monster designs, the guaardvark. The end results should somewhat reasonably work even without this context, in terms of emphasizing how this perpetually-joyful-looking marsupial has over a hundred thousand kills under its name in this ever-so-violent video game. -------------------------------------------------------------------------------- bd2725d | jjjingleheimer | 2024-12-09 20:02:47 -0330 Add tile for player under Glaive of Prune curse (#3239) It would be helpful for some visual to see when the prune curse kicks in, & adds fun flavor. [Committer's notes: Decided on one of the submissions that didn't have any icy effects on it, due to either coming off as closer to fire or being very obviously cut off, and desaturated it a bit from the Glaive of Prune's colours to try and get closer to the specific dark glossiness of a prune. Implemented actually displaying this with the tech introduced for a31ef7c, and cleared out a redundant tile while doing so. It's a little weird looking (though prunes are not the most photogenic of food in the first place), but the visuals when it happens are 100% worth it, so I am grateful for the submission. Closes #3239.] -------------------------------------------------------------------------------- a6ff03a | Implojin | 2024-12-09 07:46:56 -0600 Enable some slow-swap artps on talismans (Lici) This enables +invis, harm, and rampage as possible randart talisman artps. It does not enable -cast for now, as an intentional design choice, because we want to encourage spellcaster -> shapeshifting skill transitions. It also does not enable regen, because of an extant regen-related crash in the underlying item deactivation code. (TODO: fix this) -------------------------------------------------------------------------------- 2ebf793 | Implojin | 2024-12-07 14:44:30 -0600 Fix a des typo (Pinkbeast) -------------------------------------------------------------------------------- 7c3642a | Implojin | 2024-12-07 10:25:43 -0600 Don't skip mutation and forms checks when equipping bardings As reported in #4142, Nagas were previously able to equip bardings while in beast form. This was because `can_wear_armour` was returning true early when equipping bardings, thus skipping the mutation and forms checks further down in the function. Fixes #4142 Closes #4148 -------------------------------------------------------------------------------- b64493d | Implojin | 2024-12-07 07:56:09 -0600 Remove a spurious untransform barding check As far as I can tell, it isn't currently possible to wear boots on a barding species while transformed. Also, special casing this slot removal exclusive to boots on barding species was super weird; if this fix was previously needed, it seems like it should have been handled on the equip side. (Did we ever have a form that *intentionally* gave temporary legs with an attached equip slot??) -------------------------------------------------------------------------------- fb585ed | brandon s allbery kf8nh | 2024-12-07 06:30:20 -0600 remove old g++ check The pattern matches Arch's 14.2.x, which leads to inconsistent optimization and crashes with their build flags. Meanwhile, (a) OS X no longer ships the ancient gcc/g++ it's trying to avoid, and (b) akrasiac was at some point upgraded to a gcc/g++ that supports C++11, so just remove the whole thing instead of trying to fix it. -------------------------------------------------------------------------------- 80a0b12 | regret-index | 2024-12-07 01:59:07 -0330 Vault review ever-repeating Worthy of note: * A few decorative altar vaults to Chei and Oka can now appear in Snake, and a few more vaults closer to the tone of V than Depths (using e.g. crystal guardians or slime creatures) have been moved to the former. * In an experimental and incomplete fashion, a small number of Elf end vaults that had singular single-tile corridors for entrances now have diagonal entryways that allow for mild ducking around corners but also don't make it quite so easy to funnel enemies down a single line, to try and mildly discourage digging tactics nearly as much as the branch already does for the first ~50% of the end vault. Possibly these stone entrance paths want to get fairly larger still to more meaningfully discourage such, but I'm wary of doing too much with this when the end castle layout wants more discrete singular boxes.... * Yet more small amounts of beast and serpent talismans are in thematic vaults early on. * Some of the statistically weaker Pan lord vaults and Swamp end vaults have been nudged upwards again. * The last couple of rounds of arenasprint are slightly more vicious yet again, due to the ceiling already being quite high and the discrete nature of waves being easy to adjust. Some day I'll do enough fresher tests to get a feel for the overall wave balance. -------------------------------------------------------------------------------- a893128 | DracoOmega | 2024-12-06 19:21:50 -0330 Fix bombard having the wrong projectile tile -------------------------------------------------------------------------------- 5a6c091 | gammafunk | 2024-12-06 14:13:20 -0600 Fix the build on CAO Apparently CAO's gcc 4.7 doesn't like that various calls to std::sort() have lambdas with non-const arguments. We're not sure precisely why it's complaining, since this doesn't happen with non-ancient versions of gcc. Until we can upgrade CAO's toolchain, this fix will allow CAO's crawl builds to complete. -------------------------------------------------------------------------------- f8f82a2 | DracoOmega | 2024-12-06 06:43:47 -0330 Fix Searing Ray crashing when cast Broken by 1f3234b. I should have paid more attention to the 'else' below that... Fixes #4162 -------------------------------------------------------------------------------- 8bf3021 | DracoOmega | 2024-12-05 23:24:28 -0330 Revert "Make banish animation (and similar) fill the webtiles viewport properly" This seems to be causing crashes with shift+X that I don't yet know the cause of, so I'm reverting for now in hope that the slow build servers don't catch this. This reverts commit 761acde7cbba57105fef83c912b375ac92b690cd. -------------------------------------------------------------------------------- ceed616 | DracoOmega | 2024-12-05 21:25:23 -0330 Reduce Diamond Sawblade damage This spell has gotten overall positive feedback, but is probably a little overtuned. This reduces its damage output by ~20% (a little less at low power, and a little more at high power.) -------------------------------------------------------------------------------- ec6189a | DracoOmega | 2024-12-05 21:16:14 -0330 Allow Spike Launcher to be built in any type of wall I'd originally thought that limiting it to rock walls would be a positional restriction of mild interest (the vast majority of early walls are rock already, after all, and the spell is long past its lifespan by the time that changes). This has been somewhat unpopular, but the biggest motivator for this change was realizing that this makes it almost completely unusable in Sprints. Arguably that isn't the biggest deal with the current state of Sprint maintenance, but I'm also not sure 'rock only' is a critical part of the spell's design either. So now it works in all walls. There is no functional benefit to making the trap in a metal or crystal wall, compared to rock, but it does work. (I didn't want to incentivize people dragging things back to an isolated crystal pillar in earlygame, and the random targeting might feel worse if it could miss the 'good' wall nearby.) This also adds a static targeter (which coincidentally fixes a crash with the default one, which thought it was a beam spell with -1 range...) -------------------------------------------------------------------------------- 1f3234b | DracoOmega | 2024-12-05 20:55:42 -0330 Fix Searing Ray charging an extra 1 MP on its first turn active If you only had 2 MP, it would still work, but would eat up 3 MP if you had it available. If you were a djinn at 3 HP, though, it would just crash. -------------------------------------------------------------------------------- ddd2a15 | DracoOmega | 2024-12-05 20:54:52 -0330 Fix sawblades still spinning in Sanctuaries (Bn) -------------------------------------------------------------------------------- 698b4d4 | DracoOmega | 2024-12-05 20:53:43 -0330 Don't let alembic brew potions by hitting firewood (Oneirical) I considered ignoring peripheral monsters also, but that might be unintuitive and those at least typically only show up mid-battle. -------------------------------------------------------------------------------- d85df88 | DracoOmega | 2024-12-05 20:52:43 -0330 Fix pillars of rime not expiring with time (Oneirical) And make them last just a touch longer than they were supposed to. (Was accidentally broken bye the summon refactor.) -------------------------------------------------------------------------------- 761acde | DracoOmega | 2024-12-05 19:34:37 -0330 Make banish animation (and similar) fill the webtiles viewport properly crawl_view.viewsz is supposed to represent the size of the viewable viewport, but webtiles only ever used the default value (33x17, for some unclear reason...) rather than adjust it based on the actual viewable area. The map itself was clearly drawn without needing to consult it, but this made some animations take up a fixed size in the middle of the screen rather than the whole viewable area. (It also negatively affected feature cycling with x, and potentially some other UI things that expected viewsz to correspond to the viewable area, instead of typically being smaller than it.) Given that I still have low confidence with webtiles rendering, I'm not completely confident something else didn't rely on the old (seemingly buggy) behavior, but fingers crossed... -------------------------------------------------------------------------------- 9d6bf4c | DracoOmega | 2024-12-05 06:05:24 -0330 Disallow casting Poisonous Vapours on yourself (It currently crashes if you do so, but I'm not especially sure there's any good reason to allow it anyway.) -------------------------------------------------------------------------------- 3471257 | regret-index | 2024-12-05 00:53:27 -0330 Tweak Call of Chaos's target checks It used to only exclude firewood, but not tentacle segments or projectiles. Providing message spam _and_ visual confusion for buffing tentacle segments (that may despawn anyway as part of tentacle movement) is particularly obvious with Mnoleg having both Call of Chaos and Malign Gateway. As such, it now uses the is_peripheral check from 62137d7 to cover those other missing parts. -------------------------------------------------------------------------------- 7ca0e80 | regret-index | 2024-12-05 00:45:36 -0330 Further Forgecraft tiles (Sastreii) Spell icons for Nazja's Percussive Tempering and Splinterfrost Shell, alongside a new monster look for platinum paragons. -------------------------------------------------------------------------------- 7ba2e51 | regret-index | 2024-12-05 00:16:29 -0330 Prevent Xom bazaar trips in Sprint Crawl crashes rather unhappily when Xom tries to enact bazaar banishment, due to all branches outside of the Sprint map not being allowed to exist. It'd screw up arenasprint and meatsprint timers, and Lugonu doesn't get to do any Abyss shenanigans either, so we might as well just disable it both from Xom's choices and wizmode calls. -------------------------------------------------------------------------------- 988c20a | regret-index | 2024-12-04 23:50:30 -0330 Remove an unused enum dragon_class_type was used for Summon Drakes having a chance to also pick base draconians or random dragons (and for bonus points, listed all the drakes under lizards due to having a chance for komodo dragons), but hasn't been used for such since the Summon Drakes changes in 9b5a216 (as 0b5e84b carried forward). -------------------------------------------------------------------------------- afdce70 | DracoOmega | 2024-12-04 21:04:50 -0330 Fix the game thinking Mercury Arrow could hit 1 past its range (pisaster) This was true of Mercury Vapours, but you only get the splash effect when you actually hit something now, so it cannot affect things with no enemy in range. -------------------------------------------------------------------------------- ae92cfb | DracoOmega | 2024-12-04 18:41:24 -0330 Fix randart staves getting verbose descriptons in dumps (Ge0FF) Other weapons did not get the block about how your skill training would affect them (which even contained unstripped colour tags). -------------------------------------------------------------------------------- a90abc6 | DracoOmega | 2024-12-04 17:32:42 -0330 Fix custom books shop for new spells (Oops) -------------------------------------------------------------------------------- c082a88 | DracoOmega | 2024-12-04 17:12:38 -0330 Don't weaken monsters with no attacks (It cannot actually do anything to them, so don't bother announcing.) -------------------------------------------------------------------------------- f97d59c | DracoOmega | 2024-12-04 17:12:38 -0330 Remove rPois from endoplasms With Alchemist's starting spell now literally unable to harm monsters with rPois, an early endoplasm seems unnecessarily threatening to XL 1 alchemists. So let's just cut their rPois entirely (who says all slimes are made of the same sort of stuff, anyway, right?). This should have little meaningful effect on anyone else. -------------------------------------------------------------------------------- baccc4c | DracoOmega | 2024-12-04 17:12:33 -0330 Experimentally adjust Alchemist level 1/2 spells Mercury Vapours was a spell that many players struggled to find worth using. The weakening effect could hit the player in close range (making it less good for helping melee encounters than one would like), and the very short range left its smite-targeting only mildly useful. The fact that the weakness ignored rPois was *intended* to help alchemists a little against poison-immune encounters, but generally it didn't help by *enough* to make it worth fighting poison-immune enemies instead of fleeing. It certainly wasn't useless, but it feels like we can do better. This is an attempt to make the Alchemist level 2 feel a bit better, while keeping the uses between their level 1 and 2 spell more distinct. Mercury Vapours is replaced with Mercury Arrow, a range 4 level 2 conj/alchemy spell that does partially-irresistable poison damage (just like sting did) and inflicts Weakness on the enemy hit (and all enemies adjacent to it) using the same formula Mercury Vapours used to. It *cannot* weaken the player. Sting is replaced by Poisonous Vapours (slightly different than the old spell by that name). It is range 3 level 1 alch/air spell that does a tiny bit of AC-ignoring poison and inflicts 1 level of poison on a target, but does not affect anything with rPois at all - essentially a weaker/shorter-range version of 0.30 poisonous vapours, but level 1. The hope here is that the level 2 is more worth using in more situations (including sometimes against rPois enemies, even if they remain a distinct weakness for early alchemists), while making the level 1 a bit more distinct in usage compared to a couple other level 1 spells and Sting. (It retains utility for a little while by being able to poison enemies behind other enemies, even while mercury arrow does more burst damage.) (Sting continues to exist as a monster spell, for the very few current uses of it.) Let's see how this feels! -------------------------------------------------------------------------------- 67a601c7 | regret-index | 2024-12-04 16:53:07 -0330 Vault review: partisan distribution edition This comes with an occasional reformatting to vaults as I came across them, of course. Vaults listing off all types of weapons now deploy partisans as long as they featured polearms, aren't looking for demonic weapons or two-handers across weapon types or hydra-head chopping capabilities, and especially if they were otherwise looking for one-handed weapons. They regularly replace in vaults a number of lair-branch-or-later halberd and glaive uses, since both of those are still already thrice and twice as common respectively and this is meant to help prop polearms as a weapon category up. They're also deployed in early portal rewards and as part of regular sprint weapon distribution as one would expect, and get a branded enchanted appearance half of the time in the bardiche slot in the Hall of Blades. -------------------------------------------------------------------------------- 3e022af | DracoOmega | 2024-12-04 16:53:07 -0330 New melee weapon base type: Partisan Polearm itemization had a conspicuous gap compared to most other weapon types. Not only did it only have a single top-tier one-hander (demon tridents), but it also didn't have a common weapon drop in a similar position to scimitars; tridents fell off pretty early and then the only better one-hander was both rare and evil. (Yes, trishulas exist, but also they barely exist and are highly specific.) While it is true that decent *two-handed* polearms are fairly common early on, which presents a somewhat different earlygame path than other weapon classes, the fact that there was no transitional 'Lair-depth' weapon *and* reduced availability of an endgame one-hander (good gods forbid the only option, and it also cannot show up in Hall of Blades unlike all other weapon classes.) commonly made it less attractive to invest in compared to other options. This is an attempt to improve that a little bit without making it feel like weapon classes are being homogenized in the process. Partisans are a one-handed polearm with 14 base damage and 17 delay, making them the slowest one-hander in the game. They are intended to be generally worse than a demon trident, but also more common - the high investment both differentiating them a little from scimitars and similar weapons, while also being a beneficial use of the high skill investment a polearms player may have put into, say, using a glaive before finding one of these. They have been added to the weapon tables of many existing monsters which could use both broad axes (ie: weapons of similar tier) and polearms. A few monsters whose *only* demon weapon option was demon tridents had them replaced entirely with partisans (on the assumption that it was purely mechanical reasons they had one demon weapon, and not flavor ones). I opted to skip giving them to merfolk, as getting Shoals in a game is already a huge boon to a polearms player, but naga can spawn with them at a somewhat increased chance compared to other monsters. Credit to regret-index for the tile edits. Sources: * Shafts: roctavian's mundane / magical glaives, magical halberds, and randart tridents. * Ribbons: roctavian's old randart glaives. * Points: ontoclasm and roctavian's long swords and double swords. * Player doll tiles: roctavian's magical spear. -------------------------------------------------------------------------------- 0c05a91 | DracoOmega | 2024-12-03 21:34:47 -0330 Fix beams not being properly bouncy (ragingrage, pisaster) I used the wrong bool in 7056299 and didn't notice at the time because it *also* fixed the bug. Oops. -------------------------------------------------------------------------------- c349142 | DracoOmega | 2024-12-03 18:59:44 -0330 Fix monster_pathfind::fill_traversability ignoring no_actors argument The argument was set and then *immediately* discarded by the call to init_pathfind, so let's just do the proper setup directly in fill_traversability. (This resulted in battlesphere being able to 'blink' to the other side of enemies, even when no visible path existed.) -------------------------------------------------------------------------------- a85234a | DracoOmega | 2024-12-03 18:59:44 -0330 Fix battlesphere sometimes shooting its owner (1000000branches, Darby) When a battlesphere fails to find any path to shoot at its primary target, it can accept a 'fallback' position that let it shoot at *some* enemy in that direction instead. But the source of the beam wasn't being properly updated if it did so, causing it to fire from whichever position it fired a tracer from *last* - which could even strike the player! -------------------------------------------------------------------------------- afa22cc | DracoOmega | 2024-12-03 04:09:23 -0330 Fix rings of Fire/Ice having a {buggy} stash prefix (Namsan) -------------------------------------------------------------------------------- 862ef21 | DracoOmega | 2024-12-02 20:53:22 -0330 Fix item spell fail preview sometimes giving the wrong summary (Ge0FF) -------------------------------------------------------------------------------- f291e87 | DracoOmega | 2024-12-02 20:51:01 -0330 Have clockwork bee remember its target focus between windings Instead of picking an entirely random enemy target each time a clockwork bee is reactivated, have it prefer the target it was last focused on (if it's still in sight and valid). It even maintains this memory if the original target it was aimed at leaves LoS before the bee deploys (so that bumping it afterward will still get it heading in the proper direction, instead of somewhere else at random). This should be a small QoL improvement, hopefully. -------------------------------------------------------------------------------- 74c169a | DracoOmega | 2024-12-02 20:30:00 -0330 Fix being able to deconstruct blazeheart cores with ctr+direction (Ge0FF) (Really, I don't think they made sense as a tempering target anyway.) -------------------------------------------------------------------------------- 7056299 | DracoOmega | 2024-12-02 20:26:33 -0330 Prevent a rare Call Down Lightning crash If Call Down Lightning was cast upon a solid feature containing a monster, it would attempt to bounce (being electricity). And trying to bounce when it took no path in the first place would assert. It is very hard for this situation to even occur at the moment, but one specific instance is when an eldritch tentacle has first appeared and is still in its malign gateway feature (which is solid). A thunderhulk can aim at it with Call Down Lightning, and then try to bounce off the 'wall' it just shot. Now, beams will not bounce at all if they are aimed at a spot. (Thanks to Implojin for the suggestion, which is a better general fix than just making Call Down Lightning non-bouncy, which I'd been otherwise about to do.) Note: due to a separate issue, the spell still doesn't *hit* the tentacle when cast from this spot, but the tentacle would be immune to the damage even if it did, so I don't consider that as relevant to fix at the moment. Perhaps if we ever end up with other monsters inside walls, in the future. -------------------------------------------------------------------------------- e6a5942 | DracoOmega | 2024-12-02 19:59:00 -0330 Try again to fix assorted buggy behavior with exploding monsters 4d9de507325e9399f8639ab74e243801ce0b59dd fixed some bugs and introduced others. It broke blame strings for player's being killed by friendly exploders (ie: would claim that they were killed by an exploding program bug) and also introduced a weird issue where monsters would flee away from blazeheart core explosions because they were testing reachability against ANON_FRIENDLY_MONSTER at (0,0) and determining that they could not reach it. Instead of setting ANON_FRIENDLY_MONSTER as the source of friendly explosions directly now, it still uses the exploder's mid (for proper blame strings), but beam::agent() is changed so that if it fails to find anything when retrieving the agent by mid, it checks if a monster by that mid has been cached (as is currently done only for dying exploders) and then uses MID_ANON_FRIEND purely for damage attribution (so that the player gets XP but not penance). Since this still means that the ME_WHACK event will be attributed to ANON_FRIENDLY_MONSTER, specifically ignore that for purposes of setting foe (but still do all the other aspects of getting hit by them, like breaking fear, etc.) I'm not 100% confident this doesn't introduce some other bug somewhere in this ongoing game of explosive whack-a-mole, but fingers crossed! -------------------------------------------------------------------------------- 5569844 | regret-index | 2024-12-01 18:55:29 -0330 Don't place a Zot entrance on D:15 (PanSaczeczos) Possibly we should have more standardized function-based set-ups for placing Depths and Zot entrances, between the tags, the weights, the gems, and the actual specific entry features- the last of these got the wrong feature in a copy-paste, making due_index_antique_fridge place the wrong branch entrance in the D:15 setting. (Possibly Crawl itself should also actually complain about generating floors not connecting properly to given branches....) -------------------------------------------------------------------------------- bf341ee | Nikolai Lavsky | 2024-12-01 14:28:47 +0300 docs: remove obsolete targeting commands As a followup to 83d77bb6a, update the list of commands and settings files. -------------------------------------------------------------------------------- d50fa5e | DracoOmega | 2024-11-30 15:12:07 -0330 Don't fail to place explosion clouds beneath the player (grumposus) Broken by 33284afee520d1fe114d1a0560f5795f086bd044 . (The method used there apparently gets tripped for all explosions, causing them to skip the part where they leave clouds on the player's tile. This should hopefully be a bit more foolproof, even if it's slightly ugly.) -------------------------------------------------------------------------------- 914cb65 | regret-index | 2024-11-30 09:53:01 -0330 Withered mystic tiles (pianoman523) Tiles for Iskenderun's Mystic Blast and withered plants. The former had some re-orienting edits done to make it feel less solid for a damaging blast effect, while the latter (which clearly mix both new tiles and Sastreii's new regular plant tiles) have been edited to mix the old focus on grey with the new tiles being brown- said neutral-dark grey helps the tile fit one of its branches' palettes more easily (Zot), and also provides a little less monochromatic appearance mixed amongst the less colourful derived undead it's usually deployed with. -------------------------------------------------------------------------------- 4aaac53 | regret-index | 2024-11-30 08:27:59 -0330 Some more Forgecraft spell icons (Sastreii) Kinetic Grapnel, Fortress Blast, and Rending Blade, to be precise. -------------------------------------------------------------------------------- 2437aca | regret-index | 2024-11-30 08:03:45 -0330 Count mutant beasts as chaotic (#4150) As the issue notes, the box of beasts is hated by Zin, and they also are explicitly thematically created by radiation. This mostly matters for one vault and one wizlab, but we might as well be consistent about this. Closes #4150. -------------------------------------------------------------------------------- 151a97f | DracoOmega | 2024-11-30 01:01:53 -0330 Fix a typo (Patrick2011b) -------------------------------------------------------------------------------- 83d77bb | DracoOmega | 2024-11-30 01:01:53 -0330 Completely rewrite default target picking and cycling code The code which rested at the core of direction_picker and controlled how default targets were picked for spells was ancient and deeply arcane, making it laborious to make even simple, oft-requested QoL improvements to many spells. It also suffered from multiple surface-level issues, like inconsistent behavior about aiming explosions to avoid the player hitting themselves. (eg: casting fireball with a single enemy in melee range of you would aim off to the side of that enemy, so as to avoid getting caught in the blast, only if you had not previously aimed at that enemy on a prior turn. If you *had*, it would instead aim straight at them and force the player to adjust the aim or deal with a warning prompt.) This commit replaces the inner workings of this part of direction_chooser entirely and improves a multitude of autotargeting behaviors in the process. It no longer uses recursion with multiple gotos or targets enemies based on viewport dimensions(!) and should be vastly easier to work with in future. In addition: -AoE will be noticably better at avoiding the player, regardless of whether you'd previously aimed at that enemy. -AoE will also attempt to avoid harming allies, if a trivial aim adjustment could accomplish this. -The aimer is more aware of when AoE is harmless to the player, and won't needlessly aim-adjust a wand of roots off to the side of an enemy. -You no longer need to aim directly at a monster for the aimer to consider it your 'previous target'; merely catching it in the blast of a spell is sufficient. (In cases where multiple monsters are in the affected area, it will prioritize keeping its existing target lock, and otherwise pick the closest to the centre.) -+/- can now cycle through enemies that aren't themselves in range, but could be hit by AoE (ie: enemies just beyond the range of fireball) and will work sensibly with LRD. -Ranged autofight will more consistently use smart default aim, instead of only doing so for some spells. -Previous monster target is saved via mid instead of mindex (which could rarely do weird things when mindexes were reused) -Better default behavor for some spells like Gavotte (no longer prioritizes aiming at nearby enemies) or Tempering (prefers constructs with enemies actually in the blast zone.) All in all, this should produce meaningfully improved behavior for a number of spells (and AoE spells like fireball, in particular, should prompt the player about harming self or allies *significantly* less, making them more autofight-friendly.) To be clear, this isn't an attempt to make targeting smarter in the sense of 'make better decisions for the player'. It doesn't attempt to choose more important enemies or maximize how many things are caught in AoE, but rather to not present the player with 'obviously incorrect' default aims. It will still generally prioritize 'last-targeted enemy' or 'closest enemy', but not default to including the player's face in the blast when some obvious way not to do that exist. (And all of this new behavior is disabled if Options.simple_targeting is true, though using that feels personally quite questionable to me.) This commit also removes a couple unused or non-functional commands (some effectively broken since as far back as 553c0cd8d1dc9edb71fdb08f1d3d3be3 ), as well as CMD_TARGET_PREV_TARGET (which I feel was largely opaque and unhelpful). Finally, while 'iterate through feature in viewport while aiming' has been reimplemented for the sake of using stairs via x, you can no longer cycle through items on the ground with ;/' in that mode. I am unconvinced that this was ever useful to do when ctrl+x exists (and X still offers the same functionality for the map in general.). +/- still works for cycling objects when aiming Apportation. All in all, I hope this is a significant improvement to code readability, and also a meaningful improvement to player QoL with many different spells. Death to _find_square. -------------------------------------------------------------------------------- 870d526 | Nikolai Lavsky | 2024-11-29 19:53:11 +0300 fix: don't print messages when monsters cast Irradiate out of LOS -------------------------------------------------------------------------------- 2f7cafc | patrick | 2024-11-27 00:30:52 -0500 Checkwhite :I -------------------------------------------------------------------------------- 223376c | patrick | 2024-11-27 00:19:44 -0500 Tone down nicolae_beast_mode This vault places a box of beasts, and surrounds it with hostile but weak mutant beasts. It turns out that even weak mutant beasts who roll the shock facet can be overwhelmingly murderous with their blinkbolts. (Blinkbolting mutant beasts are responsible for one of the few times I've killed myself with one of my own vaults, even.) Thus, I have specified the non-shock combinations of facets explicitly for the juvenile mutant beasts. Additionally, slightly tone down the number of juveniles, from 4-7 to 3-6. The lone larval mutant beast will retain the ability to roll the shock facet, at least for now. -------------------------------------------------------------------------------- cdad7ad | regret-index | 2024-11-26 22:24:07 -0330 Fix a vault testing weight (tekkud) (Really large vaults and vaults_hard vaults are both difficult for the V layout generators to handle, so this wasn't quite as common as its weight made it appear to be.) -------------------------------------------------------------------------------- 1c27a4a | DracoOmega | 2024-11-26 21:05:08 -0330 Fix Charm instantly breaking (not_that_greg) Accidentally broken by 1dcf16d5f2f0bb8b4fbd7f36cd11368bcbb95fe0 -------------------------------------------------------------------------------- cd918d3 | DracoOmega | 2024-11-26 19:33:03 -0330 Don't launch bomblets at firewood (Ge0FF) -------------------------------------------------------------------------------- 61fbf59 | Nikolai Lavsky | 2024-11-26 12:31:28 +0300 fix: don't say Paragon can use any current weapon since paragons can't fall back on using the player's current weapon since 901f017ee1. -------------------------------------------------------------------------------- 5daf8ae | DracoOmega | 2024-11-26 01:14:37 -0330 Fix a knockback-related crash -------------------------------------------------------------------------------- 4144331 | Isaac Clancy | 2024-11-26 00:09:27 -0330 Warn when summoning with fulsome fusillade active (Flugkiller) Fulsome fusillade can damage your summons so it should warn when you try to summon with it active, similar to spells like polar vortex. Should resolve #4055 -------------------------------------------------------------------------------- 7791d1a | DracoOmega | 2024-11-26 00:00:40 -0330 Fix some illusions not being marked as summoned/temporary While many illusionary clones are supposed to hide the fact that they are summoned (since it's part of the illusion that you can't tell them apart from the original), this is fairly silly for things like player illusions or hostile clones of your ancestor and such. But treating those *entirely* as normal summons would reintroduce an information leak, where it was possible to identify the real Mara by looking at the 'summoner' of your illusion. But the real problem is not player illusions, but Mara themselves, so refactor things to hide the summoner specifically if it's Mara, but show it for other player illusion sources (ie: mainly the strange machines in the Tukima wizlab) This fixes #4083 -------------------------------------------------------------------------------- 1dcf16d | DracoOmega | 2024-11-25 23:31:58 -0330 Refactor god_protects, shoot_through_monster, and related functions A number of different types of ally are intended to either never be harmed by player actions, or outright be fired through (eg: battlespheres, Hep ancestors, demonic guardians). But many of these different catergories are handled by different functions, and one category or another being overlooked from some attack is a frequent source of bugs. This refactors essentially all such cases to go through a pair of functions: never_harm_monster() and shoot_through_monster(). The former is for all monsters that should never be negatively affected by any actions caused the a given agent (usually the player). shoot_through_monster() is mostly the exact same list, except additionally includes Jiyva jellies (where the player cannot harm them, but also cannot shoot through them.) (I think some of this Jiyva behavior is a bit strange and incorrect, but I've not attempt to change its current functionality in this commit.) never_harm_monster() shoud be used in most cases, with shoot_through_monster() specifically for projectiles. This commit also fixes a handful of existing bugs, such as it being possible to affect a demonic guardian with Irradiate or slow any normally-unharmable ally with Metabolic Englaciate. This also fixes #3985, and half of #4083 -------------------------------------------------------------------------------- 77984fd | DracoOmega | 2024-11-25 19:17:36 -0330 Improve out of range message when aiming Paragon finisher (pisaster) If you aimed it at a spot the Paragon could not see (possibly because you had blinked away from it), the game would confusingly claim "You cannot see that place." when the actual issue is that the *paragon* cannot see that place. So let's just say that it's out of range instead. -------------------------------------------------------------------------------- d464759 | DracoOmega | 2024-11-25 19:06:36 -0330 Don't show EV/fail rate preview when examining unID'd randart weapons (Armour and jewelry appear to have already had this check.) -------------------------------------------------------------------------------- cfb42be | DracoOmega | 2024-11-25 19:05:47 -0330 Don't allow looking at spell success rate changes for unequippable items While (for example), a spriggan examining a scale mail wouldn't be told that it would affect their spell fail chances, if they pressed '!' they could still bring up a tab confusingly showing some of that information anyway. -------------------------------------------------------------------------------- 6632425 | DracoOmega | 2024-11-25 18:42:38 -0330 Allow deconstructing forgecraft constructs with ctrl+direction You used to be able to accomplish something similar with lightning spire, back when it got upset when you hurt it, but this stopped being possble once mindless constructed stopped caring about player damage. It felt that it was fine if the player *couldn't* instantly dismiss them (and largely still do), but this is aimed at improving QoL for clockwork bee in particular. When there are no more targets around to attack, clockwork bee falls dormant. It also cannot be recharged without a visible target. This frequently results in it briefly blocking a corridor after a battle, and while I have not *personally* felt that this is a problem (you should rest!), enough other people have found it annoying that I am doing this with the aim of making it feel better for them. This solution still feels 'clunky' to me (needing an additional command and giving a *much* longer message when trying to reactivate a bee without a target), but other proposed solutions have had potentially more serious side-effects, so let's just give this a try for now and see what player response is. -------------------------------------------------------------------------------- bdf4c9d | dependabot[bot] | 2024-11-25 13:50:22 -0600 Bump tornado in /crawl-ref/source/webserver/requirements Bumps [tornado](https://github.com/tornadoweb/tornado) from 6.4.1 to 6.4.2. - [Changelog](https://github.com/tornadoweb/tornado/blob/v6.4.2/docs/releases.rst) - [Commits](https://github.com/tornadoweb/tornado/compare/v6.4.1...v6.4.2) --- updated-dependencies: - dependency-name: tornado dependency-type: direct:production ... Signed-off-by: dependabot[bot] -------------------------------------------------------------------------------- 20f8f3c | Implojin | 2024-11-25 13:43:26 -0600 Add Robert J. Redelmeier to the credits For 520e15dbdb. -------------------------------------------------------------------------------- bec9754 | regret-index | 2024-11-25 09:35:05 -0330 Checkwhite (...doesn't know about newly added files for a given commit? Hrm.) -------------------------------------------------------------------------------- 18c7c0e | regret-index | 2024-11-25 08:46:56 -0330 New monsters: alderkings, death trees for Depths and rarely Crypt While plants have been very slowly added to Crawl due to the innate difficulties of designing more immobile monsters, the motile plant glyph ('f') is one of the few console glyphs mostly wide open for additional monsters. There's a lot of easy flavourful design space for more plants, and in particular, adding one of them in Depths has multiple benefits: it can connect the various spriggans moved there closer to a branch otherwise mostly preoccupied with giants and undead, it can make Fedhas's plant pacification mean a little more throughout the game, and it can help further split apart the artificial fortification spirit of the Vaults versus the more uncontrolled cavern-dungeon of the Depths. Alderkings are a translated name of something from various works of Germanic literature, a storied figure of a darkwood elf king that haunts deep forests and absconds with or kills trespassers. (Crawl's elves aren't particularly fey, so it's deployed around the main fey threats of spriggans instead. The translation drift between the Danish elverkonge and German erlkönig is a couple centuries old, so it feels fine to make it literally a tree as the artistic tradition still includes rather than some fey spirit. Without a name to the title and with a lot of differing takes in centuries of tradition, demoting them to a non-unique feels fine enough to me.) These are deep out-of-depth walking trees in Depths with mildly-below-ettin level melee damage, reasonable hp and AC but poor EV and rF-, plus three notable spells: * Grasping Roots, the ranged constriction spell used by shambling mangroves: aside from using a little more constriction in Depths as is less present in Vaults with tentacled monstrosities moved out from the branch, it also slows running away from its short-range other spells. * Siphon Essence, the range-2 torment into self-healing ability provided by talismans of death: an experiment in trying out more highly dangerous short-range spells and means of healing monsters in a more reasonably tangible fashion, a means of endangering lategame characters with very high defenses, and a chance to establish yet another unique way to deal unholy damage as Crawl's large focus on unholy threats regularly needs. Unlike Torment, this range can be avoided for a large number of characters, and it also can avoid hurting living allies as Depths still contains plenty of. * Dispel Undead, the not-ranged version players, their ghosts, and burial acolytes use: a chance to further emphasize that monsters can have varying Dispel Undead ranges, and one short enough to still emphasize their Grasping Roots. Thus, they pin their foes in place, cast high-damage short-range spells with various non-standard resistance checks, and then finish them off with heavy melee. Hopefully the obvious synergies between these spells and the rarity of a character caring about both Siphon Essence and Dispel Undead will be straightforward enough for players to learn and fear. They're quite scary in practice, but Depths threatens a lot with large bands of monsters; they'll mostly endanger reckless spell-less characters, who would be just as imperilled if not more so by shrike and spark wasp bands. One can always teleport before they get close, after all.... Aside from placing around once or twice per game in generic threat vaults and regular floor spawns, they also appear in a number of forested, necromantic, and magical vaults throughout Depths. As strong necromantic casters, these also appear in a sparse Crypt vaults that already used dead trees; since the branch has plenty of regular living necromancers already, this shouldn't be too out of place. (This also comes with some tweaking of various other uses of dead trees and petrified trees, to deal with the automagic feature-recolouring-to-tile match-up mess.) Their tile is an amalgamation of CanOfWorms's hill giant, Sastreii's demonic trees, roctavian's shambling mangrove, and ontoclasm plus lingerstink's Asterion. It animates in a mildly experimental fashion to bridge tree foilage and necromancy colours. -------------------------------------------------------------------------------- e55ba79 | DracoOmega | 2024-11-24 03:47:20 -0330 Fix missing break in disjunction dart description (Bn) -------------------------------------------------------------------------------- 9ebf140 | Alejandro Ramirez | 2024-11-24 03:07:28 -0330 Make player doll match lost wings mutation (#3973) Redraw the player doll when losing wings so that draconians that loses their big wing mutation see the change immediately (kuniqsX) Resolves #3973 -------------------------------------------------------------------------------- c1ee981 | regret-index | 2024-11-24 03:06:14 -0330 Changelog tweaks (various) -------------------------------------------------------------------------------- c1d4bba | regret-index | 2024-11-24 03:05:27 -0330 Tweak spriggan druid call / might criteria 8a9237d added a special case to make only swamp dragons count for mons_is_beast, leaving out the swamp end fire and ice dragons due to their noticeably higher threat. Since then, Swamp has gotten quite a ways more dangerous, and in particular druids can call in bunyips in Swamp or shrikes and spark wasps in Depths. As such, I'm removing this one special case, letting them care about the other types of dragon when calling in or granting might to beasts in general. -------------------------------------------------------------------------------- d3692a3 | regret-index | 2024-11-24 03:05:27 -0330 Various quick adjustments to ironbound beastmasters * The beastmaster spawn count is higher than desired due to a shift later in design to target slime creatures instead of harpies plus an accidental use of max over min, doubling their overall placement rate from what was planned. This enstates their proper chance to appear in a band versus depth, while adjusting the numbers to make them appear quite often with lindwurms, more rarely with slime creatures, and with less beasts overall in their more common vaults. * Arcanists were added on the same console glyph and colour combination in 129f0b0 since the ironbound beastmaster removal. I'm moving arcanists over to lightred, since it matches their tile and what currently is on that same combination (the true form of shapeshifters) is harmless whenever actually found anyway. * Their description has been tweaked to not raise confusion about them causing frenzy or berserk with their aura. -------------------------------------------------------------------------------- d447e0d | DracoOmega | 2024-11-24 03:02:01 -0330 Don't remove felid stat-0 status on revival if stats still below 0 Dying removes stat drain, which will *usually* result in stats being above 0 again (in which case it's fine to remove these statuses), but mutations or equipment may result in them still being 0 or less after being revived, in which case they should persist. Closes #4066 -------------------------------------------------------------------------------- dac7352 | DracoOmega | 2024-11-24 02:33:18 -0330 Fix spacing in reminder message for recruiting first apostle This closes #3865 -------------------------------------------------------------------------------- eefd5e6 | DracoOmega | 2024-11-23 23:21:54 -0330 Fix/tweak a few things about randart artprop descriptions -Remove a redundant additional description of Wiz effect for randart rings of wizardry -Give a few more base types 'fake' artprops (now that appropriate ones exist) and remove the hard-coded descriptions of even faker artprops -Cut some descriptions that weren't even being used at present (due to having been using fake artprops for a while) -Describe artprops in full item descriptions in the same order that they appear in the inscriptions (instead of enum order, which reads as very arbitrarily unrelated in-game) -Show the rC+/rF- from base rings of Ice (and inversely for Fire) in the randart's inscription. At one point in time, 'Fire' was sufficient to imply rF+/rC-/fire-enhancer, but that is no longer the case. (ie: when 'Fire' shows up on a randart staff or orb, it may *only* mean a fire enhancer, with no resists baked in.) This closes #2664 -------------------------------------------------------------------------------- 520e15d | Robert J. Redelmeier | 2024-11-23 19:39:40 -0600 Fix a typo Correct tense for Phalanx Beetle spell description. [Committer's notes: Edited commit message. Closes #4139.] -------------------------------------------------------------------------------- 26961a4 | DracoOmega | 2024-11-23 21:49:24 -0330 Fix a comment -------------------------------------------------------------------------------- afcf477 | DracoOmega | 2024-11-23 20:07:41 -0330 Refactor how tile-picking for beams works Tile selection for beams used to be handled by tileidx_bolt(), which was organized in an... archaic manner. Tile selection was done via a combination of beam color and string-matching against the name of the projectile being fired. This was clunky and also error-prone in several ways: projectile text could be edited elsewhere (which would silently cause their custom tiles to disappear), tile overrides for removed spells could remain long after the spell was gone (since it's not obvious which string corresponds to what spell). In fact, both of those things were true for at least one or two spells immediately prior to this commit! This removes that function entirely and instead allows any custom tiles to be specified as a simple member of zap_info (or manually-specified via beam.tile_beam and beam.tile_explosion, in cases where zaps are not used.) If neither is specified, it will still fall back on the default color-to-tile mapping done by tileidx_zap(). This also allows the tile for the path of a beam, and the explosion at the *end* of that beam, to use different tiles easily. This has been applied to iceblast (and related spells) and fireball at present, but could easily be extended to move things. (I think it is a cleaner visual, in general, if the non-damaging trail and damaging explosion of an effect use different tiles, though not all effects have such obviously useful tiles pre-existing.) Tile directional orientation is now also handled automatically by vary_bolt_tile() and I renamed the tile enums for the 'default' color-based bolts to be clearer. Aside from the aforementioned animation tweaks to iceblast/fireball, there should be no other functional change. -------------------------------------------------------------------------------- b703b2c | Implojin | 2024-11-23 13:11:09 -0600 Defer klown pie fragility ordering (Flugkiller) Following the reasoning of 1838bd627c, here we defer applying player-targeted klown pie effects until after their damage is dealt. Monster-targeted klown pie effects were already being applied after the hit, so nothing to change there. -------------------------------------------------------------------------------- 97f3e5c | Implojin | 2024-11-23 13:01:12 -0600 Defer monster-targeted crystallizing bolt fragility ordering This is for consistency with 1838bd627c and really should have been a part of that commit. Mea culpa. -------------------------------------------------------------------------------- ec23324 | David Lawrence Ramsey | 2024-11-23 10:52:05 -0600 Fix typos. -------------------------------------------------------------------------------- 0f947df | brandon s allbery kf8nh | 2024-11-23 10:35:37 -0600 disable installation of pkg-config and libpng Both are already installed on current GHA images; the former is actually redirected to install a different variant (there are two: the original, and a fast but buggy C version), which then conflicts with the already-installed version. So simply skip installing both. -------------------------------------------------------------------------------- 4990ddc | brandon s allbery kf8nh | 2024-11-23 10:27:56 -0600 silence unused flash_tile parameter warning on console -------------------------------------------------------------------------------- 8b3c759 | regret-index | 2024-11-23 04:57:22 -0330 0.33 changelog update up through ga4cb51f6ed It seems unlikely that any Forgecraft spells or the set of new decorations are about to be removed any time soon, so it's probably safe to go ahead and write up the new changelog entry for this version. -------------------------------------------------------------------------------- a4cb51f | DracoOmega | 2024-11-23 04:22:10 -0330 Nerf Monarch Bomb While feedback has been that the desired loop of 'deploy bomblets, then blow them all up' is a fun one, there's concern that monarch bomb is too good at doing things *other* than that - doing meaningful direct damage with Launch Bomblet and creating surprisingly durable meat shields in the process. Since I think the explosions are the star of the show, this is an attempt at reducing the power of other aspects: -Bomblets are significantly more fragile and expire more quickly -Launch Bomblet damage is greatly reduced -Monarch Bomb melee damage slightly reduced -Monarch Bomb itself is very slightly more durable (it was always quite fragile compared to other constructs of similar level, and still is) I considered additional measures like reducing the chance that their melee attack spawns a bomblet based on the number of bomblets already deployed, but I'm going to hold off on any further changes until seeing feedback for this version. -------------------------------------------------------------------------------- 356abe4 | DracoOmega | 2024-11-23 04:22:10 -0330 Tweak Clockwork Bee While the tradeoffs involved in the spell are interesting, there has been concern that it is too strong in corridors, where the player's ability to repeatedly repair their bee when it runs out of charge allows it to hold place in front of the player too consistently. This experimentally attempts to counterbalance that somewhat by adding a 1 MP cost to recharging the bee (along with decreasing the amount healed when you do so.) Given how time-consuming it is to resummon a bee mid-fight, I do think there's a somewhat delicate balance of durability here before it starts to feel outright bad (and I have concerns of design overlap with healing inugami via MP), but let's give it a try for now, anyway. -------------------------------------------------------------------------------- 0c973e9 | DracoOmega | 2024-11-23 04:22:10 -0330 Reduce monster Hellfire Motar power After hellfire mortar damage scaling was adjusted by e22bf9ab365384d5e94 (for player-side purposes), I neglected to consider the effect this would have on monsters. Wiglaf's mortar (in addition to gaining 1 range) went from 3d15 to 4d18! (This reduces it to 4d13, which is still a little stronger than in 0.32, but to a degree that feels more reasonable.) -------------------------------------------------------------------------------- 5b279c5 | DracoOmega | 2024-11-23 04:22:10 -0330 Allow hellfire mortar to try pushing obstructing monsters backward Since becoming 3-school, hellfire mortar is a much bigger investment than it used to be. Sinking back into magma the moment a stray flier steps in front of its path is mildly annoying, and I think unnecessary. So now it will try to push such things back one space instead. (It doesn't do anything fancy to push obstructions away, so two in a row will still block it, but this should make it less likely to be defeated by 'incidental' obstacles.) -------------------------------------------------------------------------------- 9c6473c | DracoOmega | 2024-11-23 04:22:10 -0330 Fix incorrect messages being printed if pushed back by a boulder (And in a somewhat more plausible situation after the next commit.) -------------------------------------------------------------------------------- 0a4fc1a | DracoOmega | 2024-11-23 04:22:10 -0330 Adjust Rimeblight spread mechanics While a powerful spell in the right circumstances (and with appropriately grisly flavour), rimeblight could be more inconsistant than one would like. While the spread chance from explosions was quite high, it was never guaranteed, and poor early rolls could fail to get the plague going in a meaningful way, making it sometimes feel like a poor use of turns. Delayed damage always has an uphill fight to compete against burst damage, and the whiffs felt just a bit too common. Also, while there was a chance to spread upon death, the fact that a living infected had many *more* chances to spread rimeblight (via explosions) could make it feel bad to have them die early. A level 7 spell ideally shouldn't make you feel bad if it kills something, so I have changed the spread mechanics in the hope to make it both more consistent and never 'punish' you for killing an infected monster early. Rimeblight now has the same 'chain-to-adjacent-enemies-on-cast' behavior that Petrify does, afflicting up to two connected enemies per cast. The ice shard explosion no longer spread rimeblight at all, but upon death, it has a 100% chance to spread to adjacent enemies, and a 50% chance to spread to those at radius 2. Combined, these should make it easier to get started, less likely to abruptly peter out due to RNG, and if anything *reward* killing things quickly with undead or refridge assistance to spread it further. -------------------------------------------------------------------------------- d1af28e | DracoOmega | 2024-11-23 04:22:10 -0330 Make Teleport Other smite-targeted A fairly unpopular spell in the Warper starting book. Teleport Other does have some value when a character is weak and needs to escape things, but Piledriver makes it a less appealing spell to learn early (when spell levels are scarce) and it's never been terribly exciting any later than that. Allowing it to be cast on specific monsters in packs, to remove the most dangerous elements of them in advance, will give the spell more flexibility that I hope make it feel a little more worth considering in more situations. -------------------------------------------------------------------------------- d268329 | DracoOmega | 2024-11-23 04:22:10 -0330 Replace Darts of Dispersal with Darts of Disjunction Darts of dispersal were most noticable as part of Warpers' starting kit, but despite multiple buffs, were still largely a 'desperation option' you were never happy to use. Warper's biggest weakness is that none of its kit provides it any offensive power whatsoever until it can cast Piledriver (which is at least XL 3, and usually later) Back when their darts were boomerangs instead, sometimes the damage *could* make a difference in early fights, but now they are more akin to a blink that can miss (but costs no MP) and blinking is something warpers are generally not lacking for! And since dispersal darts aren't really relevant to anyone else when they can (rarely) show up later in the game, let's just try replacing their effect entirely. Disjunction darts inflict a short-lived status effect on enemies they hit which causes them to blink a short distance away from the thrower for 3-4 turns in a row, taking 2d2 damage each time they do so. This still allows them to be used as an escape option (perhaps even more reliably than present), but the small flat damage very specifically is aimed at helping win fights in those first couple XLs. They also do not auto-mulch, like dispersal used to, but mulch at the standard rate for dats. (I feel this behavior was somewhat of a holdover from when it could show up on proper ammo that did *real* damage. There's a big difference between doing a whole battle's worth of normal attacks that keep a target displaced versus the ocassional dose of minor damage.) I did not remove the Dispersal missile brand entirely in this commit (it might be possible it finds another home on something in future?), but it no longer naturally spawns on anything. Outside of a sprint, all places that used dispersal darts now use disjunction ones instead. -------------------------------------------------------------------------------- e44d3cc | DracoOmega | 2024-11-23 04:22:05 -0330 Make Piledriver's targeting more flexible While Piledriver's damage can be significant when the spell is first learned, there are a number of things about the spell that make it awkward to use in a number of situations - one of which is how groups of enemies will tend to file into a neat line behind each other while the player is repositioning to line up a shot, rending the spell literally unusable on any of them. Now, multiple contiguous enemies in a row can be pushed together, dealing damage to whichever enemy is at the *back* of that line. This should hopefully allow the spell to feel like it 'misses' less often. (Regardless of the length of this line of monsters, they must still move at least 1 tile and strike something which is in LoS of the caster, which actually fixes a preexisting bug that allowed kobolds to sometimes query for presence of walls or creatures out of their LoS.) Additionally, this commit allows the player to pick which of multiple valid piledriver directions they want to move along. I'd originally hoped that the auto-targeting would create interesting positional decisions, and while I believe that it does to an extent, it is common to end up with coinflips between 'good move' and 'extremely bad move'. I don't think these feel very satisfying and can make it feel punishing to try utilising the spell as a core part of your kit sometimes. "I would have been better off casting nothing and just running away." is not a great feel and happens somewhat commonly at the moment. The spell still does dramatically more damage when pushing things a long distance, so I am hoping that alone is sufficient to create interesting positional questions and encourage some aggression (rather than only using it along 'safer' trajectories). We'll see. -------------------------------------------------------------------------------- 5383b0d | regret-index | 2024-11-23 00:29:02 -0330 Tweak the Iceblast effect tile (DracoOmega) Less orthogonal symmetry and less taking up the whole tile to get closer to the other blasting effects Crawl already uses, and a slight amount more visual variety through rotation now that it's noticeable when it does so. -------------------------------------------------------------------------------- a727347 | regret-index | 2024-11-23 00:29:01 -0330 Heavily revise and revive ironbound beastmasters V is a branch that is very pressured in its placement- usually immediately after some of the higher variety in the game in the Lair branches, usually before the heavy large vault use in Elf and Depths that it itself can barely use, and yet not originally given a unique monster set to itself. There's been multiple attempts to help out the branch out with more and more unique monsters, and in my personal opinion, it could always use more: the loose theme of much more organized and cosmopolitan structure is easily workable, and V:1-4 has decent value as a pacing break after the first few runes that still tries to stand out mechanically. Ironbound beastmasters were tried out in 0b001ba and removed in f8b08d3 for a number of reasons that are each reasonably addressable in different fashions: * Depending solely on their bands made them require unique and very frail special-casing to always place their band regardless of other calls for individual monsters (in vaults, wizmode placements, bot information calls, and so on). Rather than going out of the way to make sure individual beastmaster spawns come with a band, they instead now only spawn a part of V animal and slime bands when those bands already successfully place, with a chance increasing by depth to join lindwurm, slime creature, and dire elephant bands when the full band spawns already. (This replaces one of the dire elephants with a beastmaster when it spawns, but doesn't for lindwurms or slime creatures.) * Goad Beasts was a very invisible spell, since the actual number of actions monsters take in a turn without involving spells is a relatively subtle effect. Instead of relying on the energy system, this instead relies on a far more direct effect using other reworked systems: they simply have an passive aura of haste for living creatures of animal or lower intelligence. This should also help create very little ambiguity as to what they haste, because they visibly immediately haste or don't haste given other monsters. * They were also pretty weak for their depth when caught by themselves seperated from a successful band placement, whether from bands wandering around or being convoked. This return comes with somewhat higher base damage and a coinflip chance for a polearm. They also now have a new support spell that can work with other monsters than beasts or slimes, "Throw Bolas", which does relatively minor physical damage for the depth and also inflicts -Move. (The rope for the bolas projectile and spell icon is a CC0 asset by fleurman, and the balls are steel sling bullet icons by ontoclasm.) (To accomodate the last of these, paralysis and petrification both end with "You can now act again", and -Move from Momentum Strike now reads "You can move again" rather than "You are no longer robbed of your momentum".) I'll let players find out in practice just how common it is to be bound in place as hasted dire elephants or hasted titanic slime creatures barrel towards them. Players are pretty strong by the time they do V, and I'm doubtful the ~4 beastmasters per visit will noticeably more dangerous than the multitudes of thunderhulks or convokers, anyway. Being interrupted heavily by not being able to move may get some resistance from players who otherwise focus solely on playing quickly (c.f. 98a3e4f and 54e5184), but fortunately their boosted allies can help solve the problem of reckless play in a quick and direct fashion. -------------------------------------------------------------------------------- 49d9593 | gammafunk | 2024-11-22 17:18:53 -0600 Fix the build (DracoOmega) In 8f22220, the tile enum was added as a new entry instead of replacing the dummy entry of 0. For at least GCC, on newer compilers this incorrect data was silently initialized into the struct, but the older version of GCC on CDO was not happy. Concerning that newer compilers didn't at least warn about the problem, but at least the offending line was easy to detect... -------------------------------------------------------------------------------- 5fac02a | Implojin | 2024-11-21 12:46:35 -0600 Revert "Fix slime not showing around slime walls after reload" This commit was causing level previews using shift-X [ or ] to display the player's current floor in the main viewport, instead of the target floor. I don't have time to hunt this down right now and am concerned about leaving it alone since this was likely caused by an interaction with tags, so I'm simply reverting for now. This reverts commit 96a7ec282a2df5b68c187281be947cd77b4c37f8. -------------------------------------------------------------------------------- e3c942d | DracoOmega | 2024-11-20 22:47:29 -0330 Fix Ru magic school sacrifices blocking the wrong schools (Lightli) Sac Forgecraft blocked Translocations, Sac Translocations blocked Alchemy, etc. (even though it removed levels of the appropriate skill.) -------------------------------------------------------------------------------- 39329bb | DracoOmega | 2024-11-20 18:24:08 -0330 Don't show irrelevant information when looking up non-book spells (Ge0FF) Looking up spells with ?/s that were technically player usable (because they were wand spells, or an internal implementation of an ability) would still display miscast effects and some other things which would only be relevant if any player could actually cast the spell directly. Instead, hide this information for non-book spells. -------------------------------------------------------------------------------- 7ab36c3 | DracoOmega | 2024-11-20 18:16:36 -0330 Fix an Arenasprint crash with foxfires After 6938ffb21ab4f, foxfires are directly killed as part of them hitting enemies, but if such an attack ended a wave in Arenasprint, the automatic 'dismiss all allies' function in lua would kill the foxfire before the point where the foxfire's own code would kill it, leading to an assert. I am... not entirely happy with this sort of safeguard here just for one sprint (and suspect there are similar cases elsewhere, too), but it's an immediate short-term fix at the very least. -------------------------------------------------------------------------------- 4d5a26f | DracoOmega | 2024-11-20 18:06:07 -0330 Don't ignore beam.aux_source set by mons_spell_beam A couple spells set custom aux_sources in their beam setup, which would be entirely ignored in practice. For instance, when 357ea4826f refactored how Creeping Frost was set up, the game began to claim that players killed by it were killed '...by a frost.', but that is not the only spell thus affected. I can't see any obvious reason why we should ignore aux_sources set up manually, and the code here is truly ancient. So let's try only setting default values if no non-default values have already been set. This fixes #4011 -------------------------------------------------------------------------------- 4330605 | DracoOmega | 2024-11-20 17:00:16 -0330 Shorten alchemy artprop string to match other spell schools After 1bdb9b73b77 shortened forgecraft's, I realized that basically every other school used an abbreviated version as well. Alchemy could arguably have still fit, but Alch seems adequately clear to me. -------------------------------------------------------------------------------- 531cc0b | DracoOmega | 2024-11-20 17:00:01 -0330 Fix battlesphere firing message (Flugkiller) I considered rolling back to the shorter 'Your battlesphere fires!', but since battlesphere uses more particular target selection now and yet cannot *always* reach the target of that selection (though it tries very hard), I thought that specifying its aim might reduce confusion sometimes when it hits something other than its ideal target. Maybe this doesn't matter? Easy to change again later, at least. -------------------------------------------------------------------------------- c00413b | DracoOmega | 2024-11-20 17:00:01 -0330 Flag Kinetic Grapnel as destructive I hesitated a little, since half the point of this spell is as a melee augment, but I'd mostly been thinking of Vehumet support at the time. But since this flag also affects whether it works with battlesphere, probably it shouldn't be excluded from support by a spell in its own school. -------------------------------------------------------------------------------- e3ca3d1 | DracoOmega | 2024-11-20 17:00:01 -0330 Don't let the player (rarely) shoot themselves while confused Firing beams while confused aims randomly, but this random space chosen to aim at could extremely rarely be the player's own location, giving them a 1 in 169 chance to shoot *themselves.* Melee attacks cannot harm the player while confused, and I think this is unexpected behavior that could sometimes be quite lethal. Just aim somewhere else instead. This closes #4091 -------------------------------------------------------------------------------- 9a27585 | DracoOmega | 2024-11-20 16:29:24 -0330 Don't let Fusillade target (or affect) orbs of destruction This fixes #4010 -------------------------------------------------------------------------------- 7bd8858 | DracoOmega | 2024-11-20 16:28:06 -0330 Make message for hitting rC- monsters with cold less misleading It sounded similar to applying the frozen status to them, and was also completely different than the player message for the same thing (whereas both players and monsters are 'burned terribly' by fire when rF-) This closes #4098 -------------------------------------------------------------------------------- 1bdb9b7 | Implojin | 2024-11-20 11:30:07 -0600 Shorten Forgecraft's artefact property string (gammafunk) Using the full name here was a bit unwieldly. -------------------------------------------------------------------------------- 8f22220 | regret-index | 2024-11-20 02:12:47 -0330 Yet further and further additional tiles Something of a milestone to have one of these sets of tiles finally completed; the generic monster spell icon is now used on nothing and all spells have a fitting non-generic icon now. No promises on this being accomplished for mutation icons (which are far more specific than the various blasts of spells and thus have far less resources to ply upon), or vfx (far less bounded in terms of what could do with unique effects), and the statue work of 8e166ad seems to have not been noticed much. * Call Down Lightning, Primal Wave, Hurl Sludge, icons: CC0 spell icons by frosty_rabbid. * Call Lost Souls icon: ontoclasm's lost soul icon + DracoOmega's ghostly status icon. * Creeping Frost icon: Denzi's crystal square walls + CanOfWorms's Frozen Ramparts icon. * Death Rattle icon: ontoclasm's cloud spell tile + Denzi's old dragon breath ability icons. * Holy Breath icon: Sastreii's pearl dragon + another CC0 spell icon by frosty_rabbid. * Hunting Cry icon: CanOfWorms Wereblood icon + Ultraviolent4's swift status icon. * Launch Bomblet icon: The current Hurl Damnation icon by ontoclasm and the current CC0 bomblet tile by Chrisblue. * Mourning Wail, March of Sorrows icons: Denzi's Tomb rock walls, ontoclasm's cloud spell tiles, and a CC0 spell icon by frosty_rabbid. * Paralysis Gaze icon: A CC0 eye by Surt. * Pyroclastic Surge icon: pianoman523's Hellfire Mortar tile + multiple CC0 spell icons by frosty_rabbid. * Seismic Stomp icon: Denzi's old 64x64 dragon tiles paired with pianoman523's Resonance Strike icon. * Still Winds icon: jpeg's travel exclusion adjustments and the generic cloud spell icon by ontoclasm. * Waterstrike icon: CC0 water tiles by finalbossblues + another CC0 spell icon by frosty_rabbid. * Wind Blast icon: A public domain piece by 7soul1. * Wild Magic, Subdued Magic icons: CanofWorms's Demonic Magic icons. * Big Wings icon: A public domain piece by 7soul1 + Sastreii's robust mutation icon. * Another Zot granite statue: Denzi's old Tornado spell icon. (Additionally, Battlecry's palette was tweaked a little, and Hoarfrost Bullet joins the other cannon-output spell in the monster list.) -------------------------------------------------------------------------------- 3db37b1 | yrdzrfxndfvh | 2024-11-20 02:12:46 -0330 add monsters to ziggurat_pillar_centre_c (#4109) "Summoners get stokers, fravashi, moths of wrath (decreased weight), and guardian serpents." "Smiters get deep elf high priests, ophanim, salamander tyrants, soul scholars, naga ritualists (decreased weight), soul eaters (decreased weight), flayed ghosts (decreased weight), entropy weavers and daevas, and lose glowing orange brains, with decreased weight going to monsters that don't do anything against the undead." "Suppressors get apises and glowing orange brains. The latter are a curious case because they fit well into all three types, but IMO having a permanent brilliance aura is justification enough to end up in the AOE buff/debuff category." [Committer's notes: Seraphim and silent spectres have both been rejected for being too strong and defining of other zig floors. Polterguardians have been rejected for being too weak in impact, and I'm taking out servants of whispers in the same capacity. Since these lists are getting exceptionally long and messy, I've adjusted the lines here to use only one of a given monster per floor- this hopefully will be more specifically memorable to use a floor of curse skulls support, ot a floor of moth of wrath support, rather than intermingling every floor getting the vault with a dozen or more different enemies from the one custom list. Finally, I moved undying armouries out of the summons list- Flashing Balestra doesn't work through grates- and over into the suppressors list now renamed a support list. Merges and closes #4109.] -------------------------------------------------------------------------------- f19855e | regret-index | 2024-11-20 02:12:46 -0330 Give Dispater AF_CORRODE Multiple fronts of reasons for this, really: * Dis has a corrosion mechanic presented simply for being inside it, but only caustic shrikes further the flavour or mechanical connection between the location of the hells' iron city and said corrosion effect (versus how many different ways earth and metal themes are used on monsters across the game and in Dis itself). While the other floors of Dis are plenty dangerous as is, Dispater themself has the lowest killratio of any of the hell lords in the past three versions, and thus can take a buff. * Compared to the unrand Pan lords, who have lots of unique or nearly unique spells to be flashy and memorable encounters, the hell lords are rather straightforward and boring in various different capacities. The hells themselves may be fairly more dangerous, but surely the uniques guaranteed each extended rune should get a little more to them too? Antaeus is easily kited, Ereshkigal has so many spells she's too inconsistent at actually following up silence or paralysis, and Asmodeus and Dispater are extremely similiar uniques with elemental projectile spells + Hurl Damnation + limited demon summon options, high AC and low EV, and a fixed equipment drop. (Asmodeus is statistically more dangerous due to Fire Summon getting to summon more at once, of course.) AF_CORRODE's irresistable corrosive nature as is deployed only on rust devils otherwise somewhat adds to the threat possibility space (I expect a bunch of good death logs with Corr (-40) before enough people pay enough attention) in a reasonably thematic enough fashion to work with. -------------------------------------------------------------------------------- 43d1335 | Aliscans | 2024-11-19 23:15:38 -0330 Don't let non-damaging clouds or walls stop shift+dir running. Let the player run (shift+dir) through safe clouds. Let the player run up to slimy walls if immune to their effects. In both cases, the player could already travel through an affected square. -------------------------------------------------------------------------------- 51936a8 | Isaac Clancy | 2024-11-19 23:15:33 -0330 Fix display of GDR in wizmode Use the rounded down instead of randomly rounded version of the players AC when calculating guaranteed damage reduction for display. [Committer's note: edited slightly to silence a compiler warning.] -------------------------------------------------------------------------------- 96a7ec2 | Isaac Clancy | 2024-11-19 22:46:07 -0330 Fix slime not showing around slime walls after reload After reloading and sometimes after changing levels, the slimey acidic floors around the walls in the Slime Pits (and oozemancy walls) wouldn't appear. -------------------------------------------------------------------------------- 9afaf51 | Isaac Clancy | 2024-11-19 22:45:46 -0330 Don't blame the player when a confused ally kills (BarneyGumball) Angels summoned by The Shining One worshippers could become confused (e.g. by being hit by a tarentella) and then kill themselves or other angels putting the player in penance. Fix this by not blaming the player for kills by confused allies unless they (or an ally) confused the ally. Fixes #3304 -------------------------------------------------------------------------------- 1c2b424 | Isaac Clancy | 2024-11-19 22:31:30 -0330 Let grey draconians keep iron scales in dragon form (kuniqsX) Other draconian get to keep the mutations they get from their colour when possible in dragon form, so it would be consistent for grey draconians to keep their iron-fused scales. Fixes #4111 -------------------------------------------------------------------------------- c7453fe | Isaac Clancy | 2024-11-19 22:17:19 -0330 Fix autofight not moving over web with slick slippers (jejorda2) When autofight was trying to move towards an enemy to attack it and the only way you could see to reach the enemies was through a web, autofight would give a message saying there was no safe path to the enemy and do nothing. It should have moved through the web as the slick spippers give immunity to them. Fixes #3125 -------------------------------------------------------------------------------- ee4b17a | Isaac Clancy | 2024-11-19 22:00:55 -0330 Round down the displayed damage for thrown weapons (sdynet) Previously, displayed damage for thrown weapon was rounded randomly possibly giving a different value each time you examined your weapon. It is now rounded down similar to unarmed. Fixes #4047 -------------------------------------------------------------------------------- 438ea5f | DracoOmega | 2024-11-19 20:04:13 -0330 Allow looking up spells by school with ?/s Currently, looking up 'necro' with ?/s returns just 5 results, one of which isn't even a player spell. Looking up 'fire' returns an incredible number of results (most of which aren't fire.) This is an often-requested feature in one form or another, so here's a stab at something simple and hopefully helpful. If you type '@', followed by a part of that school name, into spell search, it will now return all player book spells of that school and nothing else. (ie: '@necro' returns all player necromancy book spells.) A reminder of this behavior is given at the prompt for entering a search key (the same way as is done for glyph lookup options for some other categories.) Thanks to Ge0FF for some helpful suggestions. -------------------------------------------------------------------------------- 30e30ee | DracoOmega | 2024-11-19 17:40:59 -0330 Unbreak Vanquished Vanguard / Summon Mortal Champion summon cap (Ge0FF) Broken since fb19e97205a5 which made ENCH_SUMMON get set even when mark_summoned is called with a summon type of 0. Both of these spells call mark_summoned() a second time, after the monster is created, to properly mark their manually-created gear as summoned, but this was trashing the record of what spell had created them, causing their summon cap to be ignored. -------------------------------------------------------------------------------- 02a2365 | DracoOmega | 2024-11-19 15:45:58 -0330 Improve spell failure change description (Ge0FF) Due to not checking the *displayed* chance on xv, it was possible for the UI to think that a visible change in cast rate would happen for an item, even when it would not (for instance, 'improving' it from way over 100% fail to merely slightly over 100% fail). This meant the game would suggest pressing '!' even though that did nothing. Now we calculate all of the actual percentages directly, even on the first pass, so that we can be sure to give accurate information. Additionally, xv will now summarize by listing the change of the spell whose failure rate is most affected by the gear change (eg: "your spell failure would worsen by up to 22%"), to give a better idea whether those details are worth looking at or not. -------------------------------------------------------------------------------- 2e717ca | DracoOmega | 2024-11-19 02:34:56 -0330 Add a preview for examined equipments' effect on spell success Equipment in Crawl has a signficant effect on spell success that can often be difficult to intuitively predict the magnitude of. The general advice for determining just how badly that heavy armour will affect your spells is to try it on, but this isn't always possible. Sometimes a player is considering buying expensive armour from a shop, but isn't sure if it will ruin their important spells or not. Worse, Ashenzari worshippers often cannot swap their items without literally destroying them forever. In the spirit of items showing preview of how they would modify your EV, item descriptions now indicate their effect on spell success. Since effect on spell success is extremely individual to the spell, a single number cannot be provided; instead, a second page of information is provided for items that would modify spell success rate (accessible by pressing '!') This indicates the change in spell failure for every spell the player knows which would change by at least 1%. They are sorted in order of magnitude of change, and color-coded for how good/bad the change is. Items which cause any such change mention this in the same space where AC/EV changes are listed (along with how to access the additional information). Something like this has been a repeatedly-requested feature for some time now. I hope it will be helpful! -------------------------------------------------------------------------------- 4d9de50 | DracoOmega | 2024-11-18 15:38:51 -0330 Fix various brokenness with exploding monster attributions (Midn8) The most obvious breakage is that the player was incorrectly getting penance for blazeheart core explosions, but the player also was not getting XP for some things like ballisto spore explosions. I *think* this should straighten most of that out. -------------------------------------------------------------------------------- 648c01e | DracoOmega | 2024-11-17 22:49:25 -0330 Don't crash when a spike launcher made on the level border fires By making the source of the attack be the monster's feet rather than the spike launcher's own location (I don't think this actually affects anything meaningful, since it was only range 1 anyway.) -------------------------------------------------------------------------------- 9a63397 | DracoOmega | 2024-11-17 21:08:17 -0330 Fix a pronoun issue with Curse of Agony expiring (salticid) -------------------------------------------------------------------------------- aa28e0d | DracoOmega | 2024-11-17 21:02:10 -0330 Don't warn about hurting immune allies with Plasma Beam or Magnavolt -------------------------------------------------------------------------------- 0618abe | DracoOmega | 2024-11-17 20:57:28 -0330 Tweak will-of-the-wisp resists Remove the mildly-inexplicable rC+ and add another level of rF+ -------------------------------------------------------------------------------- 165d158 | DracoOmega | 2024-11-17 20:56:50 -0330 Fix Soul Splinter not working on electric eels They're not normally spectralisable on account of having no melee attack, but since the soul wisp does not refer to any of the source monster's stats besides HD in any way, there's no reason they should be excluded. -------------------------------------------------------------------------------- 37ced69 | DracoOmega | 2024-11-17 20:45:00 -0330 Ban Awaken Forest from being cast via Aphotic Marionette (Colgate) Since it will currently always be hostile to the player. (I could have sworn I disabled this before the ability was first pushed to trunk, but seemingly not.) -------------------------------------------------------------------------------- 1f54679 | DracoOmega | 2024-11-17 20:40:48 -0330 Make phalanx beetle AC boost colour AC blue in webtiles This fixes #4138 -------------------------------------------------------------------------------- 971a450 | DracoOmega | 2024-11-17 20:15:15 -0330 Be a bit clearer that pyre arrow's listed damage is per turn -------------------------------------------------------------------------------- 0e9803c | DracoOmega | 2024-11-17 20:15:02 -0330 Give the player a helpful suggestion when set on fire While information about how to deal with sticky flame is included directly in the status description, spell description, and bombardier beetle description, let's try a tiny bit of extra notice that is hopefully inobtrusive enough (rather than yell this at the player every single turn). -------------------------------------------------------------------------------- adb32c1 | DracoOmega | 2024-11-17 20:07:36 -0330 Don't claim that gravitambourine does anything to orbs of destruction It would still print the 'is pinned by gravity' message, even though it did not actually affect them. -------------------------------------------------------------------------------- 0817dc3 | DracoOmega | 2024-11-17 20:03:35 -0330 Allow Yara's to remove Bestow Arms's effect Also, use a prop to handle the cooldown on the undying armour, rather than repurposing the enchantment itself, now that it can be blown up and is no longer 'decorative'. -------------------------------------------------------------------------------- 177a729 | DracoOmega | 2024-11-17 20:01:42 -0330 Fix spacing in hoarfrost cannon idle messages -------------------------------------------------------------------------------- d82fd1d | DracoOmega | 2024-11-17 19:22:43 -0330 Make spike launchers more visible in console (Undo) -------------------------------------------------------------------------------- 6624952 | DracoOmega | 2024-11-17 19:22:43 -0330 Unbreak matches_player_speed for zombies Summoned creatures were not intended to have the 'automatically match the player's speed when travelling' behavior, but after the recent summon refactoring, is_summoned() returns true for a larger category of monster, including zombies. Intead, let's try excluding based only on whether they have a summon timer or not. -------------------------------------------------------------------------------- 1e4d284 | DracoOmega | 2024-11-17 19:22:43 -0330 Don't let hostile polymorph prevent Vessel of Slaughter's transformation Makhleb's power is not so puny. (Also, it consumed costs without even doing its thing.) -------------------------------------------------------------------------------- e0577c4 | DracoOmega | 2024-11-17 19:22:43 -0330 Don't fumble Wu Jian wall jump attacks if your destination has water The ability itself says that you attack 'from above', yet you technically landed at your end point *before* attacking, which could result in silly things like falling into water a moment before being described as jumping over something, and water at the end point could also cause you to fumble your attack altogether. Now, you should funtionally attack first and *then* land (and cannot fumble even if you're leaping towards water.) -------------------------------------------------------------------------------- f3c5cb1 | DracoOmega | 2024-11-17 19:22:43 -0330 Don't give apostles extra plusses on unrandart armour Could result in silly things like them showing up in +8 moon troll leather armour. -------------------------------------------------------------------------------- c608672 | DracoOmega | 2024-11-17 19:22:43 -0330 Forbid imprinting a weapon your god hates (Ge0FF) And if you already imprinted one before switching to a god who dislikes your prior choice, unimprint it upon conversion. -------------------------------------------------------------------------------- 4d67529 | DracoOmega | 2024-11-17 19:22:43 -0330 Let Spike Launchers be LRD'd -------------------------------------------------------------------------------- 82142fb | regret-index | 2024-11-17 05:47:07 -0330 More specific spell icon / effect tiles Most of these are using the new flash_tile() functionality added for various Forgecraft spells to add new flashes of debuffs that are extremely important to not miss, dramatizing them more than other debuffs and hopefully continuing to make it harder to miss that they were inflicted. (Several of these didn't even _have_ visual effects previously, which was especially strange considering most hexes do by default.) The splinterfrost barricade salvo, meanwhile, is meant to help distinguish it from using the non-penetrating Throw Icicle effect. Sources: * Draining Gaze vfx: roctavian's edit of Denzi's eye of draining. * Doom Howl vfx: roctavian's Shadow Fiend tile. * Entropic Weave vfx: Denzi's burst graphics and Pete Hurst's cobwebs. * Sap Magic vfx: snw-0's icon for the Sap Magic invocation + Sastreii's antimagic icon. * Sentinel's Mark vfx: aidan holm's Sentinel's Mark spell icon. * Splinterfrost salvos: An edit of roctavian's throw icicle projectiles. * Stoke Flames icon: pianoman523's current creeping inferno tile. This also comes with some reorganizing of dc-misc.txt to sort the spell effects by rough school of origin, to ease any further additions to the file. -------------------------------------------------------------------------------- 599108c | Nikolai Lavsky | 2024-11-17 00:13:13 +0300 fix: give water elementals animal intelligence too This got missed in 62137d702. -------------------------------------------------------------------------------- 901f017 | DracoOmega | 2024-11-16 16:53:26 -0330 Make Platinum Paragon use artefact weapons only (PleasingFungus) I'd originally implemented per-weapon-type damage scaling for paragon out of concern that certain weapon types (like axes or quick blades) would be disproportionately good on them. Many of the usual factors that govern player weapon choice don't really apply to either monsters or lategame - scaling is very different, and you're sure to have your choice of a reasonable weapon in nearly any category. I didn't want the choice to feel too 'flat'. But something you perhaps *aren't* guaranteed to have an obvious gauranteed best option of are artifacts (and artifact weapons are the most fun to use anyway.) So let's try removing the weapon-type-based scaling and just only allow imprinting artefacts. (This does make Gyre and Gimble even more absurd, but... maybe that's allow?) This does mean the paragon can no longer fall back on using the player's current weapon, if you've never imprinted one, so to try and avoid players not realizing they should use this, you can no longer cast paragon unless you first imprint *something*. (I considered just having them be unarmed in this case, but it seems likely some players will miss that.) -------------------------------------------------------------------------------- 838d476 | DracoOmega | 2024-11-16 16:53:26 -0330 Don't waste a turn trying to deploy a Paragon in deep water (Lightli) Possibly the paragon should just fly, but while I debate about that, it shouldn't consume a turn and 9 mana to do nothing. -------------------------------------------------------------------------------- d03ed39 | DracoOmega | 2024-11-16 16:53:26 -0330 Be more clear in the Spike Launcher failure message (ragingrage) -------------------------------------------------------------------------------- a53a18d | DracoOmega | 2024-11-16 16:53:26 -0330 Fix spell memorisation menu spacing (Lightli) I forgot to realign this to fit crocodile when I adjusted the spell cast menu. -------------------------------------------------------------------------------- 46016ea | DracoOmega | 2024-11-16 16:53:26 -0330 Don't let Walking Alembic give player potions in Cocytus (regret-index) If it deliberately works like real potions in as many other ways as possible, probably this should also block it. (For now, it doesn't affect ally buff effects, but to be honest, I am not sure how much we can concieve of sawblades as drinking a potion anyway. Maybe the alembic just made it some nice industrial oil to polish it with.) -------------------------------------------------------------------------------- 9984730 | DracoOmega | 2024-11-16 16:53:26 -0330 Preserve clockwork bee HP better than winding/unwinding This grew especially weird when Tempering was involved, and could result in it looking like your bee grew steadily more injured each time you re-activated it. -------------------------------------------------------------------------------- 50e1018 | DracoOmega | 2024-11-16 16:53:26 -0330 Fix missing Shred spell icon -------------------------------------------------------------------------------- c187417 | DracoOmega | 2024-11-16 16:53:26 -0330 Preserve Tempering status when a clockwork bee unwinds/winds (ragingrage) This also meant you could get explosions off the bee much more often than expected. -------------------------------------------------------------------------------- 976cc2d | Implojin | 2024-11-16 13:25:02 -0600 Draw Kinetic Grapnel UI icon in webtiles This was left out of 0183c6dfd6. -------------------------------------------------------------------------------- 68e16c8 | Implojin | 2024-11-16 13:02:18 -0600 Don't randomize Fortress Blast damage description (again) This is a fixed version of the fix from 94af0e6272d7. -------------------------------------------------------------------------------- b7987cb | Implojin | 2024-11-16 12:58:23 -0600 Revert "Don't randomize Fortress Blast damage description" I didn't know we were already using a different call for non-randomized AC in the UI, fixing this differently in a following commit. This reverts commit 94af0e6272d72a908e7deefd438db50019df8eae. -------------------------------------------------------------------------------- 94af0e6 | Implojin | 2024-11-16 12:44:11 -0600 Don't randomize Fortress Blast damage description It looks like this had been the intent already, but we were passing in armour class with a div_rand_round. -------------------------------------------------------------------------------- b817021 | Implojin | 2024-11-16 12:37:09 -0600 Fix Fortress Blast damage description (Oneirical) This spell description was using presumably-older version of its damage formula that capped at 51 ac, instead of 70. -------------------------------------------------------------------------------- 90355d2 | Implojin | 2024-11-16 10:28:52 -0600 Fix book of metalworking description (Zeldest) -------------------------------------------------------------------------------- 6b26e9b | regret-index | 2024-11-16 08:47:26 -0330 Tweak and add some more Xom tension spells Battlesphere and Intoxication have been adjusted towards their new spell levels, while two new Forgecraft spells have been introduced for the sake of both variety and tactical screwery: Alistair's Walking Alembic feels both appropriate for Xom's potion effect focus as well as leaving around poison clouds to screw with a non-poison-resistant player's movement, while Diamond Sawblades encourages repositioning mid-combat to be able to get any value out of their free but arbitrary rare placement. -------------------------------------------------------------------------------- a5ffdf5 | regret-index | 2024-11-16 08:47:26 -0330 Fiddle with a variety of monster attack type messages Alembics and blazehearts both punching were using attack types not actually in active use previously, as were dream sheep headbutting foes. In this same spirit of being a little more specific with reasonably straightforward attack types, the following not-weapon-using enemies now use attack types and words other than "hit": * iron golems punch both times, * draconian monks punch for their first hit (and still kick + tailslap after), * ushabti headbutt (they're too rigid to do much else), * spatial maelstroms and thermic dynamos touch and engulf, * and toenail golems gore. None of these should affect gameplay- even if one dragged an undying armoury over to draconian monks, they already preferred their bare fists before any other weapons. -------------------------------------------------------------------------------- d0176ef | regret-index | 2024-11-16 08:47:26 -0330 Short vault review, post-Forgecraft edition * nemelex_lonely_heart_becter no longer places Jessica post Temple. * Crypt entrances are now capped on their laughing skull counts, since rolling multiple laughing skull bands is quite dangerous for characters that kill monsters more slowly. * alphashops, custom_books, the Xom bazaar, and a variety of other vaults have new spells and books in the context of both the past couple of versions and Forgecraft. -------------------------------------------------------------------------------- 2aa0d2b | David Lawrence Ramsey | 2024-11-16 01:07:10 -0600 Fix typo. -------------------------------------------------------------------------------- b5dd53a | David Lawrence Ramsey | 2024-11-16 01:01:15 -0600 Add Winding status description. Also remove extra %%%%'s from status.txt. -------------------------------------------------------------------------------- 12864aa | DracoOmega | 2024-11-16 02:37:35 -0330 Fix a crash with examining Platinum Paragon spell description -------------------------------------------------------------------------------- e664b64 | Nicholas Feinberg | 2024-11-15 21:46:47 -0800 Dedent -------------------------------------------------------------------------------- b08092c | Nicholas Feinberg | 2024-11-15 21:22:29 -0800 Small spell description tweaks -------------------------------------------------------------------------------- 907fb87 | David Lawrence Ramsey | 2024-11-15 23:18:48 -0600 Add a few Forgecraft ghost lines. -------------------------------------------------------------------------------- 2e8e2f5 | David Lawrence Ramsey | 2024-11-15 23:17:16 -0600 Fix spelling. -------------------------------------------------------------------------------- 69e20f6 | gammafunk | 2024-11-15 23:13:46 -0600 Tweak a clua function For the newly added view.trap_at() function, slightly rework it to return the "base" trap name by the crawl-side trap_name() function. This is mostly for consistency with the c_trap_is_safe() clua hook, which is passed this same form of name. Previously we used a longer form that includes "trap" in its returned string, which is more appropriate for e.g. `x` mode descriptions. -------------------------------------------------------------------------------- 241dc13 | Nicholas Feinberg | 2024-11-15 21:12:45 -0800 Remove the indescribeable Since an actual Forgecraft description is higher in the same file. -------------------------------------------------------------------------------- 0267f39 | Nicholas Feinberg | 2024-11-15 21:10:49 -0800 Fix a few monstrous typos -------------------------------------------------------------------------------- 0c33a18 | Nicholas Feinberg | 2024-11-15 21:05:00 -0800 Fix: (Parenthesize) Percussive Tempering Make percussive temp check attitude while ignoring monsters. -------------------------------------------------------------------------------- d72c9b7 | DracoOmega | 2024-11-16 01:28:25 -0330 Fix tag upgrade build? Apparently the only beetle that had the beetle genus was phalanx beetle, and it is otherwise dummied out. It's maybe arguable a mechanical one shouldn't be a living genus anyway, but I honestly barely know what genus even affects. -------------------------------------------------------------------------------- 0f93415 | Nicholas Feinberg | 2024-11-15 20:56:59 -0800 Lay seige (to rest) -------------------------------------------------------------------------------- 48282d1 | DracoOmega | 2024-11-16 00:46:48 -0330 Diamond sawblades monster placeholder (regret-index) Pulled out from Sastreii's spell tile until a final version arrives. -------------------------------------------------------------------------------- d547fa6 | DracoOmega | 2024-11-16 00:46:48 -0330 Forgecraft spell tiles (Sastreii) -------------------------------------------------------------------------------- ab24663 | DracoOmega | 2024-11-16 00:46:48 -0330 Mark a majority of Forgecraft constructs as LRD-able Battlesphere and Rending Blade feel too insubstantial for this, but most other constructs are clearly made of metal or a similar hard material. -------------------------------------------------------------------------------- 6070836 | DracoOmega | 2024-11-16 00:46:48 -0330 Various Forgecraft monster/spell tiles/placeholders (regret-index) "CC0 piece usage: * Walking alembic enemies: shade's CC0 potions * Monarch bomb and bomblet enemies: Chrisblue's CC0 bombs The rest were cobbled together from old Crawl tiles." -------------------------------------------------------------------------------- ef13c8a | DracoOmega | 2024-11-16 00:46:48 -0330 Fix a typo -------------------------------------------------------------------------------- 070a0f9 | DracoOmega | 2024-11-16 00:46:48 -0330 Don't fire battlespheres at pacified monsters (SallyRoses) -------------------------------------------------------------------------------- 2d81e85 | DracoOmega | 2024-11-16 00:46:48 -0330 Remove a martyred shade's injury bond when it becomes a flayed ghost Injury Bond ends automatically when the source of the effect dies, but the shade isn't 'dead' - it's just not a shade anymore. While the flayed ghost cannot *continue* to apply the aura to allies, it would still linger for 30 aut after the shade died/transformed. Now, it should end immediately. -------------------------------------------------------------------------------- 5a289ac | DracoOmega | 2024-11-16 00:46:47 -0330 Expire capped summons immediately instead of only *almost* immediately Removing pre-existing summons when summoning things over a cap used a special internal status for 'quickly expiring', but this expiring was still very, very quick - immediately as that monster's next turn arrived, which was virtually always before the next player action. It was only even possible to see this in particular circumstances such as after an animated armour moved a step, or for monsters summoned by other monsters. Instead, just remove the summons immediately. (This also makes bookkeeping for certain effects less troubled by ensuring that any previous monsters made by a spell are removed *before* the new one is fully set up.) -------------------------------------------------------------------------------- a521cab | DracoOmega | 2024-11-16 00:46:47 -0330 Reorder some checks in _set_firing_pos The considerably more involved checks in mon_can_move_to_pos were being called even for positions that were clearly out of range, leading to potentially a great deal more work than was needed. Instead, do the quickest vetoes first. (There should be no functional change.) -------------------------------------------------------------------------------- abaddbb | DracoOmega | 2024-11-16 00:46:47 -0330 Try to prevent Battlesphere / Rending Blade from leaving their caster's LoS Their somewhat chaotic-looking movement gives them higher odds than most allies of breaking LoS with their caster, which can be somewhat confusing (ie: 'did it expire without me noticing?'). Try a little harder to keep them where their creator can see them. -------------------------------------------------------------------------------- 49116da | DracoOmega | 2024-11-16 00:46:47 -0330 New Forgecraft UI/effect tiles (regret-index) Spell tiles for Percussive Tempering and Magma Barrage. Effect tiles for Detonate Monarch Bomb, Paragon Tempest, Percussive Tempering, and Manifold Assault. Sources: * Platinum Paragon tempest / Manifold Assault: CC0 slash vfx by Cethiel. * Nadja's Percussive Tempering icon: Denzi's old Force Lance icon. * NPT vfx: A CC0 aura effect by Kutejnikov and roctavian's branded hammer tile. * Monarch Bomb shrapnel: Denzi's old zap effects, lava tiles, and LRD icon. -------------------------------------------------------------------------------- dc4253e | DracoOmega | 2024-11-16 00:46:47 -0330 Let flash_tile display arbitrary tiles, not just colours (And fix an animation delay bug in Shadow Tempest) -------------------------------------------------------------------------------- 01bb53b | DracoOmega | 2024-11-16 00:46:47 -0330 Exclude various Forgecraft spells from Oka/Sac Love On the fence about Diamond Sawblades (it's a monster where attacking it is meaningful, but it's also kind of 'Frozen Ramparts, but you make the rampart yourself') and Lightning Spire (traditionally excluded, but you can no longer give it orders, which makes it closer to Hellfire Mortar which *is* currently allowed). Wouldn't be surprised if more debating the subject happens later. -------------------------------------------------------------------------------- 62137d7 | DracoOmega | 2024-11-16 00:46:47 -0330 Heavily refactor mons_is_conjured/mons_is_object, simplify mons_is_conjured was a category being used in multiple (only partially overlapping) ways. In some contexts, it was used as an equivalent for is_summoned() for non-abjurable things which is_summoned() did not return true (but now does, since the recent rework). In other contexts, it was used to exclude monsters too minor to be randomly targeted for certain effects (eg: Obsidian's Axe's mesmerisation effect or Ignis's Fire Champion). In others, it was used overly broadly to avoid prompting the player about harming invulnerable allies (ie: orbs of destruction), with sometimes odd effects like Shatter being unable to damage spatial vorticies or boulders. In still more, it was used (as part of mons_is_object) to control what allies were angered by attacks and which ones gods would penance you for attacking - which weren't even symetrical categories! A lightning spire would be angered by you hitting it and vanish, but Ely would not min. But a spellforged servitor would *not* be angered by you hitting it, and yet Ely would penance you anyway. mons_is_object also relied on a bespoke list of things we considered to be 'a mindless object' that often overlooked things which seemingly belonged there (while also producing weird effects like Orb of Mayhem never triggering off killing dancing weapons or lighting spires, even though other seemingly similar things counted.) This commit replaces both of those functions completely. M_PERIPHERAL replaces M_CONJURED (since the ancillary nature of these monsters is the relevant mechanical thing, and not the fact that they were made by magic), actor::is_peripheral() replaces most uses of mons_is_conjured() and also folds tentacles and firewood into that same category. The very large number of places that checked firewood/conjured/tentacles together now need only check is_peripheral(), which should largely encompass 'is a proper monster'. Places that used mons_is_conjured to exclude 'minor monsters' now use is_peripheral(). Places that used it to exclude 'pseudo-summons' just use is_summoned() instead. Places that used it to reduce targeting prompts now check always_shoot_through_monster() instead (which isn't actually comprehensive, but the rest of that will wait for a later commit). mons_is_object is removed altogether and rules regarding angering allies and incurring penance are simplified. Anything which is both non-living and brainless neither gets angry nor incurs penance - full stop. I gave elementals animal intelligence, since it *feels* like they should have enough sapience to complain about being attacked, but I doubt this matters in practice. Most other uses of mons_is_object are simply cut (so orb of mayhem will work on kills of any xp-granting enemy) Sac Love / Oka ally conduct behavior is also effectively simplified a little - monsters that are peripheral are okay and everything else is not. There may be a handful of other minor behavioral changes (Siphon Essence no longer works on firewood, for instance...) but I think most not already mentioned are of minor conseqeuence. -------------------------------------------------------------------------------- da257ce | DracoOmega | 2024-11-16 00:46:46 -0330 Make mons_is_firewood() into an actor method and replace usages Firewood checks are done in many, many, many places. And many of these places want to perform that check on an actor which might not actually be a monster, leading to a common idiom like: if (targ->is_monster() && !mons_is_firewood(*targ->as_monster()) This is so common that I think being able to just call targ->is_firewood() is a lot cleaner. This commit replaces all usages of mons_is_firewood() with the new method, improves one or two comments, and additionally fixes a minor bug where Chaos slow/minipara could be chosen against monsters with stasis. -------------------------------------------------------------------------------- 74f4821 | DracoOmega | 2024-11-16 00:46:46 -0330 Make Refrigeration *actually* count only allies for huddle bonus While I claimed to do this in 1450d63957e5a (and the reasoning stands), a misreading of the code meant that the commit did *literally nothing*. Let's try doing it properly. -------------------------------------------------------------------------------- cdf5795 | DracoOmega | 2024-11-16 00:46:46 -0330 Use message channel to categorically ignore monster timeout messages Since that was part of the point of there being one in the first place. (And also ignore decor messages by default, too, in the rare case where someone has told themselves to run across piles of fruit) -------------------------------------------------------------------------------- 33284af | DracoOmega | 2024-11-16 00:46:46 -0330 Fix enemies sometimes getting incorrectly hit twice by allied beams When allies fire a piercing beam at an enemy, and the player happens to be standing in the path of that beam (and could be harmed by it), they will cut their shot short immediately before it would hit the player. But this is done by 'rewinding' the beam as soon as they test whether it can harm the player, and code designed to allow piercing beams to hit monsters standing at the player's location (ie: Fedhas plants) allows a beam to try hitting a monster immediately after trying to affect the player. But the beam has already rewound at that point, resulting in hitting the monster in the space immediately *prior* a second time. Now try a bit harder to actually end the beam processing when we mean to. -------------------------------------------------------------------------------- cf86d80 | DracoOmega | 2024-11-16 00:46:46 -0330 Adjust how spell range is displayed in the spell menu Instead of being shown in the form of @---->, it now just displays an actual number. There was some recurring ambiguity among new players as to whether you were supposed to just count the dashes or include the > as well, but it was also needlessly hard to tell at a glance whether a spell was full LoS range or only *almost* LoS range (unless the player had another spell with longer range to compare it to). This change also comes with a few other improvements: -Variable range spells are now listed in the form of X/Y where X is the current range and Y is the maximum possible range. The old method used . after the > to indicate 'possible range which the player does not yet have enough power to reach', but I think this was a little non-obvious and it also did not in any way indicate that a spell had variable range if you had already reached its maximum. I think this should now be clearer. -The red coloring of monster spell ranges in xv will now properly account for the player being *too close* to be in range of Call Down Lightning and Flashing Balestra. -The player spell menu in webtiles should no longer flicker between two sizes when you switch display modes with ! -Range takes up less width in the spell menu (so something else can use it instead). -------------------------------------------------------------------------------- 6c71ebf | DracoOmega | 2024-11-16 00:46:46 -0330 Actually give Shadow Puppet a summon cap The commit that added it claimed it has a cap of 3, other information sources have since claimed it has a cap of 3, and I am fairly sure I have responded to a question at some point by saying that it had a cap of 3, but it actually had no cap at all. Oops. (I guess, in practice, it's quite hard to summon more than 3 of them in a single battle anyway.) -------------------------------------------------------------------------------- fb2b16b | DracoOmega | 2024-11-16 00:46:46 -0330 Add Dithmenos shadow mimic spell for Forgecraft Shadow Turret: makes a stationary ally which repeatedly fires Shadow Shot, a basic single-target spell with full LoS range (that otherwise does much less damage than direct shadow attack spells, of course). Summon cap of 2. -------------------------------------------------------------------------------- 1f958b4 | DracoOmega | 2024-11-16 00:46:46 -0330 Move Animate Armour into Forgecraft, rename and tweak Saying that the spell created 'animated armour' always felt a little wierd to me given that it clearly wasn't your armour that had gotten up and started moving about (unlike with dancing weapons!). The writing tried to describe this as the 'spirit' of your armour rather than the armour itself, and I have attempted to lean a little further into that. The spell is now named Awaken Armour and explicitly draws out an 'echo' of your current armour (with some descriptions tweaked, as needed). The one current use of natural animated armour (nicolae_shop_mannequins) now no longer drop 'themselves' (which was always an unexpected interaction, given how the spell clearly doesn't animate a real object). I apologize to people who got creative with Overgrowth to snag an early dragon scales. The spell now also copies your armour in its entirety (rather than creating a plain +0 version of your armour's base type). It feels a little more fun to me to be able to apply artifact properties to your minion, and in general Animate Armour was never considered overly powerful, so some degree of buff seems fine. Inheriting plusses does mean that it is probably a fair bit more durable, so I've nudged down its base HP slightly at the same time. Finally, the armour echo now tries to spawn adjacent to the caster. (I also removed the 'dancing weapon' icon in the corner, since animated armour generally looks nothing like armour on the ground, unlike dancing weapons, and shouldn't be similarly confusable.) -------------------------------------------------------------------------------- 3cf105b | DracoOmega | 2024-11-16 00:46:45 -0330 Distribute spells through new books And give Forgewright/Summoner their new starter spells. (As well as fixing up a couple cases where an earlier spell was mistakenly in 3 books (Gavotte / Simulacum) or just 1 (Grave Claw).) These are a little more provisional than usual, since I'm still hoping to heavily overhaul the spellbook system at some point in 0.33. -------------------------------------------------------------------------------- d5f8b11 | DracoOmega | 2024-11-16 00:46:45 -0330 Don't give djinni Percussive Tempering without something to temper Technically some of the spells on this list are impossible to be offered before a level 5 spell, but it seemed worth being comprehensive in case the spell levels of any of these things change in future. -------------------------------------------------------------------------------- ff6897e | DracoOmega | 2024-11-16 00:46:45 -0330 Move Battlesphere into Forgecraft, tweak, rewrite backend code This commit moves Battlesphere from Level 5 Conjurations to Level 4 Conjurations/Forgecraft. I was a little less certain about this becoming Forgecraft than I was the other spells I've moved, but it does allow it to share schools with its closest relatives, Servitor and the new Rending Blade. At the same time, this adjusts the behavior of battlesphere slightly, and rewrites its code almost completely. While the refactor of ca6d514eab45b7 greatly reduced the number of situations where a battlesphere looked like it should have triggered, but did not, it didn't remove them altogether. Battlesphere's original implementation worked by co-opting normal monster movement/action code to try and coax the battlesphere into relocating itself over multiple actions until it had line-of-fire to a given target. This was quite brittle and involving an increasing amount of bespoke code and properties to try and do so intelligently. Rather than try to add *even more* to fix these issues, I've opted to use a different approach altogether. Now, when a battlesphere is looking for an alternate firing position, it calculates what spaces it could reach from its current position within 3 movement actions (accounting for what creatures are currently in the way), and if any of those are valid firing positions, it will just immediately move to that location. The battlesphere was already fast enough that 'teleporting' in this way should be visually indistinguisable from doing it the normal way, but considerably less error-prone. At the same time, I've changed the battlesphere's targeting behavior from 'pick a target at random' to 'pick the most injured target' (as calculated by the difference between its max and current hp). This should greatly increase the chance of it focusing on the target the player wants it to (or at the very least - a target it is most likely to finish off). I've also removed the effect of spellpower on duration and number of shots before disappearing. Doing low damage at low power is enough, I think, rather than doing low damage *and* only lasting for a few turns. (I've set the average number of shots per cast at around ~70 power in the old system.) Battlesphere's been a fairly lackluster spell in recent years, and moving it into side schools would probably make it even less appealing without some touch-ups, so hopefully this new version feels better to use. -------------------------------------------------------------------------------- 8729743 | DracoOmega | 2024-11-16 00:46:45 -0330 Add method to compute movement reachability for monsters in a given range monster_pathfind::fill_traversability() allows computing all spaces reachable by a given monster, up to a given range. This information can then be queried by monster_pathfind::is_reachable(pos). This allows seeing which spaces a given monster could or couldn't reach within X moves. I also added a boolean to allow considering actors to be opaque to movement (so that you can ask the question of "What can I reach if everything in my way remains there?") The implementation isn't really the cleanest, but it saves on reimplementing things monster_pathfind can already do. This code will be used for a subsequent Battlesphere rewrite, but might have other theoretical uses in future. -------------------------------------------------------------------------------- f64de3d | DracoOmega | 2024-11-16 00:46:45 -0330 Move Spellforged Servitor into Forgecraft and rename While I've always thought Spellforged Servitor had a nice ring to it, the name feels increasingly weird when there's now no less than 4 other "Forge [Creature]" spells. Being forged by a spell isn't a distinguishing property anymore! So now it's called Spellspark Servitor instead (and descriptions updated accordingly). Besides not being abjurable, there is no functional change. -------------------------------------------------------------------------------- bcf7d94 | DracoOmega | 2024-11-16 00:46:45 -0330 Move Hoarfrost Cannonade to Forgecraft/Ice, tweak placement very slightly The cannons can no longer place in melee range of the player and will always appear at range instead. (Also slightly remove alchemy references from the spell's descriptions.) -------------------------------------------------------------------------------- e22bf9a | DracoOmega | 2024-11-16 00:46:45 -0330 Add Forgecraft school to Hellfire Mortar and adjust numbers It is now Earth/Fire/Forgecraft instead of just Earth/Fire. Since 3-school spells are quite a bit harder to cast (especially at level 7!), its numbers are generally adjusted upward. It now uses a different internal spell from bolt of magma that is functionally very similar, but with +1 range and different scaling. The reliance on monster bolt of magma was a little restrictive and caused the spell to have much poorer scaling with power than I think is desireable. (200 power mortar didn't even do 50% more damage than 50 power mortar, while the damage of many other high-level attack spells increases by nearly 200% in the same comparison.) A mortar-unique spell allows more control here. (As an incidental side-effect, Mortar HP no longer increases with spellpower, but was always generally high enough that the mortar dying from damage was rarely a real concern, so I think it's fine.) -------------------------------------------------------------------------------- a5f1ced | DracoOmega | 2024-11-16 00:46:44 -0330 Move Summon Blazeheart Golem into Forgecraft (with minor flavor rewrites) Besides becoming a non-abjurable construct, there should be no functional changes. -------------------------------------------------------------------------------- d6ff5ca | DracoOmega | 2024-11-16 00:46:44 -0330 Move Summon Lightning Spire into Forgecraft, tweak behavior Moves Lightning Spire from summonings/air into forgecraft/air and renames. At the same time, I am trying a behavioural change in the spirit of forgecraft allies having more unique deterministic behaviors (and also to differentiate it a little further from Hoarfrost Cannonade, now that they will share schools in addition to being close in level). Instead of being a 'normal' ally that listens to your instructions about what to hit, spire now always fires its bolt at the *furthest viable hostile target* (much like how plasma beam works). If that path is blocked, it will aim at increasingly closer enemies until it finds a shot it's willing to take. It still has its 50% chance to cast per turn. (I think the 'spikiness' of this is also a good differentiator from hoarfrost's reliable shots every second turn.) -------------------------------------------------------------------------------- 31361a5 | DracoOmega | 2024-11-16 00:46:44 -0330 New spell: Rending Blade (Level 4 Conjurations/Forgecraft) Intended as a new Reaver capstone spell, as well as a sort of 'melee counterpart' to Battlesphere. Continuing the reaver tradition, this is a strong damage conjuration with significant downsides, which supports a conjurations hybrid playstyle. Casting this spell uses *all* of the caster's remaining MP to create a magical blade that flies alongside you for a small number of turns. Whenever the caster hits with a melee attack while the spell is active, this blade will attempt to dash through a line of enemies, inflicting irresistable damage to all of them. When the blade dies or expires, the MP used to form it is returned to the player. (An earlier version just gave -Cast for the duration, but I thought it was a little more interesting if it was *possible* to restore MP during the spell's effect, and also if the amount of remaining MP provides a small power boost.) The blade will prioritize the most HD of enemies in can hit in one dash without leaving the caster's sight. If no viable target exists that turn, it will retain up to 3 charges to unleash the next time a target presents itself. (Since the blade uses the same M_MAINTAIN_RANGE behavior that Battlesphere does, which jitters a bit, it tends to find viable shots again on subsequent turns.) Hitting multiple enemies in a single attack (such as with an axe) can trigger the blade multiple times at once! This is obviously strong, but axe conjurers are such a niche thing that I think it's okay if it's theoretically especially good with them (after all, it's also especially good with quick blades.) Given that the blade *deliberately* cannot fly through the player themselves, it tends not to function well without a little space around, but can be quite strong with the proper terrain. (Reavers are not an especially weak background, although not a popular one, and anectodally, many seem to stop training conjurations after Momentum Strike. By offering a higher-level spell that continues the hybrid playstyle, it may make them feel a bit more attractive - at least, make them more likely not to ignore conjurations entirely in the long-term, in favor of melee.) -------------------------------------------------------------------------------- 9e9ac7d | DracoOmega | 2024-11-16 00:46:44 -0330 New spell: Phalanx Beetle (level 6 Forgecraft) This spell constructs a fast-moving ally whose mere presence increases the caster's AC while it is alive, but which has a unique behavior: it will never leave the caster's side under its own power. If the caster moves, it will follow in lockstep with them (although it can pivot around to reach enemies near you.) If forcibly separated (ie: via knockback or blinking) it will prioritize returning to your side over attacking anything else. It cannot be ordered away. Its attack is fairly unimpressive for its level, and it cannot be thrown at enemies, but it is durable and increases the caster's own durability (as well as providing a natural synergy with Fortress Blast). Intended as a generic mid-range option that can fit into almost any Forgecraft build. -------------------------------------------------------------------------------- dd785e4 | DracoOmega | 2024-11-16 00:46:43 -0330 Fix Shadow Tempest skipping stationary monsters I think this was a mistake from copy-pasting Shadow Bind (which obviously does nothing useful against stationary monsters) -------------------------------------------------------------------------------- e2ea8ae | DracoOmega | 2024-11-16 00:46:43 -0330 New spell: Summon Seismosaurus Egg (Level 4 Summonings/Earth) Intended as the other half of a replacement for Summoner losing Blazeheart and Lightning Spire, while trying to retain some of the dynamicism that Blazeheart added to the background. This spell summons a dinosaur egg on a random tile between 2-3 spaces away from the player. If the player sticks near that egg for several turns, to imprint upon it, *while enemies are nearby*, the egg will hatch into a very strong ally for its level. (A small heart icon will be displayed over the egg if the conditions are right for it to hatch, making it more transparent to players when things are sufficiently in range.) A seismosaurus is somewhat overstatted for level 4 (to compensate for the slowness and positioning needed to hatch one) and has the Seismic Stomp ability, which deals smite-targeted damage to several random enemies within 4 tiles of the seismosaurus. This deal only 1/3 damage to fliers, but can sometimes cause grounded enemies hit by it to stumble and miss their turn outright. They will use Stomp immediately upon hatching, and can also use it randomly thereafter. Being a smite-targeted AoE, it plays well with all sorts of allies (ie: it can shoot 'through' them) and positions you end up in. And I think it naturally gives the spell a sort of progression, where when you *first* get it, the dinosaur is very strong, but you need to put effort into holding the line with much weaker allies in order to hatch it. And then later on, when you have stronger allies, you can toss an egg out for some supplementary damage behind your higher-level summons. Initial playtesting feedback has been positive, and I think the spell is fun to use! -------------------------------------------------------------------------------- 9cda979 | DracoOmega | 2024-11-16 00:46:43 -0330 New Spell: Fortress Blast (Level 6 Forgecraft) A deliberate melee hybrid spell to further establish Forgecraft as not *just* about making allies, but also other things conceptually related to tangible physical structure and armou Fortress Blast is a player-centered AoE attack spell whose damage scales entirely based on your AC. Casting it roots the player in place for several turns (during which they can still perform other actions), and at the end of these turns, there is a large explosion of physical force. Spellpower affects how quickly the blast charges up, but the power cap is deliberately low, since this is aimed at characters with high AC who are less likely to plausibly *reach* high power. This is aimed, to a degree, as a sort of inverse counterpart to Manifold Assault. Where that spell tends to be favored by EV characters (due in part to its spell level making it harder to cast in armour), this one is obviously aimed at AC characters. It comes with the downside of needing to anchor you in place, but can do a lot more damage-per-MP if you're facing many enemies. A spell to be added in a subsequent commit can also increase the player's AC directly, providing a natural synergy for this spell (and Animate Armour, slated to be moved to Forgecraft, naturally is boosted by similar things, creating a cohesive sub-theme) The damage scaling from AC is non-linear (ie: each point of AC is worth *more* than the last) and currently caps at ~70 AC. The damage is *quite* high with high AC, but given that it can inflict that damage at most every few turns (along with downside), I do think it needs to be at least a little high. (Formulas are, of course, subject to change from playtesting.) -------------------------------------------------------------------------------- 79a0bfb | DracoOmega | 2024-11-16 00:46:43 -0330 Don't override spell targeters for helpful spells, regarding the player Regardless of what targeter::valid_aim returned for the player, direction_chooser would consider the player a valid target and default to them for anything with spflag::friendly or spflag::neutral. -------------------------------------------------------------------------------- 123cb02 | DracoOmega | 2024-11-16 00:46:43 -0330 New spell: Nazja's Percussive Tempering (Level 5 Forgecraft) Another hybrid offense/defense spell, Nazja's Percussive Tempering targets an allied creature which was created by a Forgecraft spell and applies the Tempered buff to it as well as healing it somewhat and immediately dealing AoE damage around that creature. Tempering boosts the monster's HD by 4 and also increases its melee damage by 25%. Tempering is fairly short-lived, but importantly the spell cannot be recast on an ally who is currently tempered. And since a large chunk of the spell's utility is in the damage burst (and a little in the heal), the hope is that it isn't something you auto-cast on an ally, but rather choose an appropriate time to use. A useful and flexible utility spell that naturally interacts with different forgecraft allies in different ways. -------------------------------------------------------------------------------- 5bfd77a | DracoOmega | 2024-11-16 00:46:42 -0330 New Spell: Splinterfrost Shell (Level 7 Ice/Forgecraft) This spell creates 4 splinterfrost barricades in an aimable semi-circle around the caster, pushing anything currently occupying those spaces backward first, if possible. These barricades are moderately durable walls (with standard ice resists), but when destroyed will fragment into piercing ice projectiles that launch in the direction of whatever destroyed them (as long as no allies are in the way). They will melt automatically if the caster moves more than 2 tiles away from them. The spell can be used both offensively and defensively, providing breathing room against melee enemies (and conveniently moving them out of permafrost eruption's minimum range, while the barricades themselves are immune to the damage from permafrost / freezing cloud / refrigeration) and also being a meaningful source of damage themselves against enemies that can destroy them rapidly. I've been a *touch* concerned about how strong it is to be able to reliable and repeatedly push enemies out of the way with a 'wall', but lategame has many enemies who can fire through these barricades, and a level 7 dual-school that is foremost defensive probably gets a fair bit of room to be powerful. (There are some mildly weird-looking behaviors monsters currently exhibit when pathing around barricades, but nothing outright broken. I hope to fix some of these in the future.) -------------------------------------------------------------------------------- 998f965 | DracoOmega | 2024-11-16 00:46:42 -0330 New spell: Forge Monarch Bomb (Level 6 Fire/Forgecraft) This spell summons a Monarch Bomb, which is a relatively weak ally with the ability to deploy a large number of Bomblets via its melee attack (or at range with the Launch Bomblet spell). These bomblets are mobile, but possess no attack of their own (and cannot be ordered around). However, when the player recasts the spell, all active bomblets and the monarch bomb itself will detonate, dealing half-physical/half-fire damage to all adjacent targets (and destroying themselves). This has shades of the old Forceful Dismissal spell, but in a more specific context. There's a certain mild 'push your luck' element with detonating the bombs now versus waiting for more bomblets to be deployed, and setting up and then triggering large explosions is fun! It also offers Fire magic an optonal side path that can perform better against fire-resistant targets, making what I think is an interesting option when approached from either school. -------------------------------------------------------------------------------- 5a53e7b | DracoOmega | 2024-11-16 00:46:42 -0330 Move warn_about_bad_targets, improve slightly This adds a parameter which can be used to exclude certain targets which cannot be harmed by the attack being warned about. (This isn't used more widely at the moment, but there are some existing uses that probably should be edited to account for resists.) Also, if the same space is affected more than once, don't confusingly claim that "Something (and 1 other bad target)" could be hit. -------------------------------------------------------------------------------- 2b47ff0 | DracoOmega | 2024-11-16 00:46:41 -0330 New spell: Alistair's Walking Alembic (Level 5 Forgecraft/Alchemy) This spell creates a potion-brewing golem with both offensive and supportive properties. Its melee attack vents fumes (creating short-lived poison clouds around what it punched), and after it has performed a certain number of attacks, it will finish brewing potions and distribute them. This affects up to 5 nearby allied monsters, and also the player (if they are within 3 tiles of the alembic when it finishes.) For monsters, the effect is chosen randomly among haste, might, brilliance, or heal wounds (choosing only effects that could do something for the monster in question - ie: no might on monsters with no attacks.). For players, it chooses one of haste, magic, heal wounds, might, or invisibility, at random. These effects are slightly weaker than drinking the potion directly, but otherwise count as a 'real' potion for multiple effects (ie: mummies cannot drink them, oni can get a cleave attack from drinking !hw/!magic, etc.) Now, giving the player unlimited potion effects 'for free' might seem very strong, but I believe the combination of the randomness, as well as needing to have this golem survive and attack a bunch of turns in a row before getting any effect at all, can balance this out appropriately. !haste is strong not *just* because being hasted is strong, but because you can become hasted the moment you want to and not: a ~1-in-5 chance 5-6 turns later. Also, the potion connection is, I think, good flavor to make alchemy feel more alchemy-like. A useful offensive buddy, with a unique bonus. -------------------------------------------------------------------------------- beb85e9 | DracoOmega | 2024-11-16 00:46:41 -0330 New spell: Platinum Paragon (level 9 Forgecraft) The capstone of the Forgecraft school, this spell is intended as an ally-creation spell that holds up as being worthly of level 9, while also being as different from Dragon's Call as is possible. Instead of creating a large number of short-lived, disposable, regular monsters, it creates a single unique ally that you are encouraged to keep alive (at least for a little while) and even fight beside (as opposed to maneuvering to use your dragon swarm to *prevent* enemies from being beside you.) As a single bespoke ally with modality, Paragon has a lot of things going on, but I think many of these properties flow naturally together and play in a fun and distinctive way: -Your Paragon can wield any melee weapon the player has found. (You use the Imprint Weapon ability to select this weapon, similar to how Imbue Servitor is used to select servitor spell.) Whenever you cast Paragon after this, it will spawn wielding a perfect replica of that weapon (so there's no need to carry it around in your inventory or switch to it before casting the spell). -Whenever the caster performs a normal melee action, your paragon will also perform an instant melee attack again a random enemy in its range. -While within 2 tiles of your paragon, it has a 1-in-3 chance to block any attack targeting the player. (This is aimed to further encourage the caster, who might be themselves frail to have a level 9 spell, to melee alongside their paragon with more confidence.) -The paragon builds up charge as it melees things, and when it has attained a sufficient amount, the spell can be recast to perform a powerful finisher - unleashing a weapon attack with a bonus damage multiplier again many nearby enemies, and destroying the paragon in the process. -Casting the spell itself deploys the paragon to a selected nearby location and deals modest damage via a concussive shockwave to nearby enemies (aimed at making the cycle of 'deliberately destroy paragon, replace paragon' feel better since you also get an immediate benefit to making a new one.) All together, this makes a customizable ally that can feel different from run to run (lots of exciting unrand weapons to give it!), encourages the player to get in the thick of battle themselves (it charges up the finisher faster!), and gives not just a stat-stick, but a fancy button to press as your level 9. Some numbers may still need adjusting, but early playtesting feedback has been quite positive, and I think it's a very fun spell. -------------------------------------------------------------------------------- b6ef6c3 | DracoOmega | 2024-11-16 00:46:41 -0330 Pull out some Gravitas and animation code into reusable functions Since these are slated to get an additional use shortly. -------------------------------------------------------------------------------- 5f7b8df | DracoOmega | 2024-11-16 00:46:41 -0330 New spell: Eringya's Surprising Crocodile (Level 4 Summonings) Intended as a Summoner starting to spell to replace the two level 4s it's about to lose to Forgewright. This spell summons a crocodile as a short-term mount beneath the caster, which performs an ambush attack and repositions the caster in a single action. This spell is cast upon a target in melee range. The summoned crocodile will perform an immediate attack against that enemy (which never misses and has bonus damage based on spellpower), and drag both it and the caster backwards. Then the caster hops off the crocodile, landing a space further back, while the crocodile remains as a normal summon. It also makes some water along the drag path. The spell cannot be recast while the crocodile is still active (so you can't perform silly chain-grabs), but it's fairly short-lived and fragile. This is intended to be a more dynamic use of summons than average, and allow some useful repositioning - leaning into crocodile's natural drag attack by making it even better at deliberately pulling enemies away from their allies to surround them with your own creatures, while also putting the crocodile between you and whatever enemy was just next to you. -------------------------------------------------------------------------------- 3d961a6 | DracoOmega | 2024-11-16 00:46:40 -0330 New spell: Diamond Sawblades (level 7 Forgecraft) This spell creates up to 4 sawblades in the following fixed positions around the player, which deal damage to adjacent enemies each turn they are active: X...X ..... ..@.. ..... X...X (They cannot be placed in any space the player cannot see, or one with a wall or other monster.) The sawblades can be used both as AoE damage, or short-lived obstructions (though they're not terribly durable) and the unique targeting will hopefully interact with different spaces in interesting ways. (For instance, they are useless in straight corridors, but very strong in diagonal ones, and can be used both defensively and offensively in a single cast, with the proper positioning.) They are intended as a flexible and straightforward high-level single-school option. -------------------------------------------------------------------------------- 0183c6d | DracoOmega | 2024-11-16 00:46:40 -0330 New spell: Kinetic Grapnel (Level 1 Forgecraft) Given that Spike Launcher will be online for most Forgewrights by XL 2, this is a spell with a short shelf-life, but they *do* need a generally reliable XL 1 option and this is intended to be that. Kinetic Grapnel is a short-range direct-damage projectile. If it successfully does damage, it lodges a grapnel in that enemy which allows the caster's next melee attack against them to be an automatic hit with +3 slaying. Requiring a dodgeable, low-damage projectile to do damage should hopefully limit its long-term usefulness as an accuracy boost (and the flat slaying falls off quickly), but this forefronts some of the 'melee hybrid' properties of Forgecraft from XL 1 while offering a straightforward tool before more positional ones come online. (The spell tiles at the moment don't look very grapnel-like, but this was at least the 3rd level 1 spell I tried, so we'll just consider them a placeholder for now.) -------------------------------------------------------------------------------- 0e89163 | DracoOmega | 2024-11-16 00:46:40 -0330 New spell: Construct Spike Launcher (Level 2 Forgecraft) Another Forgewright starter spell, this temporarily transforms a random adjacent rock wall into a 'trap'/turret that repeatedly attacks a random adjacent enemy each turn. If the caster moves more than 2 tiles away from this launcher, it will disappear prematurely. The idea here was to explore creating an 'ally' that couldn't be used as an earlygame corridor swap or obstruction for enemies (which Summoner is famously good at). In practice, it plays a little like making a single-tile and single-target Frozen Ramparts, which allows a bit more movement while active (and might, in fact, require the caster to move immediately in order to position an enemy in the launcher's range). But that is a popular and successful spell, and I feel this is more than sufficiently distinct from it. (I would have been happy to have this spell by targeted as Forgewright's level 1 spell, but its terrain-dependence means that some entry vaults simply will not allow the player to use it at all in their initial battles and that feels unacceptable.) -------------------------------------------------------------------------------- 524258f | DracoOmega | 2024-11-16 00:46:40 -0330 New spell: Launch Clockwork Bee (level 3 Forgecraft) A starter spell for Forgewrights (and their first that actually places a monster on the field), this creates a fast and powerful-for-its-level mechanical bee, with a number of specific limitations. Casting the spell requires a hostile target to point it at, and then winding the bee's clockwork requires channelling it for several turns before it launches. The bee will fixate its attacks on the selected target while it lives (similar to how Haunt and Soul Splinter work), but can perform only a limited number of attacks before running out of power. When the bee runs out of power, it falls dormant to the ground. The player can wind it back up again by attempting to move into its tile, which will refill it with energy and even heal it a little (and is a lot faster than channelling 4 turns to launch a new one). The idea is that the slow deployment (that cannot be done pre-battle), combined with the strong incentive to actually poke your bee when it falls down, will make playing with this ally a distinctive experience. And its raw stats will make it feel good despite its limitations. (It even comes with rF+/rElec+ to make it play a little better with Forgewright's level 4 spells.) -------------------------------------------------------------------------------- 08c8627 | DracoOmega | 2024-11-16 00:46:40 -0330 Unify handle of channelled spells Searing Ray, Flame Wave, and Maxwell's Capacitive Coupling all had a bunch of common behavior (ie: ending on movement or becoming silenced during the casting of the spell) that each spell implemented individually - and sometimes in slightly different ways from each other. This is an attempt to provide common functions to handle these shared behaviors in a unified way (and make it easier to add a 4th such spell without more code duplication). This doesn't clean up all props used by these spells the way the old code did, but that shouldn't matter - the props will always be set to relevant values when the spell is cast, and ignored when the spell is not active. This commit also contains save compat code to handle anyone who happened to have saved in the middle of channelling one of these spells. -------------------------------------------------------------------------------- ce82306 | DracoOmega | 2024-11-16 00:46:40 -0330 Make quote text more visually separated from mechanical text This adds a visual divider between mechanical descriptive text and flavor text for most non-monster UI (monsters already have it on a seperate tab), as well as drawing said text in a darker color. It would be nice if there was some color between grey and darkgrey here, and it would be *especially* nice if I could actually center the divider, but as far as I can tell, a bunch of places that construct these descriptions do not yet know the width of the popup they will be placed in, so left-justified it is for now. (While I feel many of the real-world quotes Crawl currently uses are dubious or added out of a sense of completionism, I think the same space could be used for ancillary flavor text or *in-world* quotes instead, and plan to use it for such for at least a few forthcoming spells. More could theoretically be done over time.) -------------------------------------------------------------------------------- 382a698 | DracoOmega | 2024-11-16 00:46:40 -0330 Allow specifying weapon renames in job-data, give Forgewrights hammers This is an ugly solution and maybe I should just canonize hammers as a non-generating item again. -------------------------------------------------------------------------------- 845a3d3 | DracoOmega | 2024-11-16 00:46:40 -0330 Implement backbone of new spell school: Forgecraft Forgecraft is about making tangible physical constructs and reinforcing them in various ways. It contains many spells which create things like cannons, golems, or magical weapons, as well as a variety of supportive utility. This school is not intended to address a specific 'flaw' in Crawl at the moment, but rather because I think it would be a fun new thing and allow for even more cross-school diversity. I believe there is still a lot of untapped potential in ally-creation spells, but Summonings was already one of the most populated schools in the game. Necromancy shows that other schools with an ally+utility focus can work well in Crawl, and this is intended to be a new one of such - landing somewhere between the two in terms of ally/utility balance. Compared to Summonings, Forgecraft allies tend to have more specific unique behaviors, and either operate in a limited way or are triggered based on the caster's own actions (ie: as Battlesphere is). Forgecraft is also aimed with hybrid play in mind from the start - with multiple spells that benefit from melee cooperation in specific ways that Summoning spells don't or which are directly augmented by melee ability. Multiple existing spells will be moved into Forgecraft (with some adjustments), as well as many new spells across subsequent commits. This commit adds the basic infrastructure of the Forgecraft skill, as well as icons, descriptions, Forgecraft enhancer artprop, Ru sac skill, randbook words, and so forth, as well as a placeholder for a new mage background, Forgewright. (Because of strict skill enum grouping among spell skills (ie: all of them have to be contiguous), this repurposes the SK_TRANSMUTATIONS enum to become SK_FORGECRAFT. But, after examining this, I think it should be basically safe.) Aptitudes: Mountain Dwarf: +2 (but now have -2 Summoning) Coglin: +2 Yellow Draconian: +2 (they were the only colour with no aptitude bonus, and this seemed reasonably connected, since Alchemy was already used.) Demonspawn: -1 Felid: -1 Ghoul: -2 Minotaur: -2 Tengu: -2 (to contrast with their +2 summoning, as an inverse of MD) In all other cases, species have the same Forgecraft apt as they had Summonings. Forgecraft miscasts cause self-corrosion - less because acid damage is a theme in Forgecraft spells, and more that operating upon the structural integrity of physical objects is their domain, and making said structure *worse* feels like a plausible failure state to performing them incorrectly. -------------------------------------------------------------------------------- 0b82191 | gammafunk | 2024-11-15 15:49:54 -0600 A clua function to examine traps Traps can currently mostly be described by view.feature_at() by parsing the resulting feature name. However "mechanical" traps like net and pressure plate use the same terrain type, so there's no way to differentiate those. Furthermore one has to manual parse the internal feature name. This commit adds a `view.trap_at(x, y)` function that returns a base trap name if a trap exists at (x,y), otherwise returning nil. -------------------------------------------------------------------------------- 1838bd6 | Implojin | 2024-11-15 15:08:45 -0600 Fix crystallizing bolt fragility ordering (Flugkiller, Ge0ff) Crystallizing beams were previously applying fragile before they calculated their initial hit damage, meaning that their listed in-game description significantly undersold their max damage, which was misleading and surprising to players. Here we tone down the initial hit damage of this beam significantly by fixing it to apply fragile after the hit when cast on the player, similar to our handling of BEAM_ACID corrosion. TODO: Should any other beam effects also be reordered to apply after the hit? -------------------------------------------------------------------------------- 559d583 | DracoOmega | 2024-11-14 17:43:19 -0330 Tweak foxfire monster description The part about it being able to injure friendlies hasn't been true in years. -------------------------------------------------------------------------------- d02de94 | DracoOmega | 2024-11-14 17:43:18 -0330 Don't let foxfires drag around enemies who cannot move Due to a misordering of checks in _mons_can_displace, monsters were able to swap with a hostile foxfire even if they were bound, paralyzed, caught in a net, or several other things. This had the apparent effect of looking like foxfires were 'pulling' this enemy towards them sometimes, as they hit it. The whole 'enemies can freely swap into hostile foxfires' thing is a little weird when the player cannot do anything of the sort. I guess the idea was to prevent them being used to body-block enemies (since instead of wasting a turn swinging at the foxfire, the monster will still be able to step forward where they wanted to go), and removing this *would* be an earlygame buff to the spell. But I wonder if the player should also be unobstructed by them, since marshlight health is set so high that you cannot practically injure them anyway. A question for another day... -------------------------------------------------------------------------------- 4d9b5d0 | DracoOmega | 2024-11-14 17:43:18 -0330 Don't have hostile marshlights sometimes fly in the wrong direction Or rather: despite being 'projectiles' shot by a will-o-wisp, marshlights could fail to even notice the player after spawning and wander away while looking confused (especially if the player had high stealth.) Instead, have hostile foxfires simply inherit the caster's foe. -------------------------------------------------------------------------------- 6786cf2 | DracoOmega | 2024-11-14 17:43:18 -0330 Set MG_AUTOFOE targets upon monster spawn, instead of later This should hopefully make the process slightly less brittle by *immediately* setting an MG_AUTOFOE monster who finds a foe to BEH_SEEK instead of relying on it happening later. (This might render the previous commit unnecessary, but it might still be relevant for homing in on a target only notice *after* spawn.) -------------------------------------------------------------------------------- 80d639d | DracoOmega | 2024-11-14 17:43:18 -0330 Try to prevent foxfires from sometimes failing to move towards enemies If the player cast foxfire with the only hostile targets at the edge of their vision, it was possible for some foxfires to spawn too far away from this enemy to see it themselves. Crawl generally handles these situations by using the player's vision to pick foes for summons, but for exploding allies *in particular*, their target would not be properly set on spawn, since this seems to be done via an ME_ALERT event. This meant that there was a small chance that the foxfires you spawned would just run off in a random direction and disappear, despite there being an obvious target for them. Removing the check this commit touches altogether causes foxfires to cluster nicely next to the player and follow them around if no enemies are in sight, allowing you to 'pre-fire' a bunch of them in advance of an incoming enemy, which I'm not sure is great gameplay for this spell. But this smaller change seems to at least *mostly* fix the aforementioned issue (even if it feels like a bit of a band-aid). -------------------------------------------------------------------------------- 6bca15c | DracoOmega | 2024-11-14 17:43:17 -0330 Re-enable certain animations on webtiles after 10 years These were disabled by c562a60e928ebbb . It's unclear what technical issue might have caused them not to function properly at the time, but they seem to work without issue now, and it seems a shame for webtiles players not to have the fancy banishment entrance animation. (Also, without it, there were complaints that the Xom bazaar entrance was jarringly abrupt.) -------------------------------------------------------------------------------- be89f89 | Implojin | 2024-11-14 10:02:18 -0600 Fix a purple draconian Ru sac will crash https://underhound.eu/crawl/morgue/ZingZang1235/crash-ZingZang1235-20241112-1840 40.txt What happened here was that first, the player took Ru sacrifice will, granting an innate MUT_WEAK_WILLED. Then, at XL7, they became a purple draconian, and the levelup mutation code tried to grant them an innate MUT_STRONG_WILLED. This caused the loop in perma_mutate() to assert, because there was an implicit assumption there that we wouldn't try to grant conflicting innate mutations. To workaround this, here we prevent granting a species mutation on levelup (!) if a prior conflicting innate mutation exists. This really shouldn't be happening, but as we've seen, continued expansion of Ru sacrifices and species mutations (and now Makhleb marks) over time makes it increasingly likely that someone will inadvertently add conflicting innate muts which will need to be handled. These conditions could have theoretically triggered an assert for a long time, but as far as I can tell, the conditions to actually trigger this bug were introduced in 02fa12cfa58b when purple Dr gained strong-willed. This commit therefore shouldn't need to be backported further than 0.32. I've also added an explicit assert here to maybe save some future devtime in tracking this down, if it reoccurs through an alternate (non-levelup) call to perma_mutate() in the future. -------------------------------------------------------------------------------- 37b12fa | Implojin | 2024-11-14 09:00:36 -0600 Fix two clua make api errors This should once again be working properly. Would be nice to get doc.dcss.io updated at some point. -------------------------------------------------------------------------------- 4d20f59 | Implojin | 2024-11-13 09:00:43 -0600 Dedup invocations manual acquirement (Darby) Here we dedup some code that's being checked in invo_skill(), and also permit invocations manual acquirement under GOD_NO_GOD with the reasoning that this might affect future god choice. We also block this acquirement for demigods, as it will never be useful for them. -------------------------------------------------------------------------------- 661e094 | Implojin | 2024-11-13 03:47:39 -0600 feat: Add player torment immunity info to clua Here we expose player torment immunity as a clua function, you.torment_immune(). Players have occasionally asked for this info to become available in clua, so here it is. Internally, this just wraps player::res_torment(). Our C++ handling of the various torment-affecting statuses is mildly messy, but I'm not touching any of that here. -------------------------------------------------------------------------------- a8252ba | regret-index | 2024-11-13 01:53:01 -0330 Some more new specific spell effect tiles A bunch of these were produced as side-effects or add-ons for impending Forgecraft spells that can also just be added in advance for other spell effects. In particular, I'd like to make partially-resisted blasts more visually distinguished from regular blasts in general, and this should be a reasonable start; splitting off Flash Freeze and Chain Lightning would be next if I had ideas for either. Sources: * Wand of Warping's blast: A CC0 slash vfx by Cethiel. * Iceblast and Seracfall and Glaciate: Denzi's old LCS icon. * Magma zaps and Fire Storm: Denzi's old zap effects and lava tiles. (I'd like to reorganize dc-misc.txt entirely and make tileidx_bolt solely fall on spell sources rather than colour + string matching, but I'll wait until after Forgecraft lands to slightly reduce the number of merge conflicts, since it's not greatly pressing to do either.) -------------------------------------------------------------------------------- 6419177 | Implojin | 2024-11-12 09:43:09 -0600 Add Lici to the credits Thanks Lici! -------------------------------------------------------------------------------- c977fbf | Implojin | 2024-11-12 09:25:31 -0600 Remove some obsolete Ru code Following e16e337a13, SIZE_SMALL species can now use staves one-handed. -------------------------------------------------------------------------------- e16e337 | LiciTheCrawler | 2024-11-12 09:20:50 -0600 1h enhancer staves for small species Enhancer staves are currently two handed for Ko and Sp. I feel like it mostly catches people off guard and doesn't matter much as far as their power level goes. It might be worth taking a look at other stuff since it feels like there is little reason behind what is two and what is one handed for small species. -------------------------------------------------------------------------------- 3712c6d | David Lawrence Ramsey | 2024-11-11 08:09:48 -0600 Add another mythical creature to artefacts. -------------------------------------------------------------------------------- fd16a8b | Nikolai Lavsky | 2024-11-10 16:49:53 +0300 text: update the description of Bolt of Light This wand spell doesn't confuse the player anymore. -------------------------------------------------------------------------------- 6a9379c | Aliscans | 2024-11-10 12:24:04 +0000 Use more nouns when a boulder pushes something into the unknown. Brom's Barrelling Boulder can push monsters into terrain you haven't seen. This created a message such as " Your boulder crushes the orc against and falls apart!" as feature_description_at() returns an empty string for unknown terrain. Replace the empty string with "something" for that message. -------------------------------------------------------------------------------- 75134b2 | gammafunk | 2024-11-09 13:03:51 -0600 Fix the CAO build by using std::set::insert() It seems that CAO's STL doesn't support std::set::emplace(). -------------------------------------------------------------------------------- f801aa8 | gammafunk | 2024-11-09 02:04:32 -0600 Fix mapstat/objstat initialization issues This commit fixes a crash due to mapstat/objstat not resetting seen unrands between iterations. Once all 8 octopus king rings had been generated from previous iterations, the first iteration that attempted to generate another octopus king ring would cause a crash. Even if the crash didn't happen, objstat wasn't generating unrands correctly across iterations. To fix this, I've made mapstat/objstat use a centralised dgn_reset_player_data(), which is a function formerly called dgn_flush_map_memory() that was used by lua tests. This function covered all resets mapstat/objstat was already doing as well as those it was missing. It was missing one reset for item sets, which I've added. Use of dgn_reset_player_data() reduces the number of places where we have duplicate player data reset code from three to two; hopefully at some point we can reduce this to one. Additionally for mapstat/objstat, we call initial_dungeon_setup() to get a more centralised and complete initialisation of dungeon setup that includes setting up Ecumenical Temple maps. I've also rename the dlua function dgn.clear_data() to dgn.clear_persistant_data() for clarity and consistency with another related dlua function. -------------------------------------------------------------------------------- 0d2c7b6 | Nikolai Lavsky | 2024-11-08 15:34:55 +0300 text: update the description of Trog's wizardly items conduct Troglodytes can safely use pain-branded weapons now, but a wizardly item like the sphere of Battle will get them into trouble. -------------------------------------------------------------------------------- 9556e82 | Nikolai Lavsky | 2024-11-08 13:19:26 +0300 fix: don't let pain weapons enable Necromancy training under Trog Even though followers of Trog can use pain branded weapons since 9c3d1c461, they get no benefit from training Necromancy. So training this skill is not only harmful, but also useless for them. -------------------------------------------------------------------------------- f847e8a | David Lawrence Ramsey | 2024-11-08 01:24:37 -0600 Unbrace. -------------------------------------------------------------------------------- 832354d | David Lawrence Ramsey | 2024-11-08 01:20:22 -0600 Fix missing message when all gems are collected. It wasn't properly accounting for gems in branches that weren't generated in a given game (Swamp, Shoals, Snake Pit, Spider's Nest). -------------------------------------------------------------------------------- c96b193 | brandon s allbery kf8nh | 2024-11-05 19:17:29 -0600 work around crash in actor::knockback https://cbro.berotato.org/morgue/sjaakdevlaming/crash-sjaakdevlaming-20241006-01 4359.txt Passive retaliation killed the caster of a force lance before knockback could occur; since the caster's position was long gone by the time actor::knockback finally got called, there is no position to knockback away from any more, so just return false. [Committer's notes: DracoOmega mentioned a preference for trying to preserve knockback direction here even if the knockback agent was dead, but as that commit hasn't yet happened, I'm merging this, since it should fix a recurring segfault. Closes #4077.] -------------------------------------------------------------------------------- 559140a | David Lawrence Ramsey | 2024-11-04 08:09:13 -0600 Reword Brilliance's description. So that it only refers to Yredelemnul by name, as is done elsewhere. -------------------------------------------------------------------------------- 2694494 | Nikolai Lavsky | 2024-11-04 15:03:42 +0300 fix: adjust conditions for activating skill training (dilly) Currently, the activation of skill training has a few false positives and false negatives: * Artefact rings and amulets with +Blink/+Inv don't activate training of Evocations. * Weapons and staves with evocable abilities enable training of Evocations even if you can't use such items. E.g., carrying an artefact GSC with +Blink does that even if you're a kobold or felid. * Artefact talismans with +Blink don't activate Evocations training. * An active talisman doesn't enable relevant skills unless you have it in your inventory. So evoking a talisman from the ground doesn't activate training of Shapeshifting. * Shattering a cursed item under Ash doesn't deactivate training of corresponding skills. This commit fixes that and refactors the relevant code a bit. Thanks to dilly for reporting this! -------------------------------------------------------------------------------- 381ce9d | regret-index | 2024-11-02 21:28:10 -0230 Don't display doubled vigour fading messages out-of-los (Implojin) -------------------------------------------------------------------------------- 4b1f6b9 | David Lawrence Ramsey | 2024-10-30 19:14:38 -0500 Fix typo. -------------------------------------------------------------------------------- b28a76a | Nikolai Lavsky | 2024-10-30 23:31:58 +0300 refactor: tweak some unrand staves-related code Both UNRAND_ASMODEUS and UNRAND_DISPATER are no longer staves. Also, the former has a passive effect now, which doesn't depend on Evocations. -------------------------------------------------------------------------------- 7c11dcb | regret-index | 2024-10-30 17:55:22 -0230 New Xom action: light webs on fire On one hand, it's what a lot of games that aren't Crawl would allow the player to do anyway, and Xom already has a noticeably fiery action. On the other hand, the idea that in the entirety of Crawl, that only Xom can rarely decide to do this, is probably funny enough in and of itself. Much like Snakes to Sticks, this is meant to provide a Xom action that changes according to the branches one gets in a game- and somewhat usefully, there's only two monsters in Spider's Nest with any fire resistance. Unlike Snakes to Sticks, this comes with a fair bit less complexity- it just removes all webs in sight (and frees anybody stuck in a web), then creates fire clouds where those webs were. It provides a little more ease of movement for the branch in a flavourful fashion without being too intrusive, and continues the trend of Xom uniquely warping the Dungeon's terrain on a whim. -------------------------------------------------------------------------------- 8dadf6a | David Lawrence Ramsey | 2024-10-30 13:04:49 -0500 Add missing Divine Shield status description. -------------------------------------------------------------------------------- 8d75f24 | Sean Dewar | 2024-10-29 19:10:16 -0500 Add missing space to Horror status light text Makes it consistent with other such status light texts, and should fix the WebTiles hover tooltip showing "No description found" despite a correct description existing in `dat/descript/status.txt:458` (though I couldn't locally test that; assumed from looking near `tileweb.cc:1213` and `webserver/game_data/static/player.js:447`). -------------------------------------------------------------------------------- 14434f1 | Implojin | 2024-10-29 12:45:07 -0500 Add adelrune to the credits -------------------------------------------------------------------------------- 10d9a84 | guillaume | 2024-10-29 12:06:25 -0500 Apply location effects to flank and swoop Before this commit, flank and swoop attack flavours would not trigger traps and trap-like effects like sigil of binding when moving the monster. I haven't found an issue for this but I stumbled upon that bug while feeling clever about a ufetubus getting sigil'ed. The ufetubus didn't get sigiled as I expected. Here we also let sigil of binding prevent monsters from flanking or swooping: without this change, adjacent bound ufetubui would still be able to flank the player. [Committer's notes: Squashed. Edited commit message. Closes #4101.] -------------------------------------------------------------------------------- 5f200fa | regret-index | 2024-10-28 18:15:47 -0230 Minor vault review, mostly aesthetics edition Worthy of note: * Vaults entry vaults now consistently all don't take up the large vault slot on the floor, so late D has more odds to place more interesting vaults to thus stand out a little bit more to justify itself. * wizlab_eringya has grass floor tiles again, as was accidentally removed in 5f48996. * lightli_orcish_oven is downweighted in V, since vaults_rooms are used substantially more thoroughly than otherwise and we've gotten plenty of vaults for V since 831329d. * nicolae_yak_garden has been moved from an incredibly deep depth (originally meant to be half way through Lair, now pushed upwards as Lair has picked up more threat) and has a Crypt version to use the old lich garden flavour when it was in Zot before 8ac13c1 moved it to Forest (followed by it eventually moving it to Lair). * serial_glass now has a 1/4 chance when placing in Depths, Elf, or Crypt to use different (but still reserved) tile colourations, to make it a little nicer seeming later on. This also makes a handful of generic glass vaults sometimes use those different colours, but honestly, it's fine to throw around more tile changes visuals-wise compared to a lot of other accumulated vaultmaking sins. * "you.depth_fraction() < 1" checks in vaults for being on floors before the end of a branch have been replaced with checks for "you.depth() ~= dgn.br_depth(you.branch())", which is longer but actually directly states its usage intent and makes lua usage more consistent for future guide-writing purposes. -------------------------------------------------------------------------------- 2e8f5e9 | DracoOmega | 2024-10-26 04:51:29 -0230 Fix monsters sometimes following the player into Duels (particleface) MF_TAKING_STAIRS is set on nearby monsters when the player starts to take a stair. This flag is used at the end of the stair delay to determine what monsters are eligable to follow. It is cleared from non-following monsters when the player leaves the floor, but was *not* cleared when the player's attempt to take the stairs was interrupted (eg: by constriction, trampling, etc.) Oka's Duel ability enters the arena via code that handles normal stair transitions. It does not *set* the MF_TAKING_STAIRS flag, but it still respects it on any monsters which already had it. Thus it was possible, if the player took the stairs, was interrupted, and then used Duel, to pull in all the monsters that *would* have followed them across the stairs into the Duel. This was a rather mysterious bug to deduce and I'm still not 100% convinced this solves all instances of Duel stowaways, but it does solve at least a solid chunk of them. -------------------------------------------------------------------------------- 9f708d3 | DracoOmega | 2024-10-26 04:51:23 -0230 Apply some attack flavours against dead monsters Monster attack flavour handling was skipped if the initial hit killed a monster's target. Most of the time this was sensible (no point in freezing something that is already dead!), but a handful of attack flavours had effects that reached beyond just the target they were attacking. For example: -Broodmothers/Obsidian Bats couldn't summon things off killing blows -AF_VAMPIRIC monsters couldn't drain HP from killing blows (notably: the vampiric weapon brand *does* work on killing blows. -Shadowghasts don't lose their invisibility on shadowstabs that kill their target (allowing them to reuse it immediately) -AF_SWARM, AF_BLOODZERK, AF_BLINK similarly don't work properly. This commit changes a handful of such attack flavours to work even if the defender is dead. -------------------------------------------------------------------------------- 1faad65 | tuohy | 2024-10-25 23:36:33 -0700 correct period to comma in wand of light description -------------------------------------------------------------------------------- 1108719 | regret-index | 2024-10-24 21:59:46 -0230 Reorganize dc-wall.txt This file is a complete mess, depositing branch walls all over the place and with two awkward divisions of intermingled rock and stone tiles before an end point of glass / crystal / metal splits. This shouldn't have any visible effects in-game, but it should make adding new wall tiles reasonably more consistent through ordering and sectioning. Sections-wise, everything has been split into: * The default wall tiles (+ colour variations) for each main wall type, * then branch tiles according to their rough depth, * then portal tiles, * then vault tiles. This also consistently puts features in those given sections into split-ups of rock, then stone, then other features, rather than mixing the former two. It also adds comments over tiles for branches and portals whose tile file names don't contain their given location in their name. Altogether, this should hopefully significantlly help keep the file more organized and help others look up tiles' places and uses for vault deployment. -------------------------------------------------------------------------------- 6879795 | regret-index | 2024-10-24 21:59:46 -0230 New Makhleb Mark invocation icons (Sastreii) Undeniably striking art, each of them. -------------------------------------------------------------------------------- b0ae30d | regret-index | 2024-10-24 21:59:45 -0230 Adjust Xom polymorph checks (Mike) 5cebcaf adding in a condition to avoid polymorphing super early bats over arrival / altar vault liquids also accidentally screwed up the logic checks to properly exclude firewood, the non-living, or the undead as long as one was above XL 3. This has been fixed and tweaked upwards to require being above XL 4, also preventing Xom from polymorphing regular firewood plants and fungi entirely. Xom could previously still polymorph early oklob plants into thorn hunters or starflowers or shambling mangroves, though, (and could make sleepcaps turn into ballistomycetes to sporulate with extremely little warning), which is now also softly excluded from completely destroying early chaos knights (by refusing to polymorph plant holiness monsters period unless one's above XL 8). -------------------------------------------------------------------------------- 2653504 | regret-index | 2024-10-24 21:59:45 -0230 Place a missing midnight gem (#4097) Accidentally broken in ce7c55b. My apologies. -------------------------------------------------------------------------------- e21b1dd | regret-index | 2024-10-24 21:59:45 -0230 A variety of remixed extended tiles All of these branches lacked their own unique tile appearances beyond a few recolours of default tiles. With the bulk of extended running heavily off of theme and novelty more than about replayable variety, it helps Pan and the Hells each to have their own unique tiles for both the sake of external vault flavour and for the flavour of each of those branches. (I also have some ideas and work done on new Zot tiles in this capacity, but it required each branch to technically have its own tiles first.) * Pandemonium stone: A mix of Denzi's wall_relief, wall_bars, and Porkchop's stone_dark walls recolouring Denzi's stone_grey walls. * Mnoleg stone variation: A mix of Denzi's wall_relief, wall_bars, and unrecognizably-warped old very ugly thing tile. * Gloorx Vloq stone: A mix of ontoclasm's Crypt metal, plus Sastreii's Snake stone and Depths vault floors. * Lom Lobon crystal: A combination of heavily edited CC0 art by NettySvit and cynicmusic. * Cerebov metal: A mix of Heavily edited CC0 art by Surt and unrecognizably-warped balrug tiles by Sastreii. * Gehenna stone: A mix of ontoclasm's Labyrinth stone and unrecognizably-warped pit fiend tiles by Denzi. This also comes with some minor adjustments to a number of vaults to deploy these tiles a bit more (for various demonic contexts), and to avoid using them in holy_pan while that's still around. Should be a little easier to make Pan decor any visually interesting, at least. -------------------------------------------------------------------------------- d854694 | Kate | 2024-10-24 22:22:23 +0100 Remove a speech line -------------------------------------------------------------------------------- bacc2b0 | Kate | 2024-10-24 22:22:10 +0100 Adjust some more Yredelemnul messages To properly refer to Yredelemnul only by name. -------------------------------------------------------------------------------- 48f6307 | Kate | 2024-10-24 22:12:08 +0100 Clarify some Yredelmnul ability descriptions -------------------------------------------------------------------------------- 41421e2 | Nikolai Lavsky | 2024-10-24 16:21:14 +0300 text: tweak a few more descriptions To match the "Does X" format. Also, remove a stray space. -------------------------------------------------------------------------------- f2f3612 | Kate | 2024-10-24 00:33:11 +0100 Adjust some god descriptions To match the other descriptions in referring to the player as "the worshipper", "the follower" etc, rather than directly as "you". -------------------------------------------------------------------------------- 9ae0b0c | Kate | 2024-10-24 00:29:17 +0100 Adjust some ability descriptions To match the format of other abilities ("Does x" rather than "Do x"). -------------------------------------------------------------------------------- c4cfdf5 | Kate | 2024-10-24 00:25:46 +0100 Reword some god messages and descriptions By convention, Crawl gods aren't gendered, and they are referred to directly by name only (not by singular they pronouns). Adjust some speech lines, descriptions and other messages to match this. -------------------------------------------------------------------------------- e5f5f5b | Kate | 2024-10-23 01:14:20 +0100 Fix Ignition exploding on projectiles -------------------------------------------------------------------------------- 2f91ea3 | Kate | 2024-10-22 23:17:35 +0100 Display Imbue Servitor's delay on the ability menu -------------------------------------------------------------------------------- 361589c | Kate | 2024-10-22 18:02:12 +0100 Fix Ash bondage not updating with slot-blocking muts Bondage level was rechecked if an equipped piece of equipment was forced off due to a mutation, but not if you didn't have anything equipped in that slot already. However, it should still be rechecked in those cases because piety scales based on the number of available slots (so if, for example, a player has every slot filled except one, and then that uncursed slot is blocked by a mutation, they should then reach max piety). -------------------------------------------------------------------------------- d558c92 | Kate | 2024-10-22 18:02:04 +0100 Australianise some spelling And fix a typo. -------------------------------------------------------------------------------- 6938ffb | Kate | 2024-10-22 16:30:54 +0100 Fix some Foxfire messaging Prevents foxfires from printing "Your foxfire is destroyed!" messages when hitting something, and correctly uses their timeout message on expiry. -------------------------------------------------------------------------------- 6727bf9 | Nikolai Lavsky | 2024-10-22 17:58:03 +0300 feat: make miasma-breathing monsters less picky about their targets There doesn't seem to be one explicit and consistent policy for player resists affecting monster AI, but most cloud spells don't check even species-level resistances. A catoblepas would happily breathe calcifying dust at a gargoyle or djinni, swamp dragons don't mind breathing poison at a mummy, having poison resistance or even poison immunity doesn't affect swamp drakes' AI too, and only death drakes absolutely refuse to waste turns breathing miasma at anyone with rMiasma. This includes not only mummies, ghouls, and bloodless vampires, but also players who wear the Cigotuvi's embrace and players in statue, storm, death, or wisp form. Death drakes share this spell with a few extended monsters, so this commit makes them all ignore rMiasma when casting Miasma Breath or Death Rattle. -------------------------------------------------------------------------------- a0fd5bc | Implojin | 2024-10-21 19:49:30 -0500 docs: deprecate some mantis links Players haven't been able to create accounts on mantis for many years, it doesn't seem helpful to continue to link mantis in our in-game FAQ. I've also updated a few links here to our currently active community feedback locations: github issues, github PRs, and the roguelikes discord. -------------------------------------------------------------------------------- 90227b9 | DracoOmega | 2024-10-19 12:59:53 -0230 Don't have inner flame monsters explode on timeout (dilly) While this is appropriate behavior for things like ball lightning, inner flamed summons that expire should just disappear quietly. -------------------------------------------------------------------------------- 3d4140c | regret-index | 2024-10-18 23:59:00 -0230 New requested monster spell icons (pianoman523) Spells that get new icons: Blink Allies Away, Blink Allies Encircling, Dimensional Anchor, Flash Freeze, Mesmerize, Resonance Strike, Vitrify, and Vitrifying Gaze. Most of these have come with some edits and tweaks to the initial submission. The Blink Allies [Encircling | Away] icons also uses the old ally heart icon drawn by ontoclasm, and the Resonance Strike icons also uses the Leda's Unmaking tile by Sastreii. (Also, removed an excess placeholder Hoarfrost Cannonade tile left in a different folder for now.) -------------------------------------------------------------------------------- de4f08d | regret-index | 2024-10-18 23:32:31 -0230 Some more preliminary tiles, triton edition Composited from other tiles to fulfill differentiating the large number of absent mutation and spell icons, as is usual: * Mertail mutation: ontoclasm's mermaid statue. * Siren Song, Avatar Song: CanOfWorms' Fugue of the Fallen icon, ontoclasm's merfolk siren / merfolk avatar water tiles and dancing weapon status icon. -------------------------------------------------------------------------------- 790fefb | regret-index | 2024-10-18 18:08:17 -0230 Don't try to place blind dancing weapons (#4089) nicolae_gammafunk_elf_defective_weapons_storage tries to make one set of defective dancing weapons blind, but nonliving creatures can't be blinded in the first place, losing the defective weapon flavour that excuses a runed door box from placing ~8 or more dancing weapons. (The vault's own comments mention trying out confusion instead, but this will just make them kill everything else in the vault.) To fit the defect theme of being slow or covered in acid, and to follow the bug report's suggestion, they are now vitrified instead so they will effectively die much faster. Closes #4089. -------------------------------------------------------------------------------- 6dbb4b3 | regret-index | 2024-10-18 17:41:20 -0230 Add more to the Abyss feature sanitizing list This list is used for when banishment changes one's immediate terrain surroundings from the prior branch into the Abyss. (Honestly, we could probably do with more of the reverse of Abyss corruption here and have the floor tiles of given old branches show up in the Abyss both on immediate banishment and in the floor copying so people can more easily notice that the Abyss is mirroring places besides Swamp.) * Decorative floors rely on vault redefinitions and thus show up as question marks asking for a bug report otherwise. They now are just replaced with plain floor instead for now. * The Orb Dais was duplicated by banishment (and is itself still otherwise unchanging in the process), and now is replaced by a statue instead. * Runed doors not set by vaults (and instead by the Abyss copying seen and generated floors) tend to not actually lead to anywhere or serve their purpose at all, which is flavourful but also confusing for the heavy usage of runed doors as a highly mechanical matter. They now are replaced by regular clear closed doors instead. (Abyss recently got new flavour with the eye fountains, anyway.) -------------------------------------------------------------------------------- 803e90b | regret-index | 2024-10-18 17:14:10 -0230 New leather armour tiles (Sastreii) Good updates for all of the base leather armour tiles (mundane, good_item, and randart), as well as a new tile for Cigotuvi's Embrace. (I also moved the most easily reusable old variation to the unused/armour directory and deleted some quite old tiles in exchange.) -------------------------------------------------------------------------------- 551f775 | DracoOmega | 2024-10-18 15:09:12 -0230 Fix Gavotte not being aimable at the level boundary (Drazool) The spell never directly affects the target cell anyway, and you can already cast it against any other type of wall just fine (if your objective is to move things besides yourself). -------------------------------------------------------------------------------- 0442bec | DracoOmega | 2024-10-18 15:06:03 -0230 Fix pillars of rime not being LRD-able (Drazool) -------------------------------------------------------------------------------- 49991a7 | DracoOmega | 2024-10-18 15:02:56 -0230 Properly use the MONSTER_TIMEOUT channel for explosion poof messages (Since this is intended to replace the normal poof message when inner flame blows up a summon, for instance.) -------------------------------------------------------------------------------- 14ba1b9 | DracoOmega | 2024-10-18 15:02:14 -0230 Fix some weirdness with blazeheart core explosions (Ge0ff) The core itself was now accidentally treated as abjurable, resulting not only in some odd messages about its residue disappearing in a puff of smoke (and it itself disappeared in a puff of smoke), but *actually* making smoke on its own tile, which prevented the flame clouds from ever being placed there. -------------------------------------------------------------------------------- a278277 | DracoOmega | 2024-10-18 14:59:59 -0230 Don't make blazeheart golems explode on timeout (particleface) -------------------------------------------------------------------------------- 8cbeda2 | RypoFalem | 2024-10-18 05:15:08 -0500 Extend single-day holidays to three days. Since servers use UTC to determine the time, Halloween evening in the Americas doesn't count as Halloween in web games. Extend Halloween and April Fool's to 3 days so it's covered by all time zones. The winter holidays already last over 2 weeks so remain unchanged. -------------------------------------------------------------------------------- 2bbf05e | regret-index | 2024-10-18 03:12:17 -0230 Revive and heavily revise some removed vaults This isn't meant to be a completely comprehensive project, but a continuation of a loose experiment of mine to help with various always pressing desires (like V vaults, D:$ vaults, or Depths:$ vaults) in line with d25c09d's own revivals. * dhfh_tomb_1: Removed in 8598196 for its Norse flavour of jotunn and cursed undead also just being the same contents as lategame enemies anyway (and also having very little nested-portal interest), this has been revived as a vault for V mixing those together with thematically -appropriate preservers, gargoyles, and new decorations to try to hit its mourning-crypt concept once more. * metal_show: Removed in 1042b88 for using very harmless enemies and uniques quite late into the game as a wave of miscellaneous fans watching a metal concert in a game with no instruments. This has been revived back in its V position with a heavy upgrade in threat using monsters already present in V, and further heavy redecoration. Even if it mostly comes off as a nightclub coven, that's still something of reasonable interest for a vault. * wizlab_ozocubu: Removed in 9c11f61 for being incomplete before initial wizlab testing, as well as filled with comically underpowered enemies for its depth, and then never followed up upon due to the great design difficulty of it not overlapping too heavily with Ice Caves. Following on its initial use of skeletal warriors to vary up the opposition, I've converted the provided layout into a cavern's icy castle with various living and dead warrior options usually equipped with cold gear, and deploy it through a large number of branches for another themed V vault, a Zot stair vault hitting on a neglected resistance there, and a D:$ / Depths:$ vault. -------------------------------------------------------------------------------- b65ea80 | Implojin | 2024-10-17 20:30:45 -0500 Fix inhibited regen infoleaking invis mons Previously, the inhibited regen mutation effect was being applied while any monster was nearby, regardless of whether the player knew that it was there. This was technically an infoleak, and also led to messaging that players found confusing: E.g. with a nearby unseen horror, players couldn't rest, and they weren't being informed why in the combat log. This commit changes the behavior of inhibited regen to only take effect with visible nearby monsters: there shouldn't be any issues with this from a gameplay perspective, and this fixes both the infoleak and the messaging. Fixes #4018. Closes #4064. -------------------------------------------------------------------------------- 3dacd37 | Implojin | 2024-10-17 00:48:52 -0500 Clarify spellcasting tutorial phrasing (Noctsol) We had a report from a player that the `z?` message in the spellcasting tutorial wasn't very clear (is the game unsure about what the command is?). This commit tries to clarify things by breaking up that message, into separate memorisation and quivering tutorial tiles. -------------------------------------------------------------------------------- 3973d0e | Medrano83 | 2024-10-15 22:15:46 +0200 Fix the Android default screen settings This value error makes the game crash on some devices when starting the game in landscape mode. Thank you to the player from Indonesia who reported the bug. -------------------------------------------------------------------------------- 0e9ad9a | Implojin | 2024-10-14 22:12:27 -0500 Remove an outdated slime shaft veto (gammafunk) Previously, player shaft destinations were specifically vetoing target positions with adjacent slime walls. This check was added in 61e6210cf4, to prevent shafts in slime from dealing damage to the player (and possibly killing the player) before they had a chance to react. That reasoning was obviated in e3182b2870, when slime walls were reworked to no longer deal damage. Preventing the player from being shafted to a position that corrodes them is less compelling reasoning; let's allow it again. This reverts commit 61e6210cf4b648636163e9fe7f42c1eae1754a39. -------------------------------------------------------------------------------- 921eff9 | regret-index | 2024-10-14 22:26:30 -0230 Replace the V / Trove rock tiles These rarely-seen rock tiles have always been somewhat gaudy in their highly-saturated fashion from back in the very first days of Crawl having tiles, and don't particularly obviously suit either of their uses. I'm fusing them with the equally-old and currently quite rare wall_brick_gray (currently used in one Spider end, one Shoals end, one Kiku vault, and one bazaar option) to present a sort of "flaking golden bricks stained very lightly with blood" look, which should hopefully work out better in terms of resembling regular building material while still looking different from most other places' rock tiles. -------------------------------------------------------------------------------- 0bf8024 | mumra | 2024-10-14 08:02:16 +0100 Properly remove Animate Skeleton Animate Skeleton was nominally removed in 613369f but the removal was somewhat incomplete. The spell description was left in a number of translations (just removed in en), the spell tile still remained, the spell data was still present and not made into an AXED_SPELL, the enum was not marked for TAG_MAJOR_VERSION deletion, and (consequently) it was not added to removed_spells. So to avoid potential confusion and errors I have done the above. I also added a fixup in tags.cc so very old Necromancer saves should now receive Soul Splinter instead (which it was ultimately replaced with). -------------------------------------------------------------------------------- 06e22a5 | regret-index | 2024-10-13 00:58:34 -0230 Fit more vault.lua includes into the .des files Crawl rebuilds got somewhat tempermental about the .des caches after 5f48996 and ce7c55b made the bulk of files rely on dlua/vault.lua functions to redefine statues or floor- this should hopefully should fix up such issues by putting the crawl_require line into all files that use any of the three redefinition functions. -------------------------------------------------------------------------------- 8334a9b | regret-index | 2024-10-13 00:48:28 -0230 Adjust some spell tiles * Removed the Fake Rakshasa Summon icon, since the old Rakshasa summon behaviour is extremely unlikely to return and current Rakshasas split without casting a spell. * Made a new quick placeholder Hoarfrost Cannonade tile using Sastreii's recent hoarfrost cannon submissions. Spells like this one meant for the upcoming school may need a new full revising in time to get them closer to one another in colour schema and consistent tile appearance, but this should most likely wait until the initial spells are added for the school. * Repurpose a Hoarfrost Cannonade tile submission that lacked any visible cannons to instead work as Hoarfrost Bullet and Legendary Destruction icons, with the former also using ontoclasm's Throw Icicle icon. * Trim the accidental black border off of the Gell's Gavotte icon. -------------------------------------------------------------------------------- 6874458 | regret-index | 2024-10-13 00:48:28 -0230 Heavily rewrite Xom's action picking code + subsequent odds Xom's twin action-picking functions (one each for good and bad actions) were legendarily bad code that was next to impossible to properly assess the odds of any given action or change such in any meaningful way. (One could run the wizmode Xom simulations list to get a very rough idea of the former, but the latter was heavily bound by its implementation.) This rewrite replaces massive waterfalls of condition + roll checks to instead just use a list of weights and lambdas, to make it much easier to parse and adjust for any future Xom changes, as well as to minorly tweak Xom's overall effects with such newfound capabilities. This also comes with some implementation changes: * Xom will only polymorph allies with non-zero tension, so Xom will no longer see the player resting and decide to replace the regenerating single long-term ally with a random no-longer-regenerating ally. * Tension checks are no longer heavily fudged between actions, and now weapon animation, multiple ally summoning, mass charm, and swapping door states all require more than next to no tension to happen. * Most noticeably: Xom's non-boredom mood no longer de-emphasizes the most common effects, for both good and bad effects. Xom's mood has always been one of Xom's weakest design components (in how Xom's inherent lack of reliablity meant particularlly good or bad moods were background announced swings of luck rather than any inherent change). Future goals for Xom in this version are to replace all of Xom's mood levels besides boredom with a visible tension meter, while slicing out the most enemy-annihilating / player-annihilating options into more controlled fashions to try and save a worshipper rather than annihilating individual quokkas or komodos with half a dozen force lances. * Most noticeable out of this is that Xom is marginally more likely to teleport the player into bad situations in a worse mood at no tension, and is more likely to stick to potions and tension spells versus summoning allies or raining down destruction when in a good mood at any meaningful tension. In the total average of Xom moods, action chances shouldn't change by more than a flat 0.1% to happen or 4% proportionally either way with the new math, but even mood evening out the likelihood of actions more often there are a few notable shifts while these initial numbers were being set: * In the good actions list, tension spells and random item gifts are marginally more common (as they're some of Xom's most usefully variable actions in the first place), while detect all, fog, mass halo, and bazaar trips are all less common (the first is quite good these days but has significant fall-off on more completed floors, the second is boring, and the last two work better the rarer they are to see). * In the bad actions list, Xom has less chance to roll nothing and slightly more chance to make idle noise. -------------------------------------------------------------------------------- 701edd8 | DracoOmega | 2024-10-13 00:44:25 -0230 Fix Yred reaping always working (T1-M4T) The code explicitly skipped summoned zombies/spectrals, but since the recent summon refactor, Yred's own zombies counted as such, causing your reaping effect to think you never had any zombies (and thus should have a 100% chance of success). In addition to fixing that, this commit adds an explicit summon type to track Yred-reaped undead more directly. -------------------------------------------------------------------------------- 0a5ed6d | DracoOmega | 2024-10-12 23:54:25 -0230 Fix Elemental Force summons expiring immediately (Autarch) -------------------------------------------------------------------------------- 07456b3 | DracoOmega | 2024-10-11 17:28:07 -0230 Fix tentacles losing constriction whenever they pull something The entire concept behind how starspawn tentacles and snaplasher vines are supposed to work is that they pull the thing that they are constricting. But (since 0.18-ish) due to their own movement, they actually stop constricting the thing immediately *before* they drag it, resulting in confusing message sequences like "The snaplasher vine loses its grip on you. The vine pulls you backwards!" How is it doing that, exactly? This is, of course, because there is a moment in time where the tentacle has moved, but the constrictee has not yet, and thus the constriction is 'invalid'. Conceptually, they're supposed to be moving at the same time, though, so this adds a parameter to actor::moveto and actor::move_to_pos to allow skipping constriction invalidation until after both things have moved. -------------------------------------------------------------------------------- 3382226 | DracoOmega | 2024-10-11 17:28:07 -0230 Don't display tentacle/segments as 'minions' They may internally be treated as summons, but are logically part of a single large creature and probably make sense to display as such. (Solo tentacles created by magic still display as minions, but their segments should not.) -------------------------------------------------------------------------------- 9adc1c5 | DracoOmega | 2024-10-11 17:28:06 -0230 Be a little more specific about summon dismissal on attacking friendlies Use a (hopefully) more correct killer_type and don't fire this for tentacles/segments. Propogating the event to the head should properly handle whether the tentacle monster should go poof or just get angry with you. -------------------------------------------------------------------------------- 9dbd12b | DracoOmega | 2024-10-11 17:28:06 -0230 Fix attitude change propogation for tentacles Changing the attitude of a tentacle head properly adjusted the attitude of its tentacles, but the reverse was *not* true, leading to some weird behavior. If a player (for instance) attacked the tentacle segment of a charmed starspawn, the starspawn would appear to ignore it entirely. (The segment's attitude would be made hostile, but segments are constantly recreated every action, and it would be seemlessly replaced by another friendly one essentially immediately.) But if the player attacked the *tip* of a tentacle, the tip would turn hostile, *but the rest of the segments would not*, resulting in some impressive acrobatics as the tentacle attempted to attack/constrict its own segments. This commit attempts to do a better job of propagating attitude changes back up to the head. Changing attitude directly in wizmode works properly if you do it for tentacle segments, and attitude changes cased by ME_WHACK/ME_ANNOY behavior events called on child monsters will send the same event to the tentacle head itself. This should result in attacks against any part of the tentacle monster being interpreted as attacks against the monster as a whole. -------------------------------------------------------------------------------- 1d54a04 | DracoOmega | 2024-10-11 17:28:06 -0230 Fix a crash on non-damage kills of tentacle segments (staticshock) If a tentacle segment was killed for reasons other than damage, the code in monster_die that attempts to clean up the rest of the tentacle would recursively kill it a second time before the first monster_die finished, resulting in an assert. (Presently this is happening due to a second bug that is considering all tentacle segments to be summons which should be abjured upon taking friendly fire, but it is conceptually possible to trigger this in other ways.) -------------------------------------------------------------------------------- 2156aa9 | mumra | 2024-10-11 05:47:28 +0100 Fix randomness in shield block to-hit calculation To account for shield block in hit %, shield_bonus() was copied to monster_info; however slightly unexpectedly there was a random roll being applied in this method. This meant that for monsters with shields (or an amulet of reflection) the to-hit % would randomly change each time inspected. Additionally the way integer division was used across these methods meant there was some further inaccuracy in the simple average calculated for some values of sh. This change improves the formula a bit; it's still not perfect but definitely better. It also now correctly indicates when a monster's incapacitated status is affecting the shield block, if that monster had zero dodge normally. -------------------------------------------------------------------------------- 6ce201e | mumra | 2024-10-11 05:47:27 +0100 Clean up an unused function call In the past, _player_hurt_monster handled its own death cleanup, but this was changed in 1567df3. Various other incremental changes to the function mean there is nothing hurting the monster *other* than the ::hurt call, and as that now handles any necessary death cleanup this final condition should never be possible to hit. -------------------------------------------------------------------------------- 2cf4ae6 | mumra | 2024-10-11 05:47:27 +0100 Comment cleanup: an already-done constify todo Was apparently already done in 083cf6bb240 -------------------------------------------------------------------------------- 6fe43b3 | mumra | 2024-10-11 05:47:27 +0100 Fix Sniper showing 1% hit chance and bypass shield Improvements to the hit chance display unfortunately introduced a bug when hit chance is AUTOMATIC_HIT, causing the xv to show to hit as 1%. While fixing this I noticed there is a very tiny but still non-zero chance for AUTOMATIC_HIT attacks to be blocked by a shield, due to AUTOMATIC_HIT being treated as a hit roll of 1500. Since this is either slightly unexpected or if intended should be more impactful, it seems easiest to just bypass shield checks as well for something like Sniper. -------------------------------------------------------------------------------- de153c7 | mumra | 2024-10-11 05:47:27 +0100 Correctly describe Canine Familiar cooldown Due to confusing property ordering in duration data, the "You are unable to call your canine familiar" message was only visible in wizmode, and not on the @ screen as intended. -------------------------------------------------------------------------------- e325cd8 | mumra | 2024-10-11 05:47:27 +0100 Remove and clarify a TODO around OOD monsters The comment was inaccurate as the check *can* come out true, so I added an explanation as to why it's there. -------------------------------------------------------------------------------- 41fc793 | mumra | 2024-10-11 05:47:27 +0100 Remove a redundant XXX comment Given ammo no longer really exists, this comment seems to be irrelevant now. -------------------------------------------------------------------------------- c8b311e | mumra | 2024-10-11 05:47:27 +0100 Remove some dud param comments and fix typo The documented params seem long gone. -------------------------------------------------------------------------------- 06a4212 | gammafunk | 2024-10-10 23:40:20 -0500 Add the Abjuration spell to clua monster info Monsters with spells marked with the summon flag get Abjuration the automatically, although only cast with a chance when they would cast a summon spell. This special case has to be handled separately if we're listing a monster's spells. Hence this commit adds Abjuration to a monster's spell list in clua when appropriate. -------------------------------------------------------------------------------- 7f09989 | mumra | 2024-10-11 04:45:44 +0100 Fix directional bias in pool fixup Due to the algorithm modifying tiles as it went, subsequent iterations were based on the new state rather than the original - this resulted in North- and West-facing pools getting affected potentially several tiles deep, while the South and East edges general got just a one tile layer of shallow water, which looked a bit odd and not symmetrical. The adjusted algorithm builds a vector of coords to paint later: however this looked rather too neat as then there is only ever a 1-tile border of shallow water. So I ran a 2nd pass to let the shallow water encroach to 2 tiles deep in places. The probabilities needing tweaking to produce a satisfying organic look that is quite varied. Sometimes the 2nd pass will not run, with a 25% chance, to produce tidier pools and moats occasionally (but not in Lair). -------------------------------------------------------------------------------- 4eba2d9 | DracoOmega | 2024-10-10 17:19:34 -0230 Fix mangrove hornets being marked as 'minions' (Riverefiend) This also gives them not having XP. Additionally, fix summon marking for hornets from mangroves that are themselves summoned (ie: by shadow creatures). -------------------------------------------------------------------------------- 1965517 | DracoOmega | 2024-10-10 16:07:52 -0230 Fix Wucad Mu / Borg wizlab summons being broken (midn8) When summon mgen_data was switched to using aut durations instead of abj degree, vaults which manually created summoned monsters was overlooked. Since it's a bit of a pain to do the per-monster duration randomization in vaultspec, I've made "dur:X" there default to calling summ_dur directly. This means it isn't possible to specify summon duration in aut in vaults (or wizmode monster creation...), which I consider inideal, but this is a reasonable quick fix given how rarely this functionality is used. (This also makes all summoned monsters made by monspec 'actual' summons, which isn't strictly true in theory, but is true for all current uses I know of. Slightly unhappy about this.) -------------------------------------------------------------------------------- 21dfed3 | patrick | 2024-10-09 10:08:52 -0400 Make a scroll shop always ID the scrolls lying around These days, vaults that always place a specific type of consumable will pre-ID that consumable to avoid the need for spoilers. This scroll shop vault, which leaves a few scrolls of noise lying around, somehow missed the memo. So I'm fixing that. -------------------------------------------------------------------------------- 0945138 | Nicholas Feinberg | 2024-10-08 22:06:30 -0700 New Fedhas altar (Sastreii) -------------------------------------------------------------------------------- ac5b87b | Nicholas Feinberg | 2024-10-08 22:06:05 -0700 New plant tiles (Sastreii) -------------------------------------------------------------------------------- 6c17059 | DracoOmega | 2024-10-07 19:20:39 -0230 Fix agent-less monster::was_created_by() always returning false Things likely broken by this: -Qazlal elementals losing their cloud and Upheaval immunity -Lugonu anti-wrath protection not prioritizing wrath summons -Flashing Balestra weapons using the wrong death messages -------------------------------------------------------------------------------- 7c53e13 | DracoOmega | 2024-10-07 19:20:33 -0230 Fix Flayed effect ending upon taking stairs with a ghost (staticshock) The comment for monster_cleanup() was misleading enough that some on-death functions ended up being moved here by 5f5c15f, but this resulted in Flay wearing off immediately if a flayed ghost left the level (including by taking the stairs with the player!) There were some other bugs also, such as earning credit for Beogh Venegance kills by merely taking the stairs with a vengeance-marked target. They didn't even lose the status, so you could dance up and down with the same simple enemy repeatedly to clear a vengeance debt against many other things! (I've rewritten the function comment to hopefully be clearer in future.) -------------------------------------------------------------------------------- 44df65d | Matthew Granstrom | 2024-10-07 14:40:20 -0400 Remove Gell's Gravitas from Nicolae's custom books shop -------------------------------------------------------------------------------- 4438645 | gammafunk | 2024-10-04 18:20:37 -0500 A clua monster method for finding its summoner The crawl UI highlights a monster's summoner in LOS examination mode, but there was previously no way to determine a monster's summoner from clua. This commit adds a summoner_pos() method to the monster info table that returns a pair of LOS coordinates of the monster's summoner. It returns nil if the monster's isn't summoned or it the monster or its summoner are not in LOS. I've copied the summoning monster's mid into the monster_info class and updated the examination mode UI to use this information. This way we have a centralized check for whether the summoner is valid to reveal, at least regardless of LOS concerns. -------------------------------------------------------------------------------- 933e26f | David Lawrence Ramsey | 2024-10-04 12:21:45 -0500 Fix typo. -------------------------------------------------------------------------------- dcf9493 | DracoOmega | 2024-10-04 14:30:22 -0230 Better-document some methods (Ge0FF) -------------------------------------------------------------------------------- 74cecdf | DracoOmega | 2024-10-04 14:28:36 -0230 Fix Pan lords improperly using A/An when coming into view with others ie: "A Plog and a hellwing come into view." (This lead more than a couple players to think they were a weirdly-named ordinary monster and not a pseudo-unique.) -------------------------------------------------------------------------------- 4be0ea1 | DracoOmega | 2024-10-04 13:37:04 -0230 Adjust kill crediting for exploding monsters in general The more I look at crediting in _setup_base_explosion, the more I feel like it doesn't make sense. So now, non-abjurable monsters created by the player always credit the player directly (ie: prisms, ball lightning) and other friendly monsters will credit ANON_FRIENDLY_MONSTER to ensure you get proper XP for them. -------------------------------------------------------------------------------- e630d87 | DracoOmega | 2024-10-04 13:37:04 -0230 Fix fulminant prisms having incorrect summon data (aliasthespectator) They were appearing as abjurable, which not only made their death messages weird ("the fulminant prism residue disappears in a puff of smoke!") but possibly affected the fact that you weren't credited for their kills anymore. -------------------------------------------------------------------------------- 6d1de5a | regret-index | 2024-10-04 00:32:06 -0230 Tweak confusion's interaction with tension Confusion is easily cured with potions of curing later in the game, so staying in confusion being a high multiplier of tension is sort of weird in so far as one would only do such if they weren't any concerned with the encounter. (However, it's still plenty lethal very early on, when one doesn't know about potions of curing yet.) Contrariwise, confusion is substantially worse than many other statuses if one can't actually cure it any time soon due to not being able to drink potions (whether in Cocytus, while possessing -Potion status, or being a mummy / lich). As such, this takes the current x2 tension multiplier for confusion, sets it slightly higher by default, and drops that slowly down versus one's current XL, unless one can't drink to cure it which case it becomes a flat x2.5 multiplier. (This is a little silly for Elyvilon, but there's a piety cost involved for the extremely little non-Xom non-wrath uses of tension that could even come up versus -Potion.) Hopefully this should help out Mummy Chaos Knights a little bit more and get tension the littlest bit closer to being a more usable function. -------------------------------------------------------------------------------- f9cddea | regret-index | 2024-10-03 23:48:00 -0230 Teach searing wretches to swim across lava Gehenna is in a weird place versus Cocytus, where over half of its threats can't move across lava the way Cocytus's can move across deep water. While this does provide a useful contrast point for the differing varieties of ranged monsters in Gehenna (and tyrants also work very differently than wellsprings), it means the main unique layouts of the Hell work out awkwardly in terms of several threats figuring out how to walk towards the player. As a point of comparison, the other fiery undead in the branch (stokers) actually _swims_ across lava, which feels like precedent enough to let searing wretches do the same. Melee-only threats being impeded by their own branches terrain feels very awkward, there's no vaults in Gehenna that seem to rely on them being unable to move across lava, and there's not a lot of lava for them to otherwise swim in as part of Margery's band, so this should be a reasonable safe change. -------------------------------------------------------------------------------- fb316f7 | regret-index | 2024-10-03 23:42:46 -0230 Name removed spells when failing to learn or cast them It can be quite annoying to type in wizmode e.g. just "Conjure" for Ball Lightning and not be explicitly told it first found Conjure Flame, or that "Summon S" fills in the rest as Swarm and not Small Mammals, so we might as well list what exactly it tried to find instead. -------------------------------------------------------------------------------- 40db0d2 | regret-index | 2024-10-03 23:18:16 -0230 Fiddle with Hells stair -> fountain replacements Getting what are now established as normal drinking water fountains in the hellish realms of endless lava and endless decay looks a bit silly, so their non-blood fountains have been replaced with dry fountains. (In the hell filled with water it's fine, and in the hell meant to be a city it's one of the closest way its boxes are actually any life-like.) -------------------------------------------------------------------------------- 3a15ca1 | regret-index | 2024-10-03 23:18:16 -0230 New creeping inferno tile (pianoman523) As with the apis change in b8f47f2 and retiling in b29aa79, this submission was delayed until the mechanics for the monster were reworked, to hopefully help tiles players associate a new appearance with a drastically different behaviour. This combines and edits multiple submissions by the same artist; it still looks a bit silly, but vastly less janky than the previous creeping inferno's lurking horror recolour tile. -------------------------------------------------------------------------------- b7d3b0a | regret-index | 2024-10-03 23:18:16 -0230 Revise creeping infernos and tweak stokers Creeping infernos are very strangely troubled monsters for Gehenna. * Frail explosive enemies in extended are extremely unlikely to actually detonate on the player in general, as anything from wands to level 2 spells to boomerangs and stones could easily kill them before they approach. * The lurking horror behaviour where they hesitate to move the further away they are combines very strangely with their limited explosion range and frailty- while lurking horrors are a usefully-scaling screen-wide torment burst, creeping infernos can take over a dozen turns from being a screen-distance away (thus giving players lots and lots of time to throw a stone), and can take twice as long if a player actually tries to run away at all. * Even when they actually succeed at hitting the player, their 8d7 partially-resistable damage is only slightly stronger than a balrug's 3d23 fireball with one pip of rF, and weaker than balrug smiting or hellion damnation at two pips of rF, which is very sad for something that could have very easily failed to hit the player. (I'm not going to even start on how stokers have little chance to succeed in rarely summoning bombs that are slow to actually have walk up. Maybe these designs made more sense when stokers had maintain_range? They're extremely unlikely to get it back, but this should help them too- for now, they're moving from a tiny 5% to a passable 10% chance to actually summon their defining threat.) This commit reworks creeping infernos entirely to instead just act like bloated husks do for Swamp- they have an average of 111 HP, move normally at normal speed, and still explode on death or on touching the player (for 8d10 rather than 8d7 previously!) if they reach melee range. This reasonably increases their functionality while still preserving their namesake impending threat- now instead of collapsing from individual stones, they require rather deliberate firefighting as their new bulk inevitably creeps towards the player. To help make this not trivially ignorable, they also go from Will 10 to Will 60- by the time one's in the Hells, non-spellcasters can afford some Evocations investment. It will take a fairly long bit of testing to see how this works out- extended feedback takes quite a while to come in. Gehenna is unlikely to move that much further from its current easiest Hell position or push that much higher than the other hells (which _have_ been adjusted recently), anyway- these still die to anything from summons to conjurations to Manifold Assault to charming a hell hog to just facetanking their relatively low single-burst damage anyway. -------------------------------------------------------------------------------- 52868c5 | DracoOmega | 2024-10-03 22:33:08 -0230 Fix Boris's timeout speech -------------------------------------------------------------------------------- 2442f17 | DracoOmega | 2024-10-03 22:33:02 -0230 Fix a handful of monsters not counting as true summons (Basically anything that called mark_summoned() directly, without ever having used mgen_data::set_summoned()) This incidentally messed up the poof messages for them as well. -------------------------------------------------------------------------------- 4bb16c9 | DracoOmega | 2024-10-03 22:32:53 -0230 Fix summons not looking like summons during timeout (Colgate, Darby) monster::is_summoned() was looking for the presence of a summon timer to determine whether a monster was summoned, but this timer doesn't actually exist while they're in the process timing out. As a result of this, it was possible to get XP from hitting hostile summons and then letting them expire. (If you actually killed them, they would still look like summons and grant no XP). While KILL_TIMEOUT probably never needs to give XP, it seems dangerous to allow summons to look - at any point - like they are not summons. Who knows what other things, now or in the future, might work improperly this way? I am *hoping* the new criteria for is_summoned() will properly encompass everything that should count and nothing which shouldn't, but I won't be entirely confident until we test it out. Fingers crossed! -------------------------------------------------------------------------------- bb4998b | DracoOmega | 2024-10-03 13:05:12 -0230 Use a different color dot for non-abjurable summons And describe them as 'minion' when examined, instead of 'summoned'. (Also fix the Unrewarding icon not rending on webtiles) -------------------------------------------------------------------------------- df8c4cf | DracoOmega | 2024-10-03 13:05:12 -0230 Fix Makhleb god description not rending on webtiles fc8bfd6970fa08 caused the description + cost of Makhleb's capstone ability to be exactly 80 characters in length, which meant there was no space between the description and the cost (longer strings get spaces inserted, but *exatly* 80 characters does not). This caused the regex the webtiles UI uses to split the string to not work. This commit changes the regex to no longer require a leading space before the parantheses, since those are only used for costs here anyway. This fixes #4068 -------------------------------------------------------------------------------- 4194ddc | DracoOmega | 2024-10-03 13:05:12 -0230 Fix crash with blastmotes clouds exploding Accidentally broken by d9015ae29d17d9 -------------------------------------------------------------------------------- 550cd92 | Nikolai Lavsky | 2024-10-03 18:08:42 +0300 fix: don't transit all banished low HD monsters to the Abyss After 3fdf3ab24, banished uniques and some high HD monsters were sent into the Abyss where the player could find them again. But after 25b58072b, all banished monsters get `MF_BANISHED`, so `needs_abyss_transit()` is true for all of them, regardless of their HD. As a result, the Abyss could have too many non-abyssal monsters, especially if the player uses a weapon of distortion. This commit fixes that by restoring the HD filter. -------------------------------------------------------------------------------- 6c11467 | DracoOmega | 2024-10-03 03:15:21 -0230 Fix multiple creatures having incorrectly brief durations (Shummie) When I changed summons to take aut durations instead of abjuration degree, I overlooked those effects which call mark_summoned() directly (rather than using mgen_data::set_summoned()). This meant that anything created by several effects would spawn with a duration of less than 1 turn. These included phantom mirror (both the item and the monster spell), phantom blitz, chaos clones, and the flayed ghost from Martyr's Knell. -------------------------------------------------------------------------------- cd4c005 | DracoOmega | 2024-10-03 01:12:48 -0230 Fix players getting no XP for kills by their own ball lightning I'm not really satisfied with some of how kill attribution works for exploding monsters *in general*, but I think this should fix the most significant known issue for now. (Prisms still worked properly, even without this) -------------------------------------------------------------------------------- 56ef771 | regret-index | 2024-10-03 00:34:45 -0230 More nekomata tweaks * Don't use the altered nekomata tile for Phantom Blitz unless the caster-to-clone is a nekomata, just in case some sprint monster ends up using the spell. * Tweak the nekomata experience value yet further up. Honestly, we could probably do with adjusting threat display for lategame characters with some sort of overriding threat flag- hell sentinels no longer being listed as lethal at reaching XL 20 is a pretty direct demonstration that the whole system is troubled at high experience levels. * Remove nekomata from the orb run, as they're overshadowing the random Pan lords there and many people aren't examining a new monster to treat it with the same respect a random Pan lord would deserve. (I'd rather just keep the strongest Pan monsters out of the orb run entirely than actually nerf down monsters meant to be highlights of a given extended branch. If we continue to move in the direction of Hell-Pan roulette, we can just seperate orb run lists from Pan entirely (since Pan wouldn't exist in half the games) and it could mix in Hell enemies without expecting either branches' strongest and most emblematic monsters to appear on the orb run like shard shrikes or doom hounds.) -------------------------------------------------------------------------------- 30d083e | DracoOmega | 2024-10-03 00:23:43 -0230 Don't crash on monsters dying to dead monsters (+fix monster frenzy orb) The guard which prevented a crash on kills by dead monsters (such as exploders) was removed by 400f974 at least in part because the comment above it was misleading enough that I thought it wasn't necessary. This also fixes a second bug among the same code, where Orbs of Mayhem wielded by monsters could only trigger if the player currently worshipped TSO and the monster which died was evil. ...because for some reason, the mayhem check was in the TSO follower blessing codeblock, and appears to have always been. -------------------------------------------------------------------------------- eaf764a | DracoOmega | 2024-10-02 21:43:37 -0230 Don't kill an ancestor every time the player takes the stairs (Shummie) After the recent refactoring, the simplified ally dismissal code was killing *all* monsters on the floor the player was leaving that were marked as having been created by the player. And for some reason, Hep ancestors considered the player to be their summoned. I don't *think* there will be any issue with them just not having a summoner marked at all, and this fixes the present issue. (If some reason is discovered why this marking is important, I can fix it in some other way.) -------------------------------------------------------------------------------- 07b0ac2 | DracoOmega | 2024-10-02 15:38:34 -0230 Fix minor message bug and simplify summon removal upon leaving floors -------------------------------------------------------------------------------- 4639139 | DracoOmega | 2024-10-02 15:38:34 -0230 Rename monster::is_summoned_by() to ::was_created_by() Since it includes more things now where monster::is_summoned() will return false, and it feels very wrong to me if is_summoned_by() is ever true when is_summoned() is false. (There's a decent argument that is_summoned() should also be renamed to is_temporary() or something. I'll consider it.) -------------------------------------------------------------------------------- 53d16b7 | DracoOmega | 2024-10-02 15:38:34 -0230 Narrow what returns true from monster:is_summoned() To ensure that unrewarding monsters from god wrath, etc, do not count. (This also means that friendlies made by Animate Dead / Death Channel will go back to not counting, but I am fairly sure this doesn't actually affect anything meaningful.) -------------------------------------------------------------------------------- d61e3f1 | DracoOmega | 2024-10-02 15:38:34 -0230 Use a couple documented-but-mostly-unused summon types Despite being clearly described as existing for this purpose, MON_SUMM_WRATH wasn't used for god wrath summons and MON_SUMM_ZOT wasn't used for things made by Zot traps. Fix this (at least partially; it's possible I overlooked some wrath effect). (This actually has a mechanical effect now that Lugonu anti-wrath specifically looks for monsters created by other gods' wrath. But it seems like good policy regardless.) -------------------------------------------------------------------------------- e49fde2 | DracoOmega | 2024-10-02 15:38:34 -0230 Make Bind Soul simulacra (and Kiku wrath derived undead) unrewarding It wasn't terribly obvious that the simulcra created by Bind Soul were temporary, since their durations were extremely long, but they were. Which meant that the player got no XP for them, despite no messages otherwise indicating they were 'summons'. At that rate, it seems fine if they just stay around forever, and are explicit about this. This also fixes a bug where the MF_NO_REWARD flag set by Kiku wrath reanimations was being overridden just a few lines below where it was set. This didn't *seem* to result in the player being able to get XP from them in 0.32, so a different (bug?) must have been preventing this bug from mattering. At any rate, it should be fixed now. (The MF_HARD_RESET doesn't really do anything except make the new icon and description appear properly) -------------------------------------------------------------------------------- 8706489 | DracoOmega | 2024-10-02 15:38:33 -0230 Rename 'durably summoned' to 'unrewarding' and tweak a few things Despite the name, durably summoned monsters didn't act like summons in very many ways besides 'created by a spell/effect and don't drop items or xp'. They weren't abjurable, could take stairs, were valid targets for many things summons were not, never went away when the thing that created them was destroyed, etc. At the same time, some monsters which were *effectively* the same as 'durably summoned' were not marked as such, presumably because no pretense of magic was involved - most notably the spawns of The Royal Jelly. I think this entire thing would be made clearer by not giving any suggestion that current 'durably summoned' monsters are similar to 'summoned' and instead hilight the part that *actually* distinguishes them from any other normal monster: the fact that they don't give any reward. These monsters now say 'unrewarding' when examined, and the icon used is slightly different (to distinguish it further from the summon dot). TRJ spawns also recieve this icon, so it will now be possible to tell them apart from other jellies at a glance. (This was always possible if you xv'd them, but that was very time-consuming) This additionally removes the message "That felt strangely unrewarding" for monsters explicitly labelled as unrewarding. I mean, what else would one expect? Note: this icon is presently displayed both on the same condition as durable summons were (ie: having both MF_HARD_RESET and MF_NO_REWARD) but also the old condition used to mention no rewards when xv'd (which just checked for MF_NO_REWARD and mons_class_gives_xp()). This previous behavior was always *slightly incorrect*, since MF_NO_REWARD does not prevent item drops, and while many effects set both flags at once, not all of them do. In fact, it is important that some don't! (Bound souls should still drop their equipment, for instance). But despite this, xv will claim that they cannot drop items. A review to fix up a few cases where this gives slightly misleading information would be a good idea, but it rarely actually matters, so I will do that at some future time. -------------------------------------------------------------------------------- e1902a1 | DracoOmega | 2024-10-02 15:38:33 -0230 Use the new summon placement range functions in a few more places -Tukima's Dance will now prefer to spawn the dancing weapon adjacent to its wielder (but can still spawn at range 2 if this isn't possible). -God wrath summons can now place all the way to the edge of the player's LoS, if nearer spots are occupied. (Instead of being trivially foiled by a couple nearby monsters in a hallway.) -Wizmode monster creation no longer refuses to place things beyond 2 tiles away from the player, but will also go all the way to the edge of LoS if nearby spaces are full. -Derived undead will prefer to be placed upon the dead creature's own space, if possible. (This potentially has more balance effects than these other changes, but it feels more theatically sensible if a monster rises as a zombie where it fell instead of 'sometimes several spaces away for some reason'.) -Kiku's Unearth wretches can place wretches up to 4 tiles away, if nearer spaces are occupied. -------------------------------------------------------------------------------- 5f4ad15 | DracoOmega | 2024-10-02 15:38:33 -0230 Add new members to mgen_data to control placement radius Prior to this commit, monsters created via create_monster() were either created at a specified position (if the MG_FORCE_POS flag was set) or at a random habitable spot within 2 tiles of a specified position (if it was not). If a spell wanted to choose a random spot at any other distance, even just '1', they needed to write their own code to do so - and there were many examples already in the codebase of performing a very similar sort of random iteration manually. This commit aims to make that much easier to do, with less boilerplate, by adding 3 new members to mgen_data: range_preferred, range_max, and range_min. ranged_preferred sets the range from the center point where the monster can be randomly placed (ie: the current behavior functions as if this was always '2') range_max allows placement to exceed this range if, and only if, all tiles within that range are invalid. This allows an easy fallback in cases where we'd rather place something close, but will accept placing it far away rather than not place it at all. range_min specifies the minimum distance that the placement *must* be further than - to allow forcing something to be placed non-adjacent to a given location, for instance. All of these can be conveniently set via mgen_data::set_range() This commit also adds the MG_SEE_SUMMONER flag, which requires that the chosen spot also be within line-of-sight of its summoner. (Most summon spells do not require this, as they are centered around the summoner in the first place, and line-of-sight to the center point is *always* required, but some create summons at a random location around a target instead, where this is useful.) This commit also refactors multiple existing spells to benefit from this new capacity - sometimes shortening them a great deal in the process. There should be just a couple minor functional changes from this. -Dragon's Call can no longer create dragons outside of the player's LoS, if it chooses a target on the edge of the player's LoS -Haunt likewise will no longer place ghosts out of sight, when aimed at a distant enemy. This was awkward, since it was possible for it to appear as though the spell did nothing (and in practice, it might *actually* do nothing, since the ghosts can't attack from there anyway). I expect this is a small buff in practice, but I think it's just good policy. -Scroll of Butterflies uses trivially different placement logic for its more distant butterflies (but note that the edited comment was always inaccurate, due to a lack of the MG_FORCE_PLACE flag. It chose a random spot within 2 tiles of another random spot that was within 3 tiles, irrespective of whether the first chosen spot was empty, and thus always effectively picked a spot with 5 tiles. Since ?butterflies current behavior seems good to me, I've not elected to change the code to fit the comment, but rather the comment to fit the code.) -------------------------------------------------------------------------------- 1689aa8 | DracoOmega | 2024-10-02 15:38:33 -0230 Slightly change find_habitable_spot_near and document This adds the ability to set an 'exclude_radius' to the search, which will ignore all spaces within that radius of the center point. This expands and replaces the old 'allow_center' argument (since an exclude_radius of -1 is equivalent to false, and 0 to true). It also generalizes the 'in_player_sight' argument to work for any actor, by passing a pointer to that actor. Both of these will be used by a subsequent commit. (I kind of dislike how radius and exclude_radius arguments aren't next to each other, but since the latter rarely needs to be specified, I opted to put it afterward so that it can be optional.) The default behavior for this method is now equivalent to if allow_center was true. Many uses of this method specified false, but I have not preserved this behavior since in almost all cases it did nothing - the center point in many searches is already occupied and thus will already be ignored. The time savings of skipping a single cell check is irrelevant compared to a simpler method call, imo. -------------------------------------------------------------------------------- f263a04 | DracoOmega | 2024-10-02 15:38:33 -0230 Simplify monster_habitable_grid and refactor monster_habitable_grid allowed specifying a 'wanted feature', which could cause the function to return false even if the primary feature being queried was otherwise habitable. While technically more flexible than this, the only uses of this in the codebase were to prevent amphibious/flying monsters in Shoals (and Crypt zombies) from spawning in deep water, where the player might not even encounter them. I think the entire notion of a 'wanted feature' was unnecessarily confusing for this purpose, so I have replaced mgen_data.preferred_grid_feature with a simple flag, MG_PREFER_LAND, which accomplishes the same behavior as if preferred_grid_feature had been set to DNGN_FLOOR before this commit. I have also removed the wanted_grid argument from monster_habitable_grid altogether.) At the same time, since monster_habitable_grid actually took a *feature* as its argument, rather than a position, I renamed it monster_habitable_feat instead (similar to the naming convention of other existing functions), and wrote a simple monster_habitable_grid which takes a coord_def as an argument instead, slightly shortening a very common way that monster_habitable_grid was already used. There should be no functional change from this commit. -------------------------------------------------------------------------------- 654a16e | DracoOmega | 2024-10-02 15:38:33 -0230 Remove one-off code to handle Marionetting Hellfire Mortar With the new summon refactoring, this special case should no longer be necessary. -------------------------------------------------------------------------------- e900964 | DracoOmega | 2024-10-02 15:38:33 -0230 Allow sculpt simulacrum to use normal summon cap behavior Now that it should work properly for it. -------------------------------------------------------------------------------- 9c9fe8b | DracoOmega | 2024-10-02 15:38:33 -0230 Add a message channel for monster timeout / summon poof messages So that they can be consistently darkgrey. The most common of these were already colored that way by string-matching in default options, but many others were overlooked (eg: firewood withering away wasn't marked boring.). Rather than keep adding more strings to default options, set their interest level at the source (which is easier now due to recent refactoring!) (For the moment, I elected to keep Kiku wretches dying in default colors, unlike other timeouts. Maybe other people will think this is needless, but it's trivial to change now.) -------------------------------------------------------------------------------- 27754e0 | DracoOmega | 2024-10-02 15:38:33 -0230 Remove one-off handling of Awaken Vines Awaken Vines' implementation used multiple single-use props, an enchantment, and a custom removal function to manage what was *effectively* just a normal summon cap and summon/summoner relationship. Especially with the recent refactoring of summon handling to include non-abjurable creations, this is entirely unnecessary, so let's cut it all. (One bit of hard-to-even notice behavior that is not preserved by this restructuring is that snaplasher vines would instanty die if the dryad which created them ever lost LoS to them. This may have made some sense when dryads were normal enemies, but that hasn't been the case in over a decade.) -------------------------------------------------------------------------------- 5f5c15f | DracoOmega | 2024-10-02 15:38:33 -0230 More assorted tidying of monster_die -Use a macro to more cleanly check for all 'reset-style' killer_types in some places. -Move some cleanup-related code into monster_cleanup() -Tweak what monster death effects are blocked by exploding (will no longer allow Gozag worshippers to make a dancing weapon actually fall to the ground by using Firestarter) -Rename a confusingly-named and rarely used argument. -Use the new 'real_death' boolean to shorten a common grouping of death checks in many on-kill effects. -Add a small number of clarifying comments. This isn't comprehensive. There's quite a few things which *probably* should be in monster_cleanup() and aren't (which could matter in the multiple situations where monster_cleanup() is called without monster_die()). I also wanted to wrap a number of monster-specific death effects into a function similar to _player_on_kill_effects() but there's good reason for some of them to happen *before* death messaging and for some of them to happen *afterward* (and while almost none of them trigger for non-real_deaths, a couple need to). But this still fixes several small bugs (and hopefully doesn't introduce as many new ones!) while being slightly tidier. -------------------------------------------------------------------------------- 400f974 | DracoOmega | 2024-10-02 15:38:33 -0230 Pull a variety of player on-kill benefits into a new function Various benefits that were triggered upon the player or their allies killing monsters (such as heal-on-kills, berserk extension, or Fugue of the Fallen) were scattered all over monster_die() - some of them before the death message for the monster would even be printed! For clarity's sake, I have pulled all of these that do not concern corpse-based necromancy into a new function: _player_on_kill_effects. The hope is that this improves clarity somewhat by centralizing such things together and giving them a designated 'place'. I've also removed a few logical checks that seemed unnecessary. There should be almost no deliberate functional change (besides some messages being re-ordered). -------------------------------------------------------------------------------- d9015ae | DracoOmega | 2024-10-02 15:38:33 -0230 Fix inner flame explosion message order for summons This was incorrect, even before the recent refactoring. If an abjurable summon exploded from inner flame, the message log would print something like: "The wolf spider disappears in a puff of smoke. The wolf spider explodes!". Now it will properly print a summon poof message afterward, instead (by saving it in the explosion_fineff itself). -------------------------------------------------------------------------------- 9931db7 | DracoOmega | 2024-10-02 15:38:32 -0230 Refactor death message handling for summons and death cloud handling Previously, clouds left upon the death of abjurable summons (but also chaos spawn death clouds and the flashing balestra death animation) were handled by _monster_die_cloud while many clouds left by other monsters upon death (such as fire vorticies or simulacra) were handled elsewhere. Additionally, _monster_die_cloud was the function responsible for printing expiry messages for abjurable summons (which led to minor nits like living spells having a custom expirely message which could never be printed because they were set to not leave clouds upon death.) Tidy this up a little. _monster_die_cloud covers more cases of monsters leaving clouds, _print_summon_poof_message now covers messaging seperately of leaving clouds, flashing balestra handling is moved to the block of other dancing weapon special cases. There are a few minor functional changes. For one, fire vorticies will no longer vanish without a message, and will leave a fire cloud when they expire instead of just when they are destroyed (which is a deliberate change). There may be some other more minor effects (primarily with messaging). -------------------------------------------------------------------------------- 79d8e41 | DracoOmega | 2024-10-02 15:38:32 -0230 Remove (hopefully) unused pluralization code from summoned_poof_msg While summoned_poof_msg was normally used for summoned monsters disappearing, it could also be called with an item argument, which was used when monsters opted to drop a summoned item (and that item subsequently disappeared). The pluralization code was used only in this place, but I do not believe it is actually possible for living monsters to drop summoned items in a way the player can see it. (They sometimes do during their creation, but this is silent, and they specifically can't pick up new gear which might cause them to swap out their old gear.) In the interest of simplification, I have removed this code and placed an assert in monster::drop_item to catch the possibility that some case still exists where a summoned item can become non-silently dropped. -------------------------------------------------------------------------------- 80a12c7 | DracoOmega | 2024-10-02 15:38:32 -0230 Remove a deeply misleading comment To what degree this was ever true, it hasn't been for over a decade. -------------------------------------------------------------------------------- ecef227 | DracoOmega | 2024-10-02 15:38:32 -0230 Rename KILL_DISMISSED to KILL_RESET_KEEP_ITEMS and use it less KILL_DISMISSED was identical to KILL_RESET except that non-summoned items in the monster's inventory would be dropped, but whether one or the other was used for a given function call was rather arbitrary (and it wasn't intuitively clear how little difference there was without looking it up.) This commit renames the enum value to be more explicit about what it does and then changes most uses of KILL_DISMISSED to KILL_RESET instead. In the overwhelming majority of cases this was either used for monsters that can't drop items in the first place (ie: ioods, foxfires), or used after manually setting MF_HARD_RESET on a monster (which is just a longer way to do the same thing KILL_RESET does anyway). A few points in monster_die even converted KILL_RESET to KILL_DISMISSED for specific enemies, like fire vorticies for no reason I can determine (they can't have items, either!) I have kept KILL_RESET_KEEP_ITEMS in the couple cases where preserving the items is deliberate. (It's *possible* that converting KILL_RESET to KILL_DISMISSED for dancing weapons was intended to serve some actual function, but I'm not sure there's any situation that should KILL_RESET an arbitrary monster and want any piece of it to remain. If I've overlooked a good reason, that bit can be changed back again.) -------------------------------------------------------------------------------- 98d3b7e | DracoOmega | 2024-10-02 15:38:32 -0230 Remove the 'wizard' argument from monster_die() This was almost entirely redundant with using KILL_RESET / KILL_DISMISSED with the 'silent' argument true. The only actual difference I could find (summoned monsters still making clouds for non-wizmode reset kills) is arguably a bug and will probably be changed later. -------------------------------------------------------------------------------- fab00f0 | DracoOmega | 2024-10-02 15:38:32 -0230 Use KILL_TIMEOUT for ENCH_SLOWLY_DYING and reorganize death messages This attempts to make KILL_TIMEOUT the universal killer_type for a monster dying due to time, as well as centralize the unique death messages for various sorts of temporary monsters in the same place a little better. -------------------------------------------------------------------------------- 714e8df | DracoOmega | 2024-10-02 15:38:32 -0230 Fix a minor message issue with Fugue and wretches Due to a misplaced bracket, all deaths of Kiku wretches would generate a Fugue stack, even if the spell wasn't active. This didn't actually *do* anything without the spell being active (and stacks were set to 0 again whenever you actually cast it), but it would still print the message for reaching maximum stacks upon the 7th wretch death since the last time the player cast the spell. -------------------------------------------------------------------------------- fc3e015 | DracoOmega | 2024-10-02 15:38:32 -0230 Remove KILL_MISCAST and replace with KILL_NON_ACTOR This was essentially identical to KILL_NON_ACTOR in effect, and not even used consistently for miscasts; ones caused by Spellbinder would use either KILL_YOU or KILL_MON depending on who wielded it and the Wild Magic card uses KILL_YOU. But mummy death curses (despite not being miscast for many years) *did* use KILL_MISCAST - at least when they came from actual mummies. I think this is just confusing and doesn't add anything of value to the codebase that I can see. Note: this enum is only for deaths of *monsters* and has nothing to do with ktypes regarding the player being killed by miscasts. -------------------------------------------------------------------------------- c0f3b9e | DracoOmega | 2024-10-02 15:38:32 -0230 Rename KILL_MISC to KILL_NON_ACTOR This better-communicates the largest use of it (direct damage done by things which are neither the player nor monsters, such as neutral clouds or some god actions). It is still used for a few things that arguably don't fit under this definition, but some of them will be moved out again shortly. -------------------------------------------------------------------------------- 2912c12 | DracoOmega | 2024-10-02 15:38:32 -0230 Don't use KILL_MISC for tentacle cleanup deaths Tentacle segments are killed and recreated constantly in the background, and to prevent these 'internal' kills from causing infinite recursion (via killing a segment leading to trying to destroy the whole tentacle leading to killing a segment, etc.) KILL_MISC kills specifically will not clean up the rest of the tentacle. ...except KILL_MISC is used for actual sources of damage in the game, which can kill a tentacle segment in the traditional way. If a tentacle takes damage this way (eg: from some Xom actions or vault cloud generators, among other things), it can cause affected sections to disappear in puffs of smoke or even appear temporarily disconnected. Since this internal tentacle cleanup is something *very* specific, I've given it its own killer_type to avoid any possible ambiguities. No other effect should ever use this. -------------------------------------------------------------------------------- 2d1a5b4 | DracoOmega | 2024-10-02 15:38:32 -0230 Add M_UNSTABLE flag to handle removing some monsters on level change Several monsters do not play well with how 'catchup' turns work in Crawl upon returning to a previous floor - hellfire mortar fires multiple times in a row, ball lightning blow up near where they were the last time the player was there, even if hundreds of turns have passed. Removing a few of these upon level exit was already handled, but some were not, and this generalizes all that by adding a monster flag for 'always remove summoned instances of this monster when the player leaves the level they're on'. (Note: this is *not* already handled by the code to remove player summons upon leaving a level, since this is an issue for hostile ones as well.) -------------------------------------------------------------------------------- fb19e97 | DracoOmega | 2024-10-02 15:38:32 -0230 Refactor backend handling of summons / created monsters (Part 1) Crawl's handling of summoned and not-technically-summoned-but-close monsters is a complicated and somewhat untidy thing that makes it harder to generalize behavior between conventional summons and other monsters that share many of their properties, without considerable special cases and bespoke code in various places. For instance, monsters created by the player can use one of *4* different enchantments for their timer, which can result in those monsters expiring with with 4 different killer_types (but not even on a 1-to-1 basis with which timer is used!) that results in sometimes-unclear differences in behavior. It's also needlessly verbose to ask if a given monster was created by a given spell, easy to forget to check for all 4 different ways a monster can be temporary here, and many other issues that have resulted in various bugs over time (several of which were outstanding at the time of this commit.) This is an attempt to significantly clean up and better-document this entire system, as well as make it easier to interact with and fix a number of bugs in the process. Major changes: -ENCH_ABJ, ENCH_FAKE_ABJURATION, and ENCH_SHORT_LIVED are all folded into a single timer: ENCH_SUMMON_TIMER. (Save-compat code will convert deprecated enchantments into the new standard timer). -Rather than differentiate summon behavior by which timer is used, two monster flags are added (MF_ACTUAL_SUMMON and MF_PERSISTS) to cover the most clear and actually-meaningful differences that already existed. -MF_ACTUAL_SUMMON indicates the a monster is abjurable, will produce a poof message (and possibly clouds) when it dies - regardless of whether this was by timeout or being directly killed - and will not produce other death effects (like simulacrum freezing clouds) when it times out. -MF_PERSISTS indicates that a monster should not be removed when its creator dies (ie: the current behavior for ball lightning and prisms). Both of these flags can be easily set by bool parameters to mgen_data::set_summoned() (which has a new method signature). Otherwise, all summons follow the same set of behaviors. -monster::is_summoned() will now return true for any sort of 'temporary' created monster, regardless of specifically its type. It no longer uses outparams. -monster::is_summoned_by() allows easier querying of summon type (and summoner, if desired). -Summon durations specified in mgen_data now use auts instead of 'abjuration degree'. The latter was coarse-grained in a way that made it problematic to work with for effects that wanted to scale duration with power (sometimes resulting in durations that could vary randomly between 8-200+ turns!), but also: durations for things like ball lightning were too short to fit in even the smallest degree, so this change was strictly necessary -summ_dur(degree) provides a short-hand to emulate the old duration behavior, where desired. There are places this ought to be changed, but I have not yet done a thorough review of them, and summon duration of most things should generally remain unchanged by this commit. -The duration of things that used a default ENCH_SHORT_LIVED is adjusted slightly (instead of 2.4 - 8.4 aut, they use 4-7) -Planned-but-not-fully-implemented: All deaths due to summon timers expiring will use KILL_TIMEOUT rather than the mishmash of things they currently do. (Not only will this refactoring make it easier to add forgecraft creations with less special-cased code, but ideally the UI will be slightly improved by showing the summon dot icon on exactly those monsters which will vanish with their creator and never on those which will not - removing some ambiguity that players have complained about in past.) Note: some changes regarding proper tidiness and unification of killer_type to make all of the above statements work properly, will be done in subsequent commits. -------------------------------------------------------------------------------- b498025 | DracoOmega | 2024-10-02 15:38:31 -0230 Remove the 'god' argument from most player summoning spells Despite being in the method signature of many, many spells, this argument was almost never used, and in the rare situations where it *was* used, mostly never mattered. It set the god of the summoned monster to a given value, but monster gods (especially of player-friendly summons) aren't displayed to the player in nearly any situation outside of the cast messages of priests (which none of these spells could even create). Despite several comments in spl-summoning.cc saying otherwise, this argument was not the 'god of the caster' and in fact one of the only ways it could be anything other than GOD_NO_GOD for many spells was when Xom cast the spell through the player, which would make the resulting monster worship Xom (not that the player could tell the difference). Approximately the only functional changes are: -If Xom makes the player cast Summon Horrible Things, the player has the normal 1-in-5 chance to lose int instead of 0. (This very minor downside hasn't been able to be fatal in ages, and double-sided Xom effects are something Xom is already full of.) -Summons created by player spell cast by Xom will no longer reduce tension by an exaggerated amount. Ones created by Xom code directly still will (though this may be removed in a future commit) -------------------------------------------------------------------------------- ce7c55b | regret-index | 2024-10-02 15:27:32 -0230 Vault review, clean-up edition Worthy of note: * A variety of overflow altars now have a low chance to be used in V as empty room choices, to further try and help the branch's flavour by making given rooms dedicated to given gods. (This also takes from Depths decor options, but that branch has extreme counts of potential choices to take from). Only a select number of gods show up in this capacity; Okawaru, for the metal and gifts; Gozag, for the gold; Zin, for the law and metal themes, Sif Muna, as the main magic god with material possessions (as nearly all the ironbound enemies are magical), plus very rare sightings of Ely and TSO to join Zin. * After adjusting for their respective weights, I've buffed the two weakest Shoals ends (the original huts and the second-ever caves) and nerfed the second-highest after the recently-adjusted holies end (storm_palace), to try and normalize end threat a little more. This does increase the average Shoals threat overall, but Shoals is doing slightly worse than the other three Lair branches currently (and the branch really needs a fresh monster infusion, honestly), so it should be fine. * New lua functions now cover regularly-reused granite statue and metal statue redefinitions as 5f48996 set up for decorated floor options, which should make diggability and console colours be far more consistent between feature uses, trim down a large bunch of repeated boilerplate throughout .des files, and also be much easier to explain in future documentation- now all a vault has to do to get one of these various themed pieces is specifying the right glyph and feature name for a given function call. -------------------------------------------------------------------------------- 6f3bd40 | David Lawrence Ramsey | 2024-09-30 15:07:27 -0500 Fix typo. -------------------------------------------------------------------------------- 1636c52b | Nikolai Lavsky | 2024-09-30 18:51:05 +0300 feat: make &H reset more cooldowns and heal more statuses This commit lets wizmode super healing cure -Recite, -Gavotte, rF-, and -Word and also fully charge Grave Claw. -------------------------------------------------------------------------------- 81d07ba | patrick | 2024-09-30 08:55:05 -0400 Fix small typo in vaults_rooms_hard.des It's been bugging me for a while. -------------------------------------------------------------------------------- 860b457 | regret-index | 2024-09-30 04:32:30 -0230 New Coglin paper doll tile (pianoman523) It gets somewhat awkwardly covered up by the default pants characters get, but it's a reasonable improvement in terms of more obviously being a mechanical harness than prior. -------------------------------------------------------------------------------- 407acac | Brian Power | 2024-09-29 23:48:13 -0230 Fix #4063: Quad damage (Sprint) is pluralised to "quad damagi" (#4064) [Closes #4063. Closes #4064.] -------------------------------------------------------------------------------- 0e6af4a | RypoFalem | 2024-09-29 23:17:51 -0230 Update quickstart.md (#4057) Replace a mention of Hill Orc with Mountain Dwarf. Make the layout section less console-specific. Mention that heavy armour also hampers launcher attacks. [Closes #4057.] -------------------------------------------------------------------------------- fc8bfd6 | regret-index | 2024-09-29 23:07:41 -0230 Tweak the text of large HP costs on abilities The previous ambigious cost of "Pain" was used on four different abilities: * Kiku's Brand Weapon With Pain: invoking Torment * Lugonu's Enter the Abyss: a completely random but non-lethal HP amount * Yred's Bind Soul: 1/3rd of HP, returned on soul-binding * Makhleb's Brand Self: 2/3rds of HP Mentioning in abilities that this merely "will hurt you" is quite the understatement, and was also entirely false for Kiku if the player is undead or a wisp. "Pain" is also a relatively overloaded term in-game, with both a weapon brand and a monster spell that both don't hurt nearly as much. As such, I've added another ability flag to differentiate Kiku's Torment cost from the other costs, and more precisely state in the other ability's cost descriptions that one will lose a large fraction of their HP. Hopefully, this should prevent people from using Kiku and Makhleb 6* gifts mid-fight as can be quite dangerous. -------------------------------------------------------------------------------- 0e69982 | regret-index | 2024-09-28 23:49:36 -0230 Prevent most (but not all) auras from affecting firewood (Sastreii) This was less obvious when the main aura being deployed was torpor snails and thus players only saw them when a wand of charming or a scroll of summoning got a friendly torpor snail to affect firewood. Now that polterguardians can make rare V plants repel missiles and apises can double the vigour of nearby Shoals or Holy Pan plants (yet not prevent them from withering away entirely), this is conspicuous enough that it's now disabled for most auras by default. (The main exception here is for martyred shades, as Fedhas doesn't complain about summoning ghosts these days and they definitely _should_ be able to support player or enemy briar patches. For now, unless further aura effects produce a second exception, said injury bond is the only one that still affects firewood.) -------------------------------------------------------------------------------- 437a092 | regret-index | 2024-09-28 23:41:03 -0230 New tiny tiles (Sastreii) Scrub nettles and boggarts, to be more specific. (To offset adding a few more tiles into rltiles/UNUSED for the sake of future potential placeholders, I've also cut a few more of what was in the folder.) -------------------------------------------------------------------------------- 5f48996 | regret-index | 2024-09-28 23:04:15 -0230 New decorations: flags, flowers, mop buckets, fur brushes All of these employ the previous commit's "decorative floor" feature. As a result, they are all mutually exclusive in appearances with each other, and all thus lack messages or solidity. Still, they should help liven up the Dungeon with various non-obtrusive themes. * "Orcish standards" appear in the more statistically dangerous orc bailies, a few of the blander orc vaults outside of their branch, and some of the least decorated Orc vaults in the branch, so these vaults have more than orcish idols and altars of Beogh. * "Infernal standards" mostly appear in Gehenna, so the branch has something specific to it (compare 9c46c80.) * Regular "mop and bucket" decorations appear in Vaults, with the rare occasional other use in D and other humanoid-centric branches like Snake. We've got a lot of random generic boxes made by layout generators already- given closets and corners might as well be handed a small bit of flavour and purpose. * "Bloodied mop and bucket" decorations mostly appear in Dis and Makhleb vaults (compare to pillars of rime and infernal standards). * "Garden patches" and "floral vases" appear in various housing and garden locations (extending some of 5c82c18 while also giving them descriptions), with the latter also getting a few graveyard uses. * "Flower patches" appear in various forests, grassy locales, and around a few killer bee vaults. * "Mourning vases" and "broken floral vases" appear in ruins, undead vaults, memorial graveyards, and so on and so forth. * "Fur piles", while very rare, mostly appear in Vaults (where they're brushing the various yaktaurs) and other yak vaults. All of these tiles are by ploomutoo, as was added in 76a730d. I trimmed out and made various colour-cyclings of the cobblestone garden flowers for more visual variety in flower patches. To ease further tile additions using these features and to make the colouration schemas more consistent for any other uses, these all use a predefined list in dlua/vault.lua- just use something like ": decorative_floor(_G, 'p', "flower patch")" in a given vault. (Some other repeated feature renames / recolours / retiling, like 0.32's various statues, probably should get this same sort of ease in the future, to trim down on boilerplate and make it easier to document and teach other would-be users of such in the future.) Thanks to DracoOmega for helping edit these new decorative feature descriptions. (I also resorted dat/descript/features.txt a little while adding these new descriptions, to split apart portals from other vaults.) -------------------------------------------------------------------------------- 1f37800 | regret-index | 2024-09-28 23:04:14 -0230 Placeholder feature: decorative floor This is a bit of a placeholder hack for a large number of good tile submissions in 76a730d and potential additional tile additions over time, that don't want to actually be executed as rapidly-destructible or diggable statues, solely placed on top of walls, or heavily written up for character-specific messaging as fountains and food incidentally heavily rely upon. (There are also no features left that entirely make sense for them to be renames for, after fountains gained flavour messages in 8966e59 to help justify their whole lot. It would also add an indefinite number of additional floor tiles to feign these otherwise being properly layered on top of given branch layouts, and would lose out on writing up any descriptions for them.) Without any other relatively reasonable ways to approach such, and with nearly a dozen different potential tiles workable for these purposes, I am using a hack of a new feature solely meant to be redefined, which for all intents and purposes is floor with a different glyph. (As with the addition of food caches back in 831329d, these are all walkable features that shouldn't interrupt terrain transformation in any fashion, and which Xom doesn't interact with.) Ideally, these cases would instead be handled with a significant rewrite to the vault code for KFEAT to allow per-instance per-glyph redefinitions of names and colours and tiles, in much the same way as vault monsters, scythes, and hammers work. It'd deal with various other issues (like the current inability to use both dead trees and live trees in the same vault, or the inability to use more than two types of statues) and smoothen over a fair bit of this code. Until then, the relatively invisible hack should be worth the straightforward additional flavour possibilities. (Note: I am 100% against adding almost anything else in this space, like DNGN_METAL_STATUE_2 or DNGN_DECORATIVE_FLOOR_2, solely for the sake of vaults that want to deploy multiples of these at once. Said rewrite should happen before stretching this hack any further, as the cost of having a single feature wouldn't be nearly as bad as adding further ones.) -------------------------------------------------------------------------------- 12f2da7 | gammafunk | 2024-09-28 15:34:33 -0500 fix: Correct a filename to fix the build The Makefile expects the splash screen filenames to have a prefix of "title_". Also clean up some tabs in the Makefile itself. -------------------------------------------------------------------------------- 9ec8a70 | Nicholas Feinberg | 2024-09-27 12:17:27 -0700 New Oni Summoner splash (benadryl) -------------------------------------------------------------------------------- 660b845 | gammafunk | 2024-09-25 20:41:49 -0500 doc: Update the debian changelog for 0.32.1 (cherry picked from commit f5deb65975461a56ac8751e43d5d0e34f98eae4c) -------------------------------------------------------------------------------- 533394c | gammafunk | 2024-09-25 20:41:47 -0500 doc: Update the changelog for 0.32.1 (cherry picked from commit ba77377449e8c9fd173e04de3e1cb4a329792bc7) -------------------------------------------------------------------------------- c192473 | DracoOmega | 2024-09-25 14:03:02 -0230 Fix apises giving monsters permanent max HP every turn (RoGGa) The apis aura, behind the scenes, was removing and re-adding the doubled vigor buff each turn. This theoretically would have no effect (dividing their doubled max HP by 2, then multiplying it by 2 again), but math in monster::scale_hp intended to prevent monsters from *losing* max HP after berserking, due to rounding, was causing each monster in the aura to gain 1 base max HP for every turn they were near the apis. This meant that by the time the player found the apis, monsters nearby might have gained hundreds of additional max HP! The solution in this commit is very quick and hacky. A better solution would involve actually storing the monster's 'original' max HP in some fashion. But since there are multiple stacking ways to modify this, and some care would be needed to make sure it did not introduce new bugs, I have opted for the simplest, quickest solution for the moment, to put a stop to a bug that will easily kill players. -------------------------------------------------------------------------------- 0763001 | regret-index | 2024-09-25 01:52:00 -0230 Silence a build warning -------------------------------------------------------------------------------- 70dc07e | regret-index | 2024-09-25 01:07:21 -0230 Adjust the repulsion field mutation text (#4053) As the issue notes, 359da3a forgot to adjust this mutation's description of repel missiles, which this now fixes. -------------------------------------------------------------------------------- aa0487c | regret-index | 2024-09-25 01:04:43 -0230 Add a description for Mass Regeneration (#4049) The addition of the Mass Regeneration monster spell in e97a2a3 forgot to include a written description for the spell. Closes #4049. -------------------------------------------------------------------------------- c7607e5 | regret-index | 2024-09-24 23:27:22 -0230 Fix elves_outpost_lemuel's lua (#4050) I screwed up some brackets slightly in 8908559- this should place in each of its locations now. Tweaked some syntax slightly while I was here. Closes #4050. -------------------------------------------------------------------------------- 9c46c80 | regret-index | 2024-09-24 22:25:16 -0230 Reuse pillars of rime as occasional Cocytus decor Another attempt to try and use what we already have available in game for another decorative purpose, to make Cocytus feel a little more Hell like instead of just being an ice zone with demons in it as ice caves already present. Compared to the usage of decorative boulders in d9500d9 and their replacement for piles of debris in 03d5c24, these don't list a movespeed or have use that itself is more active. (If people _are_ still going to be paranoid about them doing something, then those same people are probably still paranoid about granite statues or pillars of salt.) Also: by the time one's in Cocytus, most characters should also be readily easily able to break apart or pierce attack past an obstacle with only ~37 average HP and 15 AC, so I am experimenting a second time with using obstacles that don't start slowly dying on the slightest touch. It should distinguish it a little more as an actual new decoration, and they're not really placed in a branch that has lots of space or running around to encourage individually destroying them all. -------------------------------------------------------------------------------- c068db4 | regret-index | 2024-09-24 22:25:16 -0230 Don't claim stationary monsters can open doors As they can't, which is listed confusingly for ice blocks and pillars of both salt and rime (due to them depicting things frozen or saltified being able to wield equipment before they collapse entirely) plus Roxanne. -------------------------------------------------------------------------------- c0dc3ca | patrick | 2024-09-24 18:01:15 -0400 Fix up the custom gadgets shop Now that evokers are basically unrands, it's possible for one gadget shop to stock a good chunk of the evokers in your game. I've changed the inventory so it can only ever generate one evoker at once. -------------------------------------------------------------------------------- 4966338 | DracoOmega | 2024-09-24 17:09:16 -0230 Don't zap self with Magnavolt if standing in a dust cloud (monkooky) It didn't even warn the player, even. -------------------------------------------------------------------------------- 4e31080 | regret-index | 2024-09-24 15:37:54 -0230 Make base jellies amorphous (Ogregutan, rypofalem) When I was working on cc540e3, I was replacing what were originally checks for monsters with the jelly genus, and forgot to actually adjust the base jelly monster itself. Whoops. (This mostly makes them immune to constriction and nets again.) -------------------------------------------------------------------------------- b29aa79 | regret-index | 2024-09-24 15:37:53 -0230 Two new holy tiles (Sastreii) Apis and ophan tiles, to be specific. Hopefully people will quickly associate the newer tiles with their new aura behaviours? -------------------------------------------------------------------------------- b8f47f2 | regret-index | 2024-09-24 15:37:53 -0230 Give apises an aura of doubled vigour Apises are entirely vanilla monsters after they lost their weakness death curse effects, which is somewhat understandable (no resting off statuses whenever a monster dies (unless we made a completely different schema of needing to kill other monsters first, which would still be extremely weird flavour for an Elyvilon curse)). It is also very awkward, as holies are already struggling with being homogenous walls of stats without much to distinguish the each of them. They're thus prime material for giving a new gimmick. This passive aura of a status added in the prior commit that doubles enemy health (for all enemies besides other apises) should help on multiple fronts. Much like torpor snails, eyes, and various summoners, it should make them a high priority target, though they get to have solid melee damage (and slightly reduced HP than their current very high numbers) to help them stand out a little from those monsters. It also provides very direct Elyvilon flavour- they're using Divine Vigour on all of their allies- without the awkward inconsistency and low impact that more indirect means of healing allies could look like, and it heavily fits one of the kinds of flavour of what one might expect holy monsters to do compared to other holiness categories throughout the game. (This, of course, also comes with significant reworks to the vaults deploying apises to make them use far less apises- not that there's almost any of them in the game. This is most notable for heavily tweaking shoals_end_hellmonk_holy_island, which is also the top end of current Shoals end weight-adjusted kills; aside from a relatively slight amount of enemy tweaking, this also comes mostly with making the islands larger and adding marginally more randomized cover so that the whole level is far less densely concentrated, letting less of the level wake up and rush the player at once.) -------------------------------------------------------------------------------- e876008 | regret-index | 2024-09-24 15:37:53 -0230 New monster buff: doubled vigour One troublesome part of making more monster designs for sufficient variety in several remaining branches is the lack of straightforward buffs available for monsters to apply to one another. (We _are_ using Battlecry or Might Other on eight different monsters at this point, as an obvious example.) It's not the most pressing matter, but additional buffs of reasonably straightforward and reusable capacities would help. This new doubled vigour buff extends relatively simply on another common status effect- berserk, which multiplies both melee damage and hp on monsters by 150%. This rare buff doesn't affect melee damage, but instead further increases health by 200% instead. Most uses of hostile healing beyond Major Healing (on two extended uniques) and innate regeneration don't really stand out that much, while this should be dramatic enough to notice. (Since it'll still rescale dealt damage after the status wears off, it also shouldn't be much more annoying in giving a monster longevity than berserk itself does). Admittedly, this buff should be used extremely sparingly as a result, and the current default duration is only as long as Berserk is. While this is mostly meant for an Elyvilon-themed monster in an upcoming commit (thus a name corresponding with the Divine Vigour invocation), this commit also slips it into the Call of Chaos list (where it can replace the extremely weak effect of agility to instead give the list something of high, brief notability besides haste, and thus actually be a dramatically relevant spell when cast) and onto Xom's hyper-buffing an ally action (where it can help the earlier xp end of possible provided allies not immediately die in various situations). Another home may show up for it in the full scope of time- but for now, it's actually relatively simple in-code, compared to a lot of other effects, so it shouldn't hurt any more than Agility somehow still sticking around does. -------------------------------------------------------------------------------- 23b8868 | DracoOmega | 2024-09-24 01:13:56 -0230 Don't claim 'You are here.' about tiles on other floors -------------------------------------------------------------------------------- 5e1e37f | DracoOmega | 2024-09-24 01:08:36 -0230 Don't allow performing actions on features on other levels (angelslayer) Related to the previous bug, it was possible to open/close doors on other floors, provided you were standing adjacent to the same coordinate on your present floor. You could also interact with transporters and worship at altars (and possibly other things?) -------------------------------------------------------------------------------- e40546f | Aliscans | 2024-09-24 00:44:16 -0230 Don't let the player use off-level items with CMD_DISPLAY_MAP. _allowed_actions() had allowed commands such as (g)et for items on another level, so long as they have shared the player's co-ordinates. You could (say) pick up the orb of Zot from D:1, or "blink" through a wall using a suitably placed scroll. It now only allows "(g)o to location" for anything on another level. -------------------------------------------------------------------------------- d0a131f | regret-index | 2024-09-23 02:21:44 -0230 Fix a teleport closet in nemelex_altar_shiori (Halvarca) The risks of compressing dense SUBST lines together combined with the no_tele_into flag, alas. -------------------------------------------------------------------------------- 3386d7a | regret-index | 2024-09-23 02:21:44 -0230 Let player illusions copy a lot more statuses The _player_duration_to_mons_enchantment list for player illusions (whether sourced from Mara, Nemelex, or Xom) is extremely short, unchanged in 13 years. Unsurprisingly, we've added quite a few statuses over such a span of time, but next to none of them have been included in this list. It's got a strangely flavour-based comment explanation above it stating that "internal" "magical" effects are supposed to be gathered, but not "external" effects- I'm choosing to forego this entirely, due to such logic being both 1: non-obvious, 2: weird to single out when illusions also are ostenibly getting one's collective equipment offenses and defenses, and 3: extremely out of date with other added "internal" magic effects. The old list of copied effects were: invisibility, confusion, paralysis, slow, haste, might, berserk, and poison. The new list adds on: barbs, blind, brilliance, corrosion, dimensional anchor, fire vulnerability, frozen, lowered or heightened will, -move, petrifying, poison vulnerability, resistance, sap magic, sign of ruin, swiftness, toxic radiance, vitrification, and weak. This should make friendly illusions a little weaker (which is fine, since Nemelex is quite strong) but with a few key upside uses (in preserving some notable effects like brilliance and swiftness). It should also make hostile effects a bit scarier (unless one is already heavily debuffed, which covers for itself anyway), which is good due to Mara underperforming these days and Xom always being in need of more noticeably variation in threat. -------------------------------------------------------------------------------- ea5bc36 | David Lawrence Ramsey | 2024-09-22 08:51:36 -0500 Fix typo. -------------------------------------------------------------------------------- b0d9199 | regret-index | 2024-09-22 04:18:47 -0230 More tweaks to more recent monsters * Experience value increases are being handed out to thermic dynamos (which are taking up quite a high proportion of kills versus appearance numbers), undying armouries (who are successfully providing very dangerous support roles while being reasonably sturdy themselves), and nekomata (who are successfully completely terrifying if not properly respected, can squash most other tier-1 demons, and are currently tearing apart Pan visitors). Since the winrate went slightly down in the last tournament, this should be fine in terms of slightly increasing overall amounts of experience in the game, and it should also help the monster threat assessment displays. * Sin beasts continue to underperform in Pan- unsurprising, considering their relatively low damage as melee threats that late. Rather than buff Geryon much further, sin beasts spawning rather than being summoned now appear in duos- trampling non-draconic monsters tend to spawn in bands as is, and their support capacities of antimagic and repositioning for other monsters will work better when they get another body to work with. * To help make finding the original nekomata easier to parse, their summons now get a differently-recoloured tile to help mark them seperately from the original beyond the small purple summoned status dot. (I'm divided on doing what AF_SWARM does and sending the summons to be owned by original caster, as this will make them summon copies much faster due to individual ones not having their own effective summon cap- I want more data before revising such an implementation.) -------------------------------------------------------------------------------- 8e166ad | regret-index | 2024-09-22 03:58:17 -0230 New tileset for granite statues in Depths, Zot The long granite statue tile list has a number of upsides and downsides. It provides reasonably easy flavour for given vaults of civilisation or ruin, it highlights the highly cosmopolitan population of the Dungeon and its branches, and they always immediately serve as a conspicuous highlighting point to indicate the presence of a vault. However, they also have major issues- with 29 different statue tiles depicting completely different matters used in excess amounts throughout every single branch regardless of that branch's flavour, they immediately all blend into the mental background. A given arbitrary hall in D, Lair, Snake, Swamp, Elf, and Zot all share depictions of angels, demons, warriors, and snails, which actually homogenizes those branches with the very means a vault is meant to stand out with. While an extensive list of highly-specific stand-out decorations have been deployed throughout 0.32 and 0.33 to try and provide more specific flavour, they can't be deployed absolutely everywhere without losing their own distinctive flavour, and already in their sparser uses lead to concern and confusion about whether or not they actually do anything. As an attempt to deal with such issues, I'm starting what may be an extremely long-term project, to deploy overlapping but mostly completely different tilesets for granite statues in different branches corresponding to their contents and flavour both. As I have plenty of artistic limitations, the bulk of what I'm deploying here is admittedly recolours using current tiles, unused tiles, and replaced tiles. Still, I am adamant that this overall effort is worthwhile for making a statue actually have any deliberate purpose rather than being effectively random noise in over 75% of their hundreds of uses. This commit starts off with Depths and Zot, branches that already heavily want to stand out as dramatic for being the end of a regular three-rune game. These statue sets include focusing down on demons, not-yet-walking tomes, liches, spriggans, and varying depictions of orb guardians over the ages. Hopefully they'll succeed at making Depths and Zot feel more coherent in their specific flavour, and the palette + statue tiles they'll share amongst themselves but not other branches will hopefully help connect the two branches yet further. "New" tile sources: * Tomes statue - Ploomutoo's decorative books. * Spriggan, vampiric fang statues - Coolio's spriggan berserker and mimic tiles. * Asmodeus, devil statues - roctavian's non-tall Asmodeus and blue devil. * Lich, seraph, serpent and old orb guardian statues - Denzi's old 32x32 and 64x64 tiles. -------------------------------------------------------------------------------- 9b1a444 | regret-index | 2024-09-22 03:58:17 -0230 New tengu tiles (Sastreii) Wonderfully sharp tilework as is usual. (I quickly threw together a new Shadowslip base tengu tile, since it was missing from the submission and those are relatively simple tiles to make. Maybe something else besides the tengu conjurer can get a goofy wizard hat that doesn't blend in so much with the tile in the future?) -------------------------------------------------------------------------------- f64d002 | regret-index | 2024-09-22 03:58:17 -0230 New decorations: weird machinery Both of these new, very rare, and harmless statue-variants are using pieces from the large tile submission by ploomutoo in 76a730d. Since they're much more advanced technology than is usual for the rest of the Dungeon, they're currently solely meant to be used in Wizlabs (where they can join conduits in being weird magicwork equipment) and Zot (where electric golems have been running around for decades, which has other sci-fi references in it, and which has always wanted to seem more notably different from the rest of the Dungeon). The enigmatic dynamoes are flavoured around knowing as little as possible about the machine, while the nascence circuits are flavoured around inexplicably knowing its exact purpose in making constructs. The duality of this should be cute enough to justify such an isolated shift in technological purpose (and neither actually implies that much more fancy capabilities than what iron and electric golems already imply). Both are only deployed in already relatively weird vaults or wizlabs that already focus on construct and mystery themes. (There have been some disagreements between devs about how much these tiles and other vault statues should be deployed, so for now, they're only in a handful of vaults each. Several other decorative statues and petrified trees are in less, so this is fine for now. In the future, there should probably be more overall decoration options, which will also help figure out what exact tones and contents each branch wants.) -------------------------------------------------------------------------------- 8908559 | regret-index | 2024-09-22 03:58:16 -0230 Ever-recurring vault review Of note: * grunt_temple_overflow_holy_war uses rock walls for wall_catacombs, so it matches the use of that rock in serial_column_ruins. * st's old swamp vaults now have several still-relatively-old Swamp monsters added to them so that they're less monotonously close to the Swamp rune vaults (since they lack the sheer number to hold any of the same interest said rune vaults also possess). * elves_outpost_lemuel and sword_in_stone are now rescaled earlier on, so they're not quite so aggressive with pre-Lair threats like e.g. 5.5 zephyrmancers. * Chaos zig floors no longer include greater demons (as proteans provide plenty of non-pan-lord variety and other floors emphasize plenty of greater demons at this point), while Vestibule zig floors use slightly slower amounts of silent spectres (as they become redundant after a certain point versus the actual threats of a floor) in exchange for more greater demons. -------------------------------------------------------------------------------- 2999c8d | patrick | 2024-09-21 23:06:20 -0400 Add a quote for the hand cannon. -------------------------------------------------------------------------------- d67f649 | DracoOmega | 2024-09-20 02:43:18 -0230 Don't attack an exponential number of times with cleaving quick blades (ie: if you have the Cleave status from Xom) The second attack against each target would initiate an entire new series of attacks against every adjacent enemy, which grew *wildly* out of hand with many nearby enemies. If you were sufficiently bad at killing them (maybe only possible in wizmode), this could even crash the game. Instead, only determine cleave targets from the first attack. -------------------------------------------------------------------------------- 3f967fc | regret-index | 2024-09-19 20:07:49 -0230 Hatch off a spider teleport island (#3611) I'm not the most worried about people using their last blinking scrolls to leap onto no_tele_into islands and having absolutely no other ways to get out, but we might as well be consistent about handling such through hatches. -------------------------------------------------------------------------------- 6e02436 | regret-index | 2024-09-19 20:06:06 -0230 Fix an Abyss crash (Implojin) ae9bbc2 screwed up Abyss feature conversion (as I had been indecisive as to whether or not fountains of eyes should be handled in sanitize_feature or push_features_to_abyss), and should now properly handle weird terrain again. -------------------------------------------------------------------------------- b814bfb | regret-index | 2024-09-19 19:55:38 -0230 Properly contain a runed door (#4040) minmay_the_grid_triangle_9x9_subtriangle didn't account for subvault usages that would connect in the backmost part- I've had to squish in the vault to make sure it's sealed in. This sometimes means that there's no actual monsters behind a runed door, but the vault creator has a deep antipathy against NSUBST and I'd need to review the entire rest of this file if I was going to make that more consistent anyway. Closes #4040. -------------------------------------------------------------------------------- 4cb121a | regret-index | 2024-09-19 19:48:14 -0230 Make the Robe of Folly actually a dull grey (#3787) The 16-year-old rltiles tile for the Robe of Folly has never actually matched its description as "a dull grey robe", a description roughly equally old. With a new fanciful Robe of Augmentation tile replacing a previously grey tile, I've quickly tweaked that old Augmentation tile to be both a dull grey and stained like the old Robe of Folly tile was. Closes #3787. -------------------------------------------------------------------------------- af0e7ba | regret-index | 2024-09-19 19:31:05 -0230 New default meat cache tile (pianoman523) Modified to be slightly redder than the original submission- they may be mostly cured and smoked meats, but they should also parse as meat. -------------------------------------------------------------------------------- 675ddfb | regret-index | 2024-09-19 18:48:41 -0230 A wide variety of new tiles (CanOfWorms) New Tiles for the Robe of Augmentation, Firestarter, the rarely-seen base forms for shapeshifter monsters and glowing shapeshifters, and living spells now in newly different shades depending on the spell they'll cast. There's also a new a great orb of eyes tile that I can't help but see a face in, and have thus mirrored to face left (as every single monster besides the one literally-sleepwalking monster does). We'll see how it feels in practice. -------------------------------------------------------------------------------- 22c7523 | regret-index | 2024-09-19 16:49:52 -0230 Fix a mutation text typo (CanOfWorms) -------------------------------------------------------------------------------- b1f659f | Nicholas Feinberg | 2024-09-19 09:08:50 -0700 Convert monster_shout to use a reference As a demonstration, and also cleanup. -------------------------------------------------------------------------------- 4d60b03 | David Lawrence Ramsey | 2024-09-18 23:38:10 -0500 Rename Agonizing Touch to Agonising Touch. -------------------------------------------------------------------------------- 39ec392 | David Lawrence Ramsey | 2024-09-18 23:25:29 -0500 Fix typos and spelling. -------------------------------------------------------------------------------- 36d77be | Index | 2024-09-19 01:49:17 -0230 Fix crash in Xom's wave of despair effect (#4037) If `place_monster_corpse` returns nullptr, the game crashes when trying to call `turn_corpse_into_skeleton`. Possible when placing a skeleton on a terrain feature that destroys items, like lava. (`move_item_to_grid` destroys the would-be corpse item) Example crash log: https://underhound.eu/crawl/morgue/seandewar5/crash-seandewar5-20240902-225318.t xt -------------------------------------------------------------------------------- a16d74b | regret-index | 2024-09-19 01:48:19 -0230 Revive ancient pizza memes (pianoman523) Add a new cache of meat tile by pianoman523 that clearly is Just A Pizza with slight extras. Since caches of meat are meant to convey a wider variety of meal options beyond pizza itself, the odds of seeing it out in the wild are relatively low compared to the current placeholder sausage + jerky tile, but it _can_ be specified by a vault, as has now been done for a few old vaults and with the revival of one old food vault. -------------------------------------------------------------------------------- cdc6e31 | regret-index | 2024-09-19 01:03:32 -0230 Reorganize monspell.txt (completely) and rltiles/UNUSED folder (a little) * Removed some tiles in the UNUSED folder otherwise already in use, renamed more &s as .small.pngs, and moved some more tiles to proper locations. * unused/armour/cornuthaum.png is entirely supplanted by item/armour/headgear/wizard_hat.png and is thus no longer stored. * monspell.txt has been alphabetized heavily, had several removed spells or specific-spell monster cast lines cleaned out, and had a number of entries placed in their right header sections. Hopefully, having an already alphabetized set of lists should make this have far less decay and rot set into the entire arrangement over the next years. -------------------------------------------------------------------------------- a3ff4ff | regret-index | 2024-09-18 21:02:02 -0230 New creepy-crawly tiles (Sastreii) New brain worm and culicivora tiles, to be specific. -------------------------------------------------------------------------------- 37ed16d | regret-index | 2024-09-18 19:46:00 -0230 Fix gold_lair_mu's teleport islands (#3612), update it The bug report issue pointed out some teleport islands, which I've handled here through hatches since it's not the most compactly threatening vault by any real margin. While I'm here, I also fiddled with the header to fit more house style matters, removed oklob plants entirely as are harmless at Depths depth, and doubled the golden dragon count (to two) due to golden dragons no longer being such a rare highlight with the reworking of D:16-27 into Depths. -------------------------------------------------------------------------------- 97551ef | regret-index | 2024-09-18 05:41:52 -0230 Adjust blizzard demon flavour, messaging, substance (Lici, acrobat) With blizzard demons having had a formless (and angry) crackling cloud tile for over a dozen years (e970459), they can reasonably count as insubstantial. With c2ce1f5 having changed their shape out of a humanoid state, their Airstrike message has been screwed up (not that it's ever really clear they ever had conventional arms), so they now have a custom. arm / hand name string. With a deeply generic elemental description since their inception in caa05f8 (not a single other demon is even just described as "greater"), they can do with even the slightest bit of emotion-driven flavour in their description and cast messages. -------------------------------------------------------------------------------- 4c57dba | regret-index | 2024-09-18 00:13:34 -0230 Fix an include error 727ca9e forgot to include coord-def.h in mon-clone.h adding a new default argument for clone_mons. Weirdly enough, regular compiliation didn't complain at all about this, probably due to chain includes. -------------------------------------------------------------------------------- 8afca07 | regret-index | 2024-09-18 00:05:44 -0230 Fix the build Forgot to not cast players as monsters in 9f88647. -------------------------------------------------------------------------------- 80eda39 | Lexi Hattaway | 2024-09-17 22:30:39 -0230 Add arrival / ecumenical / ice cave entry vaults (#3984) [Committer's notes: Most of what I'd do here was sent as feedback to the PR and eventually handled by the submitter. The only things I'm doing here are tweaking one of the vaults' header line orders and squashing all of the commits into one. Merges #3984.] -------------------------------------------------------------------------------- 5656a03 | regret-index | 2024-09-17 22:30:39 -0230 Prevent more species dummy monsters from getting Crypt zombies Since the player isn't expected to fight plain deep dwarf, tengu, draconian, or vine stalker monsters in general, making their zombies in Crypt is deeply silly and weird. The former two at least have the reasoning that they were previously regular monsters and got removed from such a position, the plain draconians are weird (holdovers from shapeshifters turning into them)?, and vine stalker zombies raise general questions of "just how alive is their host body" that are difficult to answer. -------------------------------------------------------------------------------- 9f88647 | regret-index | 2024-09-17 22:30:39 -0230 Don't let chaos confuse boulders and bombs (#3654) Most mons_is_conjured spell components shouldn't be confusable in the first place, aside from the vortices already being redundantly pseudo-confused- they all have specific behaviours that don't work when confused or acknowledge being confused. Closes #3654. -------------------------------------------------------------------------------- 727ca9e | regret-index | 2024-09-17 22:30:39 -0230 New Pan demon: nekomata Pandemonium could always do with some more variety beyond the demons one sees shared between summoning from the rest of a 3-rune game, the demonic vaults before Lair branches + entry vaults Depths, and the demons shared with the Abyss and the Hells. Demonspawn enemies and Pan lords themselves reasonably help with this, but there's plenty of hypothetical space across multiple glyphs to fit in more monsters, especially in the danger tier that demonspawn try to fulfill between tier 2 and tier 1 demons. This new feline demon of trickery and disdain, a white "R" in console, is meant to try out a strange conjoining of archetypes- it is a ranged weapon threat _and_ a summoner, simultaneously. In the former aspect, it always comes with a branded ranged launcher (of flaming or draining, to reflect its arson and necromantic mythological capacities), plus Repel Missiles (as we never used in extended) and a demon blade (of either brand) as a fallback. In the latter aspect, it has a high chance to cast a new conjurations spell- "Phantom Blitz", a single-target projectile that deals damage and summons a copy of itself where the projectile stops. The summon cap for the spell is only 2, but each of the clones have their own summon cap for the spell, which should be memorably terrifying if let out of control. This thus has the unique, cruel property of being even stronger than previous monsters that summon-on-hit by instead summoning from a distance with a conjuration, and works as a new iteration on the illusion mechanics of other eastern demons used in Crawl already. In its placement, it joins Pan and ranged Zig floors, gets to appear as a mage in Lom Lobon's floor and in a few guaranteed demonic rune vaults, plus regular Pan floor monster set generation / orb run sightings. Very high level Xom worshippers may also see them rarely- a summoning demon that can get out of control feels entirely appropriate for Xom. Their tile is a modification of Sastreii's current rakshasa tile (with twin tails pulled off of Denzi's felid tiles). The current rakshasa tile is far too cat-like to be any mythologically accurate- a proper rakshasa may be somewhat beastial, but is hardly a full anthromorphic design, and also usually somewhat deformed. (Blame D&D for the tiger associations.) The previously-unused tile by meckryl still emphasizes ornate accessories while fitting a more fangsome and asymmetric appearance, and is now used for the rakshasa earlier in the game instead. The Phantom Blitz spell icon placeholder simply modifies ontoclasm and roctavian's Searing Ray icon. -------------------------------------------------------------------------------- 2b7a90c | DracoOmega | 2024-09-17 15:38:32 -0230 Remove a tiny bit of obsolete code It isn't actually possible to directly create skeletons of active monsters since the removal of Nectotise. -------------------------------------------------------------------------------- fe4f17d | DracoOmega | 2024-09-17 15:38:32 -0230 Update a comment Fountains haven't counted as water since b47861556a4dd18e -------------------------------------------------------------------------------- 4012fd3 | DracoOmega | 2024-09-17 15:38:32 -0230 Fix a rare crash with Dith shadow shot If the player made a ranged attack which killed its primary target, and also triggered a shadow shot while the player shadow was not already out *and* the player was both invisible and could not see invisible, the game would crash. If any of these things was not true, it worked properly. (The issue stemmed from fuzzing for beams near invisible players and how MID_PLAYER was used as the source of the tracer for determining what other target the shadow should shoot at, if it wasn't deployed yet. But MID_PLAYER_SHADOW_DUMMY was added for the specific purpose of simulating a player shadow that doesn't exist yet, so use it instead here. To be honest, I'm not sure why it wasn't already.) -------------------------------------------------------------------------------- 8218d4f | Sean Dewar | 2024-09-17 11:55:17 +0100 Fix crash in Xom's wave of despair effect If place_monster_corpse returns nullptr, the game crashes when trying to call turn_corpse_into_skeleton. Possible when placing a skeleton on a terrain feature that destroys items, like lava. (move_item_to_grid destroys the would-be corpse item) Example crash log: https://underhound.eu/crawl/morgue/seandewar5/crash-seandewar5-20240902-225318.t xt -------------------------------------------------------------------------------- fd2f4f1 | brandon s allbery kf8nh | 2024-09-16 21:27:03 -0500 don't crash if shadow can't be placed (ChongLi) If a player is surrounded by monsters to depth 3+, _get_shadow_spots produces an empty vector and the game crashes trying to dereference the first entry. Check for an empty vector first. (https://cbro.berotato.org/morgue/ChongLi/crash-ChongLi-20240908-132253.txt) -------------------------------------------------------------------------------- df7c40b | NormalPerson7 | 2024-09-16 21:00:13 -0500 Don't auto-hide currently unmemorisable spells when picking up books Previously, if you worshipped Okawaru (for example), spells which could not be memorised would be silently added to your library and also hidden in your library. Spells that can't be memorised do not appear on the spell library interface, so this had no actual effect as long as the spell could not be memorised. But, say, if you then abandoned Okawaru, you would find all their previously unmemorisable spells hidden in the library (so that, to unhide and memorise them, you would have to visit the "Show" screen). In practice, this meant many players would just assume the spell was lost forever. Resolves #3994. -------------------------------------------------------------------------------- 4126433 | DracoOmega | 2024-09-16 20:08:03 -0230 Don't boost !magic from Potion Petition by being an oni/Kyrias (Lici) Technically !ambrosia would also be bugged in this fashion, were it possible to actually get it via Potion Petition. -------------------------------------------------------------------------------- ad5dd90 | DracoOmega | 2024-09-16 20:08:03 -0230 Don't generate coglin gizmos with Rampage for Chei worshippers In the same spirit that acquirement respects items your god bans, don't let coglins of Chei invent gizmos with rampage (which therefore rules out an entire whole item, along with its guaranteed properties). -------------------------------------------------------------------------------- e7007fb | NormalPerson7 | 2024-09-16 20:07:53 -0230 Don't gain experience from killing allied apostles Previously it was possible to kill your apostles with e.g. scrolls of poison, not incur wrath, and gain experience from the kill. I can't really imagine players ever wanting to take advantage of this, but nonetheless it goes against the spirit of Beogh so let's prevent apostles from giving experience. -------------------------------------------------------------------------------- c4b1687 | NormalPerson7 | 2024-09-16 20:07:34 -0230 Preserve bribe enchantments for reviving bennu Previously, if a bennu was friendly-bribed in their first life, it would revive as a permanent friendly ally that could follow the player everywhere. If it was temporarily neutral-bribed, it would revive as a permanent neutral monster. Fix this issue by preserving friendly and neutral bribe enchantments upon revival. Sidenote: currently unbribed bennu get a second chance to become bribed upon revival - is this good behaviour? Resolves #4026. -------------------------------------------------------------------------------- 45882a5 | NormalPerson7 | 2024-09-16 13:57:27 -0500 Fix HP/MP not updating when (un)equipping the Charlatan's Orb Make the Charlatan's Orb explicitly update the player's HP and MP in its equip/unequip functions. Also add the Charlatan's Orb as a cause of increased skills on the skills screen to fix the previous text "Skills enhanced by are in green." -------------------------------------------------------------------------------- 55f019e | DracoOmega | 2024-09-16 16:08:21 -0230 Make exploding sheep properly flee from the player (Lici) The dream sheep spawned by kb_xom_exploding_sheep are generated permanently afraid, with the presumable intent that they run away from the player, however they aren't generated being *aware* of the player, which means that they usually have an internal target of (0, 0) and they try to run away from that instead of the player (ie: they just move south-east in general, regardless of where the player is). If any other monster shouted or the player otherwise got the sheep's attention somehow, they would start fleeing in the proper direction, but it could still sometimes be a rude surprise to a low XL player. So let's try to get them moving in the right direction to start with. -------------------------------------------------------------------------------- f9f973b | gammafunk | 2024-09-16 09:18:11 -0500 task: Remove the trunk 0.32 tournament reminder This reverts commit b3de7b944d009aaea3c3fea32e8150c556050f64. -------------------------------------------------------------------------------- bf3d107 | regret-index | 2024-09-15 23:41:53 -0230 Scale Zig sets a marginal amount harder Since the quadratic scaling introduced in 5942d1e seems to have gone on perfectly fine without much noticing for ziggurats in the last tournament, we clearly can do with a little bit more harsh scaling for more floors. Worthy of note: * Tar floors become almost entirely tzitzimimeh and silent spectres. * Dis floors become almost entirely hell sentinels. * Fire floors become almost entirely orbs of fire. * Holy floors become almost entirely seraphs. * Abyss, as a branch that can technically spawn silent spectres, now joins the fun of becoming a floor with explicit silent spectres and a swapping out of liches for daevas (who still smite under Silence). Also, with increasing chances up to a guarantee on the ninth completed ziggurat, Zot traps replace the floor of many (but not all) ziggurat pillar vaults after one has completed more than one ziggurat, so that pillar vaults are more noticeable amongst all the rest of the enemy spam. I do want to still come up with more unique scaling effects for ziggurats, later in this version, but they'll most likely wait until after more Pan and holy work is done. -------------------------------------------------------------------------------- 9310caa | David Lawrence Ramsey | 2024-09-15 20:39:18 -0500 Fix doubled foul flame melee attack damage. The previous doubling of damage was only supposed to apply to foul flame weapon attacks. This partially reverts 90a6e0420698cfe08bc0206b481ef80845585b54. Closes #4000. -------------------------------------------------------------------------------- 01db4b9 | regret-index | 2024-09-15 18:42:45 -0230 Make Ephemeral Shield only activate on invocations that cost anything (Ge0FF) Mostly to prevent instantly renaming one's ancestor from providing free SH over and over again. "Costs" as the mutation description now mentions include piety, HP, MP, cards, gold, max HP draining, Exhaustion, -Recite, and (begrudgingly) sacrifices to Ru. It's a weird list, but for the most part it should be fine for costing something or another preventing most invocations spam anyway- the only real cost here is losing Wu Jian wall-jumps, and Serpent's Lash is already an invocation that can highly value getting some shields afterwards. (I'm not greatly worried about this still counting allies recall, as I mentioned in 9303715. Wasting the turn for 7 SH is unlikely to be of much value versus either walking away from enemies or swapping behind one's allies, and the mp cost is not insignificant when the gods with Recall also have MP-costing abilities of much higher value between Smiting, Torchlight, and Idealize.) (There _might_ be some arguing about cards, Exhaustion, and Recite all counting. We'll see how this feels out over the long time it takes for non-Xom non-Jiyva characters to even see the mutations.) -------------------------------------------------------------------------------- 433eeba | regret-index | 2024-09-15 17:32:41 -0230 Let player berserk give immunity to fear (DracoOmega) Berserk monsters are immune to fear when berserked (as is obvious with early black bears), but players aren't (and a comment has been wondering about this discrepancy since c6d2f85). Cause Fear is a relatively rare effect only used on about four monsters, so it's not too significant a monster nerf / berserk buff (and those monsters all either meaningfully summon or debuff from a distance, so there's still some danger), but it adds a little more consistency in a relatively player-generous fashion. (Also of high importance: Crawl doesn't show the fear aura that well when one is also berserk, and it'd be a massive headache to try to make it do so. Happy dual solutions.) -------------------------------------------------------------------------------- b1b5fd0 | regret-index | 2024-09-15 17:32:41 -0230 Marginally nerf ball pythons After the major constriction rewrite of 9adf0d1, ball python have finally started to successfully tutorialize on the existence and power of constriction for D:1. This is good! It means there's a monster with a gimmick that'll take a fair ways longer to be seen again, that can allow experimenting with the gimmick much earlier, and which stands out amongst other D:1 and D:2 enemies in its support + damage role. However, they're also a noticeably increased threat on D:1, which doesn't really need the bump upwards- between the two tournaments, they moved from the 43rd killer to the 13th. A good promotion, but possibly a bit much for one. As such, I'm nudging down their non-constriction damage and their EV very slightly, which should make it easier to kill them when there's other enemies around, but which should also still let their newly finally threatening constriction be somewhat noticeable if they're not focused down on. -------------------------------------------------------------------------------- c2ce1f5 | regret-index | 2024-09-15 17:32:40 -0230 List which monsters can open doors There are a number of monster tile bodyplans that would seemingly preclude the ability for a monster to open doors, yet some of those monsters still can in practice. Sun demons, ugly things, tentacled monstrosities and starspawn, glowing orange brains, various weirdly-composed golems and wraiths (including putrid mouths), Gloorx Vloq, Lom Lobon, and orb guardians make up the most obvious candidates here. It would be a significant nerf to make many of these unable to use doors (and console has gone on by knowing e.g. most Xs and all tiered demons can use doors). Instead, this could be addressed by UI means somewhat directly. This comes with a variety of different attempts to address this: * Every monster that can wield equipment already has the ability to open doors. Doors descriptions (outside of runed and sealed doors) further emphasize this fact, as well as mentioning some monsters that don't use equipment but can open doors. * Monsters that could have equipment but haven't found any (crimson imps and iron imps being the obvious stand-outs), as well as monsters that only have MONUSE_OPEN_DOORS, now mention it amongst the other travel lines. To try to make the nonstandard-appearance door users stand out, monsters that lack a humanoid shape have a conspicuously different properties line than normal. * (Ufetubi are now MONS_SHAPE_BIRD (they're closest to penguins), sun demons are now MON_SHAPE_ORB (matching foxfires and orbs of fire), and blizzard demons and putrid mouths are now MON_SHAPE_MISC (matching worldbinders as hands in clouds). This should only affect messaging and not anything else.) * Jellies, Xtahua, and the Serpent of Hell also explicitly mention they can eat or crash through doors, as well. * To try to reduce the number of description lines here, don't bother listing off if a monster could survive in water or lava if it already flies- currently, there's no way to ground enemies without outright polymorphing them anyway. If there are sufficient complaints about excess monster information displayed here versus other more important bits, then some of this can be reverted. I'd like to keep the unusual door interactions and avoiding flying + water travel reductions, regardless. -------------------------------------------------------------------------------- 1d4d42d | regret-index | 2024-09-15 17:32:40 -0230 Prevent polymorph and shapeshifters from accessing base tengu Plain base tengu monsters were used for a while as regular monsters in making classed tengu into regular monsters, but were cut for being far more plain and weaker than comparative naga or merfolk. As such, they never got the M_NO_POLY_TO tag other base player-species monsters got, which I'm fixing up here- if it's not already a branch spawn, the only player species monster that's allowed to spawn normally (i.e. not as part of vault decor) are humans. -------------------------------------------------------------------------------- 7901554 | regret-index | 2024-09-15 17:32:40 -0230 New spell / unrand tiles by Sastreii, some unused tile reorganizing New great tiles for Permafrost Eruption, Magnavolt, Hellfire Mortar, Fulsome Fusillade, the hoarfrost cannon and hellfire mortar monsters, and the unrands Brilliance + the Sword of the Doom Knight. Most of the previous tiles were moved to the unused folder, and I've now now moved many old spell tiles from the unused/gui folder to their proper unused/spells folder while tweaking said tiles. -------------------------------------------------------------------------------- 9a799e1 | regret-index | 2024-09-15 17:32:40 -0230 New decoration: cache of baked goods A follow-up to 831329d in terms of providing more options for civilized and lived-in housing flavour, though with some different angles here. These try for species' culture flavours rather than cultivars of fruit or given animal meats, and they're creeping into spriggan / centaur / klown / V vaults more than caches of meat go towards carnivore species and caches of fruit go to various old fruiting plants / trees. As with the other food caches, Xom also can spawn or shuffle them around, and they use the same food_snacking_frequency option added in 9f76b2e. This also gets to mean the triumphant return of spriggan bakers. Their tiles are by ploomutoo, edited slightly from 1a665c4 to have more outlining as helps with lighter background tiles. -------------------------------------------------------------------------------- 5c82c18 | regret-index | 2024-09-15 17:32:40 -0230 A quick distribution of some new decorative tiles * The yak with flowers on it is now part of the Elyvilon peaceful quokka vault at further depths and one of the more grassy bazaars. * The bailies with orc warlords now get quick wall tiles dedicated to Beogh, using one of the Beogh wall banners. * A few vaults meant to be a nice, idyllic home or garden get the gardens with cobblestones around them. * A few Vaults and Zot vaults sample from the newer fountains. Ideally, I'd like to use different fountain tile bases per branch, but this would need more than just palette-adjusted drawing efforts for dry + eye fountains- probably would be good to ask other artists for such. TODO: Write up decorlines as was done for food and fountains for different types of flowers between each branch, add a variant recolour or two (and use the version without the cobblestone in Lair), then have gardens be a new kind of walk-on-for-commentary terrain type? -------------------------------------------------------------------------------- 76a730d | perci | 2024-09-15 17:32:39 -0230 Added a batch of 44 vault decor sprites (#3992) "including baked goods caches, flower pots, banners, fountains, and a mop" [Committer's notes: Pretty great tiles that'll help spruce up a large number of vaults and portals and branches. Squashed the three commits together, put the wall tiles into their own folder, made one additional variation of a flower garden tile going into UNUSED for future plans, and updated some comments + moved it to the right position in the text file. Following commits will make use of a number of the more straightforwardly usable tiles. Not entirely sure how to handle some of the others, but the overall set can be useful for other devs in the future. Closes #3992.] -------------------------------------------------------------------------------- fe9c01f | regret-index | 2024-09-15 17:32:39 -0230 Comprehensive updates to pitsprint This was a bit of an experiment to see how it'd feel to try and make one of the most flexible sprints (due to its game-wide monster tiering system) catch up to the modern day, after the decade since any sprints last got any serious work on them. It took far more than I expected, so I'm not in much of a rush to update much of the other's. * Half of Crawl's development's worth of enemy additions have been added to the Sprint's monster tier sets (that are mostly bound solely by power, not theme), which should heavily increase enemy variety. * Through the complete revising of the monster tier sets and the addition of one more monster tier, the power curve of the Sprint is more generous early on and more lethal later on- of particular note, the Storerooms, the Metal Vault, the path to the Armoury, and the Steel Vault have less spiky difficulty than prior, while the iron rune, golden rune, and Orb of Zot are all even more heavily guarded than they used to be. People like shrikes, right? * The Storerooms contain one randbook at the end (so spellcasters aren't forced to take a small number of gods to get any spells between their starting book and the Elf:3-styled Coven), and several lower-level talismans (so Shapeshifters aren't utterly hopeless). Each rune contains increasing amounts of scrolls of acquirement underneath them, also, for a splash of possibly-actually-worthwhile variety amongst the excess of later loot. * The labelled chambers between sections are now distinguished from other doors within the vaults and pits by being opaque runed doors. This should help make them stand out more for the sake of examining them to see the difficulty order one can take throughout the Sprint, and also help them stand out better in tiles. * The Crystal Vault is now the Titanium Vault, since it was never actually made of crystal walls in the first place and the Coven actually did in fact have Crystal walls surrounding it. -------------------------------------------------------------------------------- 1e7691d | regret-index | 2024-09-15 17:32:39 -0230 Add a dozen-plus mythological randart armour names The myth sources in question are mostly representing relatively sparsely-acknowledged continents and regions in fantasy- Africa, South East Asia, and further parts of South America. Maybe some day a game will directly feature rainbow-furred lightning anteaters or basket-headed hyenas, but for now, more references are always good to send some slim number of players off learning more for. -------------------------------------------------------------------------------- 626d331 | regret-index | 2024-09-15 17:32:39 -0230 Give runed translucent doors actual descriptions (CanofWorms) The commits adding clear runed doors and making them spawn regularly throughout the dungeon, 546a308 and b3145dc, both didn't actually give them descriptions, I'm just combining the regular translucent door and opaque runed door descriptions here, which should be functional enough. (On a tangential note: we probably just make regular translucent doors and translucent rock / stone walls actually made out of glass, rather than mentioning magic wood for the former and being so wordy for the latter. Glassblowing is thousands of years old, to the point of being older than iron smelting, and we already have trees for "things players could expect to destroy without much effort but instead have to use specified means to do so". This would probably have to come with making glass eyes not LRD for an extra large radius, though.) -------------------------------------------------------------------------------- c186b92 | regret-index | 2024-09-15 17:32:38 -0230 New holy monster: Fravashi Whether or not the full longterm plans of a holy rune and a shortened rest of extended follow through, there's still some reasonable value in adding and keeping around other holy monsters. For over a decade, we kept around a unique encompass vault in Pan that was supposed to test and showcase holy monsters, only for six out of twelve non-boss monsters to all have been cut for various strange mechanical experiments. It's hard to say, however, that Pan should lose the vault- with nine different runes dedicated to partially or fully demonic realms, there's a lot of obvious value to having a vastly different theme to varying games up with. As such, on occasion, more holy monster work will be followed through. Fravashi are Zoroastrian guardian spirits both for and from heroic mortal spirits, and here serve as the fourth simple humanoid(ish) 'A'ngel between angels, daevas, and cherubim. (Aside from fitting the martial angle TSO innately provides for humanoid holies in this game, they also continue to attempt to broaden the sources of holy monsters beyond Christianity, if somewhat ironically through using a faith angled to the opposite of daevas.) They lack angel speed or daeva tower shields and smiting spells, but as both embodiments and guides of moral champions, they represent a relatively straightforward, inverted component of holy worship in Crawl- they summon a single living warrior to their cause, which in this case is a deep elf blademaster or a spriggan defender always granted a holy short blade or two. Most non-unique summoners in Crawl try to be dangerous by hiding among multiple summons or plying on much later enemies than one might fight otherwise, but these should serve a unique purpose by doing meaningful damage from behind their summons with a two-handed holy or electrocution polearm. (There's a neat incidental theme across the weapon-wielding holies that they all have next to no randomization in their weapons and emphasize different weapons each, which this continues to invoke.) Much like pearl dragons in their prior high-damage state and ophans with their new extremely powerful support status, these are not meant to show up in almost any 3-rune game aside from the occasional vault already using angels and daevas out in the open. They thus are only set to appear in sparse late-game / extended / sprint uses of holies, and do not appear with TSO's summoning invocation. Their placeholder tile is a mix of the deep dwarf artificer tile made by Coolio, the phoenix tile made by Porkchop, and an old dwarven buckler tile by roctavian. Their Summon Mortal Champion spell icon combines CanofWorms's Okawaru weapon acquirement, the standard summoning circle, and a spriggan defender coloured slice of roctavian's deep elf blademaster tile. -------------------------------------------------------------------------------- c637f1b | regret-index | 2024-09-15 17:32:38 -0230 Adjust some portal monster population tables This mostly just affects scrolls of summoning, Kiku's wretches, and the rare Xom action, when inside these portals, unless somebody ends up using Shadow Creatures casters in any of them. Still, it's good to keep an eye on them ever-so-often whenever the portals themselves are changed. * Since a couple of Sewers have dart slugs as of e431911, they've been added to the list to reduce the chances of the high-roll crocodiles and take some weight off the not-very-thematically-appropriate quokka. * Ice caves haven't had non-summoned ice beasts in them since cc58b11, so their notably high weight in the list is weird. They have given most of their weight over to adding in wolves at a low weight, plus increasing the odds of the highly appropriate (and readily findable) polar bear. * Volcanoes only have one layout with toenail golems, so their high chance to place is relatively quite weird. Their weight has been reduced down slightly with obsidian bats and fire crabs, and given over to the iconically-present salamanders and fire elementals. -------------------------------------------------------------------------------- cc540e3 | regret-index | 2024-09-15 17:32:38 -0230 Unite jellies and water elementals under M_AMORPHOUS, tweak other checks There's been some consternation for a while that water elementals and elemental wellsprings, as entities composed of liquids, should have the same immunities that jellies get (constriction, webs, nets as of 4fe0c3d). There have been a few requests to make them insubstantial (c.f. PR #3032), but I would prefer to instead unite them with jellies in a new flag that can reduce the number of jelly genus checks, instead of granting the water-formed enemies immunity to petrification or implying that a monster which can entirely engulf a player also has no actual substance. This commit adds the M_AMORPHOUS flag, shared by both jellies and water elemental / wellsprings. This gives the latter web, net, constriction immunity, and Shatter resistance as the former does, and hopefully should feel a bit more logically consistent while cleaning up a weird check scattered across the code base. This commit additionally teaches the monster information bots to display insubstantial and amorphous flags, as is useful for offhandedly checking net and BVC immunity. (This commit also removes the barbs immunity from jellies. If they'd be immune to barbs because they can force the barbs out of themselves, then the same can be said of all sorts of other physical projectile states, like Frozen. The committer of dd4bd0d agrees with doing this.) FIXME: Borgjnor's Vile Clutch always listed the hit chance as 100% for insubstantial enemies, and continues to display it for amorphous enemies. It's a very silly targetter since it's always 100% or 0%, but it should show the latter for those immune to it. -------------------------------------------------------------------------------- 5cebcaf | regret-index | 2024-09-15 17:32:38 -0230 Yet more Xom and tension tweaks * Xom polymorph now cannot target monsters before XL 4 if they're over deep water or lava, as the attempt to prevent them from drowning can easily produce D:1 killer bees or ynoxinuls. Xom polymorphing hostile monsters up in HD before XL 10 now also comes with a consolation prize of a malmutate, to make it slightly less horrendous to handle very early. * Bazaars have been randomized some more to mildly weaken them; I had originally designed them anticipating it to be far more rare that what turns out in practice, and them appearing at all is already plenty of a buff to Xom enough they can take some downtweaks. * Manuals no longer extra bias to be evocations or shapeshifting, * Spellbooks have a fifth potential spell in each school but are now capped at two spells available per book, * Randart jewellery has a small chance to be randart amulets of both regeneration and faith with the same downsides, and no longer shares the exact same downside in each bazaar, * Xom bazaars contain only two of the three wands and only one of berserk potions, ambrosia potions, or silence scrolls, * Orbs and scarves have a new joke dud option, * and Xom bazaars past the first have been made yet further rarer, while somewhat more gold is recquired to access bazaars at all (which hopefully should also delay them until after seeing Orc.) (The talismans are untouched mostly in anticipation of the future version's development hopefully helping with shapeshifter variety needing more than it currently does in general. The reduction in chance to get a manual of shapeshifting probably reasonably nerfs this enough for now.) * Xom draining now is halved (draining 3.25% instead of 7.5% of max hp) if one is very low level or already any drained unless Xom is bored or wrathful, as there's some unfun death spirals to getting heavily drained repeatedly and it's a lot less unique than many of the other ways Xom can try to kill the player. * Since the demonic plant / toadstool ring is meant to be an relatively positive action, Xom now checks if there are monsters with smiting attacks that aren't at least two squares or closer to the player, and needs there to not be too many as long scaled versus one's XL. * Sleeping and feared monsters now count for an notably small fraction of their experience value for the sake of tension assessment (instead of counting as absolutely zero threat). Sleeping monsters in sight are unlikely to stay sleeping for long, and feared monsters can turn around for all sorts of accidental or terrain-based reasons. -------------------------------------------------------------------------------- 0f4f676 | regret-index | 2024-09-15 17:32:37 -0230 Further adjust Cheibriados wrath and haste response Cheibriados wrath uses tension very strangely with a both fine-grained yet randomized fashion. Since tension is useful only as an extremely loose assessment and awkward to ever calculate versus given threats, I'm going to heavily simplify the check, so it will hopefully reduce the need to keep an close eye on this wrath whenever adjusting tension in the future. The five different tiers of mixing together effects across Cheibriados's current wrath have been reworked and combined into three instead. * If there's almost any notable tension: * current hp >= 75% of your max hp: inflict sleep. * Otherwise: remove haste plus inflict slow. * Otherwise: drain stats plus make an extremely loud noise. This is still dynamic in its own straightforward fashion, hopefully: bringing in more enemies while exploring, threatening the player without just using direct damage while in combat in a fashion that can technically be survived, and statdraining the player heavily if they try to wait it out in a closet. To disincentivize the last of these, stat drain has been further pushed up in severity. (Cheibriados wrath has been repeatedly heavily changed, perhaps because the time theme is one of the loosest in available themes for malevolent effects- wrath once contained miscasts, other god wraths, random item curses, and so on and so forth. God wrath doesn't inherently need the most variety as long as it's actually reasonably threatening in a distinct fashion, though, as can be seen with Hep and Ash and Ru, so it should be reasonably fine in this very compressed state.) Also in this commit: Cheibriados now prevents potions of haste from ever actually affecting the player, rather than forgiving them only if they drink it unknown and throwing them into penance otherwise. This is mostly meant to makes matters more consistent with Chei's prevention of haste from chaos and berserk, as well as with Okawaru's prevention of using ally summoning scrolls. In the future, it also helps with probably just making all penance just involve removing god passive benefits and invocations as the good gods and Beogh do, as piety loss to a sufficient degree and said restrictions can be plenty enough downsides, and it'd make god penance fairly more straightforwardly parseable for all gods. -------------------------------------------------------------------------------- 0666555 | regret-index | 2024-09-15 17:32:37 -0230 Adjust and replace some unrand tiles * Implement ploomutoo's new replacement for the toga "Victory" floor tile, extracted seperately from PR #3992 since the rest of that PR is about a different topic entirely. Annotation for future reference: it's meant to represent a toga praetexta. * Brilliance and Punk now have actual acid brand and foul flame brand icons, the former mixing together snw-0's modifications of ontoclasm's electrocution and holy wrath brands, the latter mixing the same snw-0 and ontoclasm sourced exploding missile / immolation scroll icon with UltraViolent4's corroded status icon. (Previously, their brand icons generated by bleeding over into the old list of missile icons, marking foul flame as an electric weapon and acid as an exploding weapon.) -------------------------------------------------------------------------------- 8966e59 | regret-index | 2024-09-15 17:32:37 -0230 Fountain decor messages + new options to set their frequency Since the fruit and meat decoration messages have worked out reasonably well, we clearly could expand this notion to the other already-present breadth of entirely-decorative features: fountains. Since there's not nearly as many varieties of water that are of interest compared to different varieties of fruit and meat, these messages mostly take on an entirely different tact- they instead differ by one's worshipped god. The gods already serve quite directly in Crawl as some of the most prominent personality and flavour throughout the game, and they can lend some reasonable (and potentially mildly controversial) characterization to the otherwise featureless, faceless adventurer all characters serve as. Some of these gods surely have very obvious influences and focuses on their worshippers, after all- shouldn't a Makhleb worshipper care in some way about a fountain of blood? These messages come with yet further experimentation in flavour lines. Many messages are only provided when there are no hostile enemies in sight, and the chance differs based on said hostile presence: 10% if they're present, and 40% if they're not. (Much like as was done in 9f76b2e, this comes with a new option: "fountain_line_frequency".) This also comes with a brief flavour nod (but hopefully not much chance of confusion) back to sparkling fountains being differentiated by having miniscule magical effects. Not all god and fountain combinations come with unique lines, but there's enough cute little lines written up that it should be a good start. Thanks to Darby, staticshock, and nicolae for additional message ideas, and DracoOmega for both additional messages + proofreading. -------------------------------------------------------------------------------- ae9bbc2 | regret-index | 2024-09-15 17:32:37 -0230 New decorations: fountains of eyes Fountains have been heavily established for a decade as entirely decorative features, which is both beneficial (parses immediately as a sign of civilization or ruin, doesn't have to interrupt the hyperfocus Crawl has on combat) and detrimental (they usually immediately fade into the mental background). Since we've already got melodramatic features like fountains of blood established for many years, we might as well try out more weird materials that can be a little more memorable. Fountains of eyes recontextualize a never-used tile submission for great orbs by pubby in Mantis Issue 9606. They spawn solely in the Abyss (replacing fountains besides blood when the Abyss layouts choose levels one has been through before) and a few vaults elsewhere with explicit themes based on either flesh, organs, or shapeshifters. They should probably help Crawl continue to feel memorably weird. (As to why they're not just vault renames of fountains of blood, a follow-up commit will actively use the differences between the two on a lower scale.) Possibly in the future we may get further unique fountain options? -------------------------------------------------------------------------------- fe3b5c5 | regret-index | 2024-09-15 17:32:36 -0230 Partial transitional vault review A fair number of changes I noted down during feature freeze and the 0.32 tournament, to nerf and tweak a number of vaults. Worthy of note: * beargit_hepliaklqana_dungeon_heroes only uses wands of polymorph on D:3-4 and atropa darts on D:5-6 instead of wands of charming, as it's far too easy to get completely locked down if one doesn't have much luck with potions of curing early on due to monsters zapping wands very frequently due to spells (the brigand even has higher chances to confuse than Sigmund does). If wands of charming get a different player effect later on, then these can be returned. * Moved _guarded_unrand_wrath_of_trog to Elf instead of D:13-15. If the idea of guarded_unrand vaults is to use out-of-depths one can leave for later or reasonably run away from, then being able to autoexplore into three spriggan berserkers on D:13 breaks this rule. * serial_library no longer generates Sif Muna altars before D:8, in correspondence with other early non-Portal altars being heavily curtailed. * The old Forest end Depths vaults now no longer use any deep elves, to further distance itself from Elf and Vaults using deep elves. * One of the_grid vaults has been tweaked so it no longer places ancient liches on D:14, as we've mostly stopped doing without the use of runed doors. * Gauntlet monster sets have been repeatedly tweaked over, as they were never adjusted after the buffs to glowing orange brains. The highest non-Minotaur killers in the portal by a noticeable statistical margin have been somewhat nerfed (death scarabs and death drakes), while some of the least common killers have slightly more company (arcanists / occultists, tyrant leeches, shadowgasts, and chaos spawn). * shoals_end_grunt_garden now places slightly more plants and has fancier non-default wall and floor tiles, to hopefully make it fairly more obvious actual vaults are still being placed on the last Shoals floor. -------------------------------------------------------------------------------- 6ec11c1 | regret-index | 2024-09-15 17:32:36 -0230 New Xom action: hyperbuff a (low HD) ally This new effect has multiple different fronts of interest. It tries to experiment yet further with monster effects not easily available for players otherwise (e.g. invisible + radiating + mirror-damaging allies), it tries to have Xom do more obviously interesting things according to one's build (as summoners and necromancers may notice this more often), and it also just has the "Xom could do absolutely anything" wild factor expanding past the current status effect tricks to instead hone down onto over ten different buffs being thrown around at once. This very rare good Xom effect looks for rather low HD allied monsters present, scaling with one's experience levels and extended runes, and falling back onto creating some relatively mundane allies otherwise. Once there's at least something to target, Xom then gives it 20-40 turns of might, haste, invisibility, brilliance, repel missiles, resistance, regeneration, increased Will, toxic radiance, damage mirror, swiftness, and a full heal. The chosen ally is still reasonably likely to die, in all honesty, but what a glorious death it will be! (While the scaling is quite slow, it will at least usually care for some zombies and Xom-granted allies both across the length of the game. It's fairly less likely to happen for those not running around with allies, though.) -------------------------------------------------------------------------------- 0fe423d | regret-index | 2024-09-15 17:32:36 -0230 Various small extended / recently-changed monster adjustments * Arcanists have felt relatively weak in their uses relative to old wizards or the shoved-downwards occultists, despite the multiple spell revisions they've gotten, while occultists continue to be quite harmless in Depths. The former has one more HD, and both now have a bit more health and evasion, so they can live long enough to actually do any of their collective gimmicks. * Bennu have a very specific mechanical purpose (punish undead players who otherwise don't care about most other Tomb threats with a fast holy-branded monster that's difficult to kill) which they're not very impressive at executing in practice. To make them stand out more as a melee threat in the branch and to actually function as a threat undead characters worry over, their three attacks have been consolidated to two and the bulk of their damage is in the holy-branded first attack (which should then multiply to deal fairly more holy damage). * Iron golems now have slightly less health and defenses- while they still serve a reasonable role as extremely difficult to break in the middle of ambushes across Dis, they can have enough to be relevant without also being extremely slow to kite and kill once they're inevitably the last enemies alive. Since it's nice that Dis is one of the most dangerous places in the game, as compensation crystal echnidas are now speed 13 to try and actually be any relevant alongside the next change. * Crystal guardian crystallizing shot is rare to actually hit in practice compared to their prior rebounding fire / cold bolts, both dealing fairly less damage and being newly blockable. (While Vitrify is quite dangerous, they aren't guaranteed to actually live long enough to capitalize on it.) Since they're no longer late D out-of-depths, they can afford some direct buffs to try and approach their old threat levels. Crystallizing shots now are more accurate, more damaging, and more likely to apply Vitrify, while crystal guardians themselves hit mildly harder. -------------------------------------------------------------------------------- a98c639 | regret-index | 2024-09-15 17:32:36 -0230 New mutation: haste allies when injured Another mutation meant to be exciting in differing ways for differing builds yet balanced out by being rather build specific. This two-level mutation uses the Mark of the Celebrant rules (triggers at 50% health, comes back only the next time one reaches 100% health) as are reasonably reliable and straightforward enough to parse for something far less directly destructive- the spilling of one's time-warped blood instead hastes the highest HD allies in sight, two per level. This has obviously extremely strong consequences for summoners and necromancers, but also having allies in the first place means that whoever is damaging the player by a fair bit is also ignoring those allies to do so, which is dangerous enough that it will only somewhat help out the given situation at hand. The permanent-ally gods obviously reasonably benefit from it, though Yred gets a lot more than 2 or 4 allies and Hep's ancestors eventually will haste themselves anyway, while gods with big ally-summoning invocations like TSO, Nemelex, and Fedhas still see a little bit of unique interest compared to relatively plainer mutations. (This mutation is completely suppressed by Chei, in the same way Okawaru suppresses demonic guardian, of course.) The extremely placeholder mutation icon combines ontoclasm's Sublimation of Blood and hasted status icons. -------------------------------------------------------------------------------- 9303715 | regret-index | 2024-09-15 17:32:36 -0230 New mutation: spell / invocations shield Following up on the spirit of the previous commit trying to add positive mutations dependent per-build for the sake of adding more energy and excitement to the overall pool, this good mutation is a touch more complicated but should still be relatively straightforward. Casting spells gives the bearer +7 SH for a turn, and using invocations gives the bearer +7 SH for 2-4 turns (with the duration reset for each invocation). This is meant to parallel several other conditional defenses as we've built up over the years (acrobat's evasion when moving or standing still, protection brand and ParryRev's AC when attacking with one's weapons), while avoiding those established exact means of defense or condition. (It does share the same number and multiple-turns status of protection brand, though). It also shouldn't overlap too much with large bone plates (highly conditional for several builds, with piety and mp limits, yet the single level gives more than the first two levels of bone plates), and it no longer collides with TSO's divine shield. As a bonus, invocations aren't really a space explored with mutations outside of early Forlorn experiments, and this starts out exploring that space with a relatively safe mutation. (While there's some jankiness about using it for Recall abilities, this still costs MP and also lasts so little time one probably could have just tried to reposition around allies in most of those circumstances more than just repeatedly using the ability standing in place. Everything else costs at least something innately.) Hopefully this should be reasonably interestingly variable with differing characters without being too much to keep track of on a regular basis (at least, not any more than protection and acrobat themselves already need). The mutation icon uses Ontoclasm's Divine Shield icon with different magic and invocation colours. -------------------------------------------------------------------------------- 9235b1e | regret-index | 2024-09-15 17:32:35 -0230 New mutation: efficient magic Random mutations have had a rocky history across Crawl, with very uneven high rolls and low rolls now long past (like changing movement speed in either direction, much more minor AC and stat changes than currently, and various troubled experiments with a multitude of different potions all held back by there being too many minor mutations). The current state of positive mutations and singular potions of mutation at this point is at relatively stable if boring equillibrium- the proportions of meaningful defensive benefits and net positive benefits versus effects that can be easily ignored are pretty generous in the player's favour, though a variety bad mutations are far worse (and should be far worse) than even the best good mutations are any good. On and off during 0.33, I'd like to try and make this state of affairs more exciting with relatively simple build-specific mutations to add more spice to the overall mutation pool. Forcing people to engage with the mutation system via singular potions of mutation might as well have more exciting rare high-rolls involved, and Xom in midgame / lategame shouldn't mostly make characters overloaded with resists. Whether or not they'll survive the years, I don't know, but as long as they're all relatively conservative effects, at least some fraction of them should probably survive and already be restrained by the lack of control on the overall mutation system. This mutation at hand... is actually quite simple as new effects go. In the same vein as Coglin gizmo Spellmotor, it flatly reduces the cost of spells (but can't go below 1 MP) equal to one's mutation level (which has 2 ranks). Unlike Spellmotor, it doesn't come with free random melee swings or the potential to go even higher, but in exchange being untied to melee attack has obvious benefits for a variety of conjurer builds. Compared to adjusting mp capacity, the flatter effects are excitingly stronger earlier in the game (spells are lower level and one has less total mp) than later on (a lot more mp-efficient spells are open and it discounts proportionally less). Also, it doesn't help out invocations nor guardian spirit (as shared with wild and placid magic). It _is_ quite strong with other stacking mp saving effects, but beyond the limited count of brilliance potions, getting both in most games is decidedly unlikely anyway. (There might be more complicated ways to better approach this overall discount space, but it's probably fine to start simple here.) The mutation icon recolours ontoclasm's Channel Magic icon with Sastreii's head-slot mutation icons. -------------------------------------------------------------------------------- a31db6c | regret-index | 2024-09-15 17:32:35 -0230 Reflavour, retheme, rename - quicksilver oozes -> void oozes Expanding the mechanics and flavour of quicksilver beyond just a rare dragon and its draconian counterpart over the course of versions and years has gone onwards somewhat awkwardly. Quicksilver oozes were added in 0.27 (433ef79) and didn't use the exact dispelling effects mechanism when there was only one other quicksilver monster around, which would have been fine by itself. It became somewhat awkward, however, when quicksilver elementals were added in 0.28 (e42411b) and wands of quicksilver were added in 0.29 (5a96994), making there be a total of three explicitly quicksilver-themed items and monsters that dispelled plus one monster that didn't. While there's almost no quicksilver elementals in 3-rune games without the intervention of Xom these days, which helps avoid confusion between oozes and elementals, it's still a weird state overall. As such, after some previous bikeshedding on the topic, they are now named void oozes, and have a much more explicitly antimagic emphasis in their description. The new tile, new flavour, and new name all do not, however, actually change their stats or mechanics. I'm not sure what I make of their current weird position, where they're notable threats in early portals and rare vault uses but common fodder throughout their native home of Slime. It's probably fine for now. Potentially their new starry name and appearance flavour could also encourage more abyssal and ruins themes without relying so heavily on monsters meant to stay in the Abyss, which is also good for keeping monsters more reasonably bounded per-branch. Their new description is by DracoOmega, and their new tile is by pianoman523. -------------------------------------------------------------------------------- 8750c69 | regret-index | 2024-09-15 17:32:35 -0230 Make Xom's altar tiles a bit more colourful In console, Xom's altar cycles through every colour available. In the altar's description, it mentions it shimmering through every possible colour. In tiles... the altar has been an iconic greyscale face the entirety of its existence. I'm not really sure why there has never been any attempts at colour for it whatsoever. To make the most prominent chaos god in the game more chaotic, I'm tweaking the tile as a compromise- the base changes colours with every different frame, but the face remains grey. These colours, naturally, are based off of the chaos clouds' colours and mixing between them, though with mild desaturation. Hopefully it shouldn't be too eyesearing to rest alongside, any more than other older chromatic tiles like Nemelex's altar or the bigger frame-per-frame changes like Makhleb / Hepliaklqana / Sif's altars. If it _is_ and feedback asks something less conspicous, I can try a second approach of coloured sparkles akin to what Zin and Nemelex altars use instead. -------------------------------------------------------------------------------- 67b0905 | Kate | 2024-09-15 17:26:14 +0100 Mark milestones when buying runes (grothendieck) Buying items in shops always creates a note and then flags the item to avoid creating duplicate notes, but that flag then also caused milestone recording to be skipped. Historically this wasn't an issue because the only items that need milestones are runes/gems/the Orb but at least one of those is now purchasable in a rare case! -------------------------------------------------------------------------------- 460ee30 | regret-index | 2024-09-14 21:25:52 -0230 Don't spawn abyssal stairs on Abyss:7 (Shadow_Rider) No accessing Abyss:8 just yet, anyway. -------------------------------------------------------------------------------- ff00106 | regret-index | 2024-09-14 21:25:52 -0230 Put a spot for the Serpent of Hell in tar_mu (Lici, #4027) The encompass vault was missing an actual place for the Serpent of Hell's set-up function to look for and spawn the unique in question. Closes #4027. -------------------------------------------------------------------------------- 5574597 | gammafunk | 2024-09-13 16:47:33 -0500 feat: Add monster intelligence to clua Monster intelligence (e.g. "Human" or "Mindless") was missing from clua even though it's present in the UI. This is a minimal implementation that simply returns the standard description string of a monster's intelligence. This is technically a feature, which we wouldn't normally add to stable/tournament, but it's only related to UI and arguably a bug that it was missing. It's also very minimal and has been tested locally. (cherry picked from commit cc8dab42f0033f0eb96e1de10bcbeea62793514c) -------------------------------------------------------------------------------- 9043e79 | Samantha Tobias | 2024-09-08 04:35:42 -0230 fix: "Ran out of altars for temple" error (thirdmesn, Vajrapani) (#4005) A few temple vaults had a temple_altars_X tag where X was lower than the number of altars in the vault. This caused the "Ran out of altars for temple" error during the creation of a new character/dungeon. This commit fixes the issue by increasing the tag values to match the number of altars in the vault. This change results in temple vaults with 22 and 26 altars, instead of the previous max of 21. Note: Does not update temple vaults with a variable temple count due to substitution removing the superfluous altars in the vault. Resolves #2810 Resolves #3846 [Committer's note: actually tweaked the initialization temple function to allow the 22-altar temples to be picked. This _does_ slightly raise the average number of gods compared to 1659c76, but it's probably fine now that more gods are attractive to more characters in 0.32. Also, left a few more comments around. Closes #4005.] -------------------------------------------------------------------------------- 7029d37 | gammafunk | 2024-09-07 21:04:49 -0500 fix: Don't nest the clua monster spell table The implementation of the clua monster info spells() function was unconditionally putting the array of spells in another table, probably to handle the case when a monster doesn't have spells. This commit uses this (empty) table only in the case when a monster doesn't have spells. -------------------------------------------------------------------------------- e99af74 | DracoOmega | 2024-09-06 21:59:22 -0230 Add Alejandro Ramirez to CREDITS.txt -------------------------------------------------------------------------------- 1545d69 | DracoOmega | 2024-09-05 15:29:20 -0230 Fix gravitambourine being able to move orbs of destruction Since virtually nothing in the game can act upon these directly, I don't think this should be able to either. -------------------------------------------------------------------------------- fa4ca67 | DracoOmega | 2024-09-05 15:28:53 -0230 Fix octopode physiology (dilly, rypofalem, ge0FF) Their species_flags were split between two blocks and seemingly only the second was having any effect. -------------------------------------------------------------------------------- 321b5f0 | Alejandro Ramirez | 2024-09-05 15:13:46 -0230 Ensure only actual spells trigger SpellMotor (#4003) -------------------------------------------------------------------------------- 9fb28c6 | DracoOmega | 2024-09-05 15:12:09 -0230 Don't trigger chaotic artifact weapons against dead monsters This could happen if specifically the base *brand* of the weapon killed a monster, and even then didn't usually cause a visible problem. With chaotic Rift and Punk *specifically* (among all chaotic unrands that can currently appear in the Xom bazaar), this resulted in a crash. Unlike other sources of brand damage, Punk's acid and distortion banishment fully reset a monster when they happen, meaning the defender's type is MONS_NO_MONSTER by the time the secon apply_brand_damage() happens. And chaos brand specifically tries to look at a monster's resists to determine what brands it can roll. Against a normal dead monster, this happens normally (and then it elects not to apply the brand at all), but against a reset monster, this causes an assert when it looks for its resists. I think a more proper solution involves refactoring the chaos brand check, but I'd like to cherry-pick a bugfix in 0.32, so I'm going with the simpler solution with less possible side-effects for right now. -------------------------------------------------------------------------------- 92cb95d | regret-index | 2024-09-02 19:47:05 -0230 Fix a vault using Dungeon's gem in Depths (WizardIke) An unfortunately missed copy-paste from the D:$ configuration screwed up the Depths:$ configuration. For bonus points, it'd show up as shattered on the ground. -------------------------------------------------------------------------------- b3cc53a | DracoOmega | 2024-09-02 15:06:26 -0230 Give the Black Torch status some short_text (So that it can be queryable from lua, first and foremost.) -------------------------------------------------------------------------------- 75c2363 | DracoOmega | 2024-09-02 15:06:26 -0230 Hopefully fix crash when viewing the Form Properties menu (ge0FF) This crash doesn't occur on any architecture I personally have access to, but had been reported for local tiles on both Arch Linux and Fedora. Big thanks to ge0FF for hopefully tracking down the real culprit. I'm just going to have to take other people's word that this fixes things. -------------------------------------------------------------------------------- 41e258f8 | DracoOmega | 2024-09-02 15:06:26 -0230 Don't let Vanquished Vanguard summons sometimes drop items (cfcfcfcfcf) This only happened if they were killed directly (as opposed to timing out or the summoner being killed). -------------------------------------------------------------------------------- 4495e38 | DracoOmega | 2024-09-01 18:28:53 -0230 Fix all blockable beams being blocked 100% of the time (Lici) Broken since 2031b86 alarmingly.... -------------------------------------------------------------------------------- b3de7b9 | gammafunk | 2024-08-30 21:21:10 -0500 task: Add the trunk 0.32 tournament reminder -------------------------------------------------------------------------------- 6fe00ff | gammafunk | 2024-08-29 16:13:02 -0500 doc: Update the changelog for the 0.32 release (cherry picked from commit 2a3b71ecb9cd912fbbc65fd33e16365abcc6daa8) -------------------------------------------------------------------------------- f63b3e1 | gammafunk | 2024-08-29 15:56:07 -0500 task: Update the debian changelog for 0.32.0 (cherry picked from commit e9cc5b35c8837d80da24021ff7dc4a8983bbf222) -------------------------------------------------------------------------------- cf2570b | DracoOmega | 2024-08-28 18:20:19 -0230 Add Grave Claw to the list of monster smitey spells ...that is used to determine whether the caster will push past allies. As per the comment above the list, these probably should really be spell flags (or maybe a flag on the monster itself instead??) There are quite a few things which would theoretically qualify to be on this list, but I'm not filling it out right now as this would cause monster behavior changes that may or may not be positive and shouldn't be done so close to release. Will aim to do something with it in 0.33, though. -------------------------------------------------------------------------------- 30fde11 | DracoOmega | 2024-08-28 18:18:18 -0230 Significantly decrease monster Grave Claw damage While this isn't used on any normal monsters (yet?) and scary ghosts with it can mostly be avoided, wizard apostles (especially early ones) could be disproportionately deadly to fight with the numbers the spell currently has. (I'll probably take a closer look if anything else gets this in 0.33, but for now I feel a quick fix is warranted.) -------------------------------------------------------------------------------- df7718d | DracoOmega | 2024-08-28 18:14:02 -0230 Describe the pseudopod aux attack when examining the mutation -------------------------------------------------------------------------------- 516f9d4 | DracoOmega | 2024-08-27 23:03:11 -0230 Fix enhanced breath damage not displaying for red draconians (Undo) -------------------------------------------------------------------------------- 8f60099 | DracoOmega | 2024-08-27 21:58:25 -0230 Fix draconians not getting breath power boost in dragon form (Undo) This was always intended, but the refactoring done as part of 0.32's draconian breath revamp ened up accidentally removing the new breaths from the code which would give them increased power. At the same time, clean up a confusing remnant of that old code, which gave ABIL_BREATH_FIRE reduced power outside of dragon form (even though it was impossible to have it outside dragon form) and gave Naga who had mutated ABIL_BREATH_POISON increased power if they were in dragon form (???) (Dragon form breath weapon really should scale with Shapeshifting skill now instead of XL, but I plan to do that as part of a greater pass on forms in 0.33) -------------------------------------------------------------------------------- a5f74d5 | DracoOmega | 2024-08-27 16:52:28 -0230 Fix another spacing issue with player titles on % screen (NormalPerson7) -------------------------------------------------------------------------------- 01a4114 | DracoOmega | 2024-08-27 16:33:33 -0230 Fix an extraneous space in Dith max invo title in webtiles sidebar -------------------------------------------------------------------------------- ad26841 | DracoOmega | 2024-08-27 16:33:33 -0230 Add a placeholder description for armataur monsters These can be encountered in a few entrance vaults, so it's possible for players to examine them, and they were missing a description altogether. (It amuses me a little to write of yaktaurs as if they were common frames of reference for people from this world.) -------------------------------------------------------------------------------- 3f04b6f | DracoOmega | 2024-08-27 16:33:33 -0230 Adjust orc monster description The current one's flavor seemed a little incongruous with the 0.32 Beogh changes. -------------------------------------------------------------------------------- 0e1e677 | DracoOmega | 2024-08-27 16:33:33 -0230 Prevent a crash with a phantom mirrored Blorkula being killed Cleaning up enchantments on Blorkla before 'saving' them prior to bat split was also deleting the abjuration timer, causing them to die mid-split. Ideally, I'd like to let them just split into summoned bats, but there's no easy way at present to delete enchantments *other* than abjuration. So instead, just prevent summoned Blorklas from splitting. This makes me a little sad, but it's so niche a situation that I can't justifying the refactoring that might be involved post feature-freeze. Maybe some future time? -------------------------------------------------------------------------------- fefbaf9 | DracoOmega | 2024-08-27 16:33:33 -0230 Fix a possible crash with Xom fake shatter It tried to modify the quantity of the large rocks created *after* they were placed on terrain, but if the location selected to place them was lava, the rock would already be destroyed by the time the code attempted to modify it. It would be easy enough just to not try to place rocks in lava at all, but the sizzling splashes caused by them seems flavorfully appropriate enough to me. -------------------------------------------------------------------------------- df10614 | CipHuK | 2024-08-26 16:04:40 -0230 fix(trove): allow wand of digging for trove_misc_dual_throne_room (#3993) [Committer's note: Unnerfed the wand of digging charges count; the trove's already more niche than the other wands trove, trove_wands_scrolls. Closes #3993.] -------------------------------------------------------------------------------- d232e38 | DracoOmega | 2024-08-26 02:35:44 -0230 Don't crash when aiming Gavotte near the edges of an unseen map boundary -------------------------------------------------------------------------------- b05a317 | DracoOmega | 2024-08-25 16:57:30 -0230 Fix a crash when shock serpent reprisal kills a monster -------------------------------------------------------------------------------- 6d945e7 | DracoOmega | 2024-08-25 16:17:38 -0230 Use attack_strength_punctuation for shock serpent reprisal (cfcfcfcfcf) Surprising amount of code editing was needed to do this and still print the resist message in the proper place. -------------------------------------------------------------------------------- 89b4946 | DracoOmega | 2024-08-25 16:17:32 -0230 Make recruitable apostles disappear when you change floor Previously, if you were off-level when the recruit timer expired, the apostle would remain wandering on that floor forever. Instea, end the timer immediately if you leave the floor. I'm a *tiny* bit uncertain about whether this could catch a player off-guard by ending the window prematurely, but it's relatively consistent with other uses of good-neutral orcs and there's probably not many situations where a player needs to leave a floor immediately, and still plans to come back and recruit afterward. (And this is simpler to implement by far). -------------------------------------------------------------------------------- 4120489 | Medrano83 | 2024-08-25 16:35:14 +0200 Android fix. Declare the gategory of the app as a game Categories are used to cluster multiple apps together into meaningful groups, such as when summarizing battery, network, or disk usage. -------------------------------------------------------------------------------- 2325b17 | DracoOmega | 2024-08-25 02:17:57 -0230 Display Lightning Spire's damage in Summon Lightning Spire cast interface Following similar logic to Hoarfrost Cannonade doing so. -------------------------------------------------------------------------------- 1101131 | DracoOmega | 2024-08-25 01:59:56 -0230 Display which monster is engulfing the player (when examining them) In a similar fashion to when a monster is constricting you, indicate which monster is engulfing you when you are being engulfed (to help with ambiguities when there are several possible monsters nearby). This doesn't indicate the source of monster/monster engulfment, but that seems of much more marginal value. (It is much less straightforward to do this, since monsters themselves don't track who or even *if* they are currently engulfing anything) -------------------------------------------------------------------------------- 6b671fb | DracoOmega | 2024-08-25 01:55:05 -0230 Display Makhleb's Unleash Destruction hit-chance when targeting -------------------------------------------------------------------------------- 2c1f918 | DracoOmega | 2024-08-25 00:35:43 -0230 Remove some old runrest_ignores The reasoning no longer applies to current Yred (and only one of these message even happens anymore). -------------------------------------------------------------------------------- 3094c0c | DracoOmega | 2024-08-25 00:35:07 -0230 Stop auto-explore rest over deep water with expiring temp flight If the player had temporary flight and was over deep water or lava, pressed autoexplore, and was injured enough for autoexplore to rest first, the game would skip past the expiring flight warning instantly and activate emergency flight (potentially draining the player quite a bit for no good reason). It feels like autoexplore rest probably just shouldn't ignore force_mores at all (this was already a default force_more), but for the moment adding the message to runrest_stop_message fixes the immediate problem. -------------------------------------------------------------------------------- 5a265af | DracoOmega | 2024-08-24 23:24:10 -0230 Don't let cosmetic clouds block catoplepas breath (among other things) We've established reasonably clear rules about cloud overwriting by now, and cosmetic (ie: harmless, non-opaque) clouds are supposed to be overwritable by everything. This is true in perhaps the majority of cases, but bolt::affect_place_clouds() (used mainly for placing clouds *along* a beam path) still has a check that ends prematurely if there is *any* cloud already at a given space. This didn't even always just prevent clouds being placed in *that* space. Noxious Breath and March of Sorrows used this function to place clouds in tiles *adjacent* to the beam path and those would also be skipped if there was a cloud present. So, for instance, using Vhi's to engage Boris could give several turns of immunity to misery clouds being placed anywhere near you. This affected at least: catoblepas breath, player green and yellow draconian breath, March of Sorrows, Mourning Wail, ushabti Death Rattle, and creating cold/steam clouds over water with cold/fire beams. It nominally affected many other monster cloud breaths, but those placed most of their clouds outside of this function, so in practice it likely only blocked cloud placement near the monster when the monster itself was breathing far away from itself (ie: you couldn't use Vhi's or similar for any practical protection.) -------------------------------------------------------------------------------- e892263 | DracoOmega | 2024-08-24 21:34:00 -0230 Don't leak the presence of monsters in the Refrigeration targeter The color-coding used to indicate how many allied monsters are adjacent to each monster (affecting Refrigeration's damage) leaked information on the presence of both invisible monsters and those out of the player's line of sight entirely. -------------------------------------------------------------------------------- 9311ea8 | DracoOmega | 2024-08-24 21:22:35 -0230 Fix a niche crash with displaying future XL-based mutations If the player already recieved a non-innate version of a mutation they were slated to receive at a later XL, the mutation preview would display an incorrect mutation level (ie: expecting that they would gain an additional level of that mutation, instead of making the level they had already gained innate.) If that level was higher than the actual max, this would cause a crash when opening the mutation menu. (A realistic example is a felid mutating a level of fur at random, resulting in the mutation preview thinking they will gain Fur 4 at XL 12) -------------------------------------------------------------------------------- c0fac64 | DracoOmega | 2024-08-24 21:13:50 -0230 Allow casting BBB on deep water (Dilly) The boulder can already travel through deep water, so there's no reason to prevent the player from casting it on a deep water tile. (This was a leftover from when it wasn't large enough to cross deep water). Also slightly tweak failure messages. -------------------------------------------------------------------------------- 8ec6a56 | DracoOmega | 2024-08-24 21:07:52 -0230 Fix Shadowslip having a misleading duration when used repeatedly (Acrobat) Using Shadowslip while it was already active would *set* the duration of the misdirection effect on all enemies to a rolled duration, while the visual change to your shadow was *added* to the duration of its curent transformation. This meant that if you used it again before it wore off, the effect would expire long before it 'looked' like your shadow had returned to normal. Now the shadow visual transformation should better match the duration of the mechanical effect. -------------------------------------------------------------------------------- afe045b | DracoOmega | 2024-08-24 20:53:33 -0230 Fix canine familiars being left alive on past floors I am not sure what this function call was doing in the old coded that it was copied from in this refactor, but at the very least it seems superfluous now (it will be called by monster_die() below anyway). -------------------------------------------------------------------------------- be95063 | DracoOmega | 2024-08-24 20:32:22 -0230 Fix a crash when trying to use quivvered Shadowslip with no shadow Even if the ability was unusable because of no active shadow, the codepath for using it via quiver would still construct a targeter first, and this targeter (used to show what monsters will be distracted) assumed that it could not be called without an active shadow. This turns out to not be the case. (The targeter is never shown to the player, either way.) -------------------------------------------------------------------------------- 5a015b8 | Medrano83 | 2024-08-24 22:51:02 +0200 Fix Android mouse detection The code inherited from SDL compares Event.getSource with InputDevice.SOURCE_MOUSE. This doesn't work on modern devices. The right way to identify a mouse event is: - Event.isFromSource(InputDevice.SOURCE_MOUSE) This also improves commit e7e1c0f, because SOURCE_CLASS_POINTER is too generic. I'm also removing some unused variables. -------------------------------------------------------------------------------- 4b97a1a | Medrano83 | 2024-08-24 22:50:49 +0200 Fix Android touchpad scrolling Chromebooks use buttonless ACTION_MOVE events to represent touchpad scrolling. Normal cursor movement uses a different action: ACTION_HOVER_MOVE. -------------------------------------------------------------------------------- fa02dad2 | gammafunk | 2024-08-23 18:01:28 -0500 fix: Don't mark certain spells as self enchantment A number spells are marked as self enchantments despite not setting any kind of duration or enchantment on the caster itself. These are mostly demon-related summon spells, a few conjurations that create monsters (e.g. Marshlight and Conjure Ball Lightning), as well as Phantom Mirror and Spawn Tentacles. For the non-summoning spells, having this flag leads to them not being considered as ranged spells. For Spawn Tentacles, there's even an explicit check to override this! This commit removes the self enchantment spell flag on the aforementioned spells. It also removes checks in the monster casting code for some of these spells that were only needed because of this flag. One subtle aspect affected by this commit is a monster's second spell cast attempt. If a monster rolls a targeted spell for its action and is unable to find a target, a second casting attempt is made, and 50% of the time this second check only considers self enchantment spells. So this change effectively reduces the frequency monsters would cast these spells if they also have a spell that can somehow fail to target. However this frequency reduction is very small in practice for the monsters affected by this change. For example, I have tested orc sorcerers who are in LOS but unable to target the player with bolt of drain/paralyze, and they still readily cast Summon Demon. Monsters that don't have targeted spells in addition to these spells will see no change at all. Not including summons nor spells that make conjured monsters as ranged attacks doesn't make a lot of sense and should be revisited in a future commit. In terms of player safety, many monster summoners create summons with "proper" ranged attacks or superior terrain traversal compared to the summoner. And conjured monsters certainly pose an acute threat to the player at range. I want to make extra sure I understand all the implications of designating summon spells as ranged attacks for monsters, although I'm fairly sure there are no issues. For now, the only change in this regard is removing an explicit exclusion for Conjure Ball Lightning as a ranged spell. Lom Lobon is the only monster with this spell and has Glaciate, another ranged spell, so this has no in-game effect. Finally, Repel Missiles and Berserker Rage are clearly self enchantments and so are given the self enchantment flag by this commit. For Berserker Rage, this means that bear monsters will no longer be flagged as ranged monsters. -------------------------------------------------------------------------------- b2e620d | Nicholas Feinberg | 2024-08-22 16:29:25 -0700 Fix: don't stairs into the abyss (CarefulOdds) Malign Gateway's terrain feature isn't stairs, so don't colour it on the minimap as if it were stairs. Display it as a wall. -------------------------------------------------------------------------------- 34d56c8 | Nikolai Lavsky | 2024-08-23 00:16:07 +0300 text: mention that Soul Splinter inflicts weakness (MIC132) -------------------------------------------------------------------------------- e7e1c0f | Medrano83 | 2024-08-22 20:43:27 +0200 Fix Android mousewheel scrolling The code used to detect mouse scroll events in the SDLActivity doesn't work in modern devices because the event's source is different from SOURCE_MOUSE. Reference: https://developer.android.com/games/playgames/ input-mouse#handle_mousewheel_scrolling -------------------------------------------------------------------------------- fc2bf62 | David Lawrence Ramsey | 2024-08-21 19:17:44 -0500 Don't give gladiators default kite shield tiles. They haven't had shields in their starting equipment for ages. -------------------------------------------------------------------------------- 8817171 | Medrano83 | 2024-08-21 21:52:02 +0200 Android: Add a full screen option to the launcher I got this message from an Android user: > can't enable full screen mode by setting "tile_full_screen = true", > still shows a black bar on top with device status. I agree a full screen option for Android can improve the user experience. Mostly when playing on landscape mode with modern devices. You can read this in the docs: > Where you set the UI flags makes a difference. If you hide the system > bars in your activity's onCreate() method and the user presses Home, > the system bars will reappear. When the user reopens the activity, > onCreate() won't get called, so the system bars will remain visible. > If you want system UI changes to persist as the user navigates in and > out of your activity, set UI flags in onResume() or > onWindowFocusChanged(). Tried both options and the behaviour when using onWindowsFocusChanged is more consistent. When using onResume, full screen is lost whenever you open the top menu. -------------------------------------------------------------------------------- ae761ad | David Lawrence Ramsey | 2024-08-21 10:57:38 -0500 Adjust kraken tentacle msgs to not mention water. Since a soul-bound kraken flies and so is not in water. -------------------------------------------------------------------------------- 589741c | gammafunk | 2024-08-20 21:09:48 -0500 fix: Add some missing KMASK to a vault (dilly) Set these unreachable areas to have no level generated monsters nor items. Also, we can't actually make a gnoll bouda skeleton, just gnoll skeletons, so simplify the skeleton placement. -------------------------------------------------------------------------------- 0996707 | David Lawrence Ramsey | 2024-08-20 18:18:40 -0500 Fix Xom glove slot msgs for certain randarts. The Mad Mage's Maulers and Delatra's gloves don't start with "pair of ", but make Xom glove slot messages put that at the beginning of their names anyway, so that all glove names come out as singular and the message grammar fits. There should be a better way to handle this, but this will work for now. -------------------------------------------------------------------------------- 72c75df | David Lawrence Ramsey | 2024-08-20 16:55:14 -0500 Fix indentation. -------------------------------------------------------------------------------- eb33c5b | Medrano83 | 2024-08-20 23:50:43 +0200 Android fix: Swipe gestures produce undesired click events I had the chance to play the game on a tablet and tried to use touch events only. It was a painful experience, but this will help. -------------------------------------------------------------------------------- 5cf48a8 | David Lawrence Ramsey | 2024-08-20 12:12:41 -0500 Add missing commas to some monster speech. -------------------------------------------------------------------------------- aee97d7 | DracoOmega | 2024-08-20 14:10:45 -0230 Properly make Oni double potion heal affect !magic (Acrobat/dilly) It was always intended to, and the mutation description even mentions such, but apparently it never worked properly. This also affects Kyrias, which is intended to have the same set of functionality. -------------------------------------------------------------------------------- f212be2 | Nikolai Lavsky | 2024-08-20 14:55:01 +0300 fix: remove evocable flight, again Having a barding or boots of flying in the inventory enables training of Evocations, even though such items no longer require an activation. This commit fixes that. -------------------------------------------------------------------------------- 24a3017 | Nikolai Lavsky | 2024-08-20 13:39:55 +0300 docs: mention the removal of permanent bazaars in the changelog They were removed in e446cd8f. -------------------------------------------------------------------------------- f2d5535 | Nikolai Lavsky | 2024-08-20 13:25:09 +0300 docs: update `dump_order` in the options guide Document the new `apostles` field, which was added in d887a3bc. Also, convert some stray tabs to spaces. -------------------------------------------------------------------------------- dab2e85 | David Lawrence Ramsey | 2024-08-20 00:53:11 -0500 Fix Xom ring msgs for macabre finger necklace. Since the ring there isn't worn on a hand. -------------------------------------------------------------------------------- a8b5e4c | David Lawrence Ramsey | 2024-08-19 20:34:12 -0500 Move Beogh resurrection invo icon to UNUSED. -------------------------------------------------------------------------------- fda3adb | DracoOmega | 2024-08-19 20:09:57 -0230 Allow no_tele_into tags (and some others) to actually work for subvaults Map tags which applied fprops (such as no_tele_into, no_tide, no_jiyva) did nothing at all when attached to a subvault. Most of these were not used this way, as far as I can tell, but no_tele_into *was* used several times - notably in the S-branch preview chambers for grunt_ashenzari_visionary - meaning that it was possible for the player to teleport (or take a hatch) into a place from which there was no escape and also many wildly out of depth monsters. Now, the same set of fprop tags that work with parent vaults should also be respected by subvaults. (It's worth nothing that kprops applied to subvaulted glyphs by the parent vault are *also* ignored when a subvault is merged, so there was really no good way to do this sort of thing prior to this commit, despite what one might expect.) This fixes #3979 -------------------------------------------------------------------------------- 8f3c08a | DracoOmega | 2024-08-19 20:09:57 -0230 Show some fprops in the local tiles tile tooltip It wasn't easily possible to see what tiles were marked no_tele_into in game, and this is helpful for diagnostics sometimes. (I didn't bother showing fprops here which are easy to verify visually, such as Sanctuary. It would be easy enough to expand this list in future, though, if there's any need.) -------------------------------------------------------------------------------- 1eb867f | DracoOmega | 2024-08-19 20:09:57 -0230 Hopefully finally make player ghosts stop trying to cast Gell's Gravitas The spell was removed from existing monsters in unmarshallMonster() (as is done for many other spells) but player ghosts apparently don't go through that function when they are loaded, allowing it to cast a spell that didn't exist for monsters anymore. -------------------------------------------------------------------------------- 3d2af94 | DracoOmega | 2024-08-19 20:09:57 -0230 Update removed_spells list And add version tags around a few spells that were effectively removed, but never got them. I wonder if, instead of using the AXED_SPELL macro in spell-data.h, dummy data should automatically be provided for any spell in the removed_spell list? Since currently there are effectively multiple places to say that the spell was removed, with different consequences for not being listed there. -------------------------------------------------------------------------------- 751def6 | Medrano83 | 2024-08-20 00:19:32 +0200 Fix Android build on armeabi-v7a There's an error when building the game with NDK 26 for armeabi-v7a. This passed unnoticed on previous tests because the other architectures supported by Android are not affected. It can be fixed with another function casting on sdl2-mixer. -------------------------------------------------------------------------------- cf733dc | DracoOmega | 2024-08-19 15:22:12 -0230 Fix swoop/flank attacks missing some of the proper checks (Ogregutan) It was possible for a monster to perform one of these attacks while afraid, pacified, in a sanctuary, or possibly even against an ally (though I'm not 100% sure that the circumstances that would set up this last case were possible in practice). -------------------------------------------------------------------------------- e547df2 | Sean Dewar | 2024-08-19 09:52:17 -0700 Fix stash search prefixes for golden dragon scales Presumably broke since the rename from gold -> golden. -------------------------------------------------------------------------------- 8ac6e39 | DracoOmega | 2024-08-18 18:24:36 -0230 Display what aspiring flesh will turn into when you examine them The game already announces this in the message log, but it can be easy to overlook and more fiddly than necessary to go find it again if you want to double-check. Now it is displayed on the same line with other status effects when you look at them. -------------------------------------------------------------------------------- 1836586 | regret-index | 2024-08-18 17:53:36 -0230 Add tekkud to the credits Missed back in 84d97b0 and ea827eb. -------------------------------------------------------------------------------- 4ec9ae5 | regret-index | 2024-08-18 17:53:36 -0230 Mildly adjust the changelog Remove a duplicate soul scholar entry, mildly allude to the conditions Xom bazaars happen in, and list off a fair number of tile additions not listed in other changelog updates. -------------------------------------------------------------------------------- 1d4c9e7 | DracoOmega | 2024-08-18 17:31:10 -0230 Don't (confusingly) leak invisible monsters with Piledriver (Acrobat) While Piledriver already could never target and move a monster the player could not see, it was possible for an invisible monster to be in the way of moving something the player *could* see, which resulted in a confusing message about the spell being unusable in situations where it looked like it should be. Now the targeter will display paths based on what the player can see, but if an invisible monster is in the way of the selected path, the spell will fizzle without effect when cast instead. This is a little unfortunate, but also we can't really move something that has nowhere to move. (If *a* viable path remains unblocked, the spell will take that one instead) -------------------------------------------------------------------------------- e868d85 | gammafunk | 2024-08-18 13:54:57 -0500 doc: Changelog update -------------------------------------------------------------------------------- fdaad25 | David Lawrence Ramsey | 2024-08-18 10:04:14 -0500 Fix wrong changelog commit hash (gammafunk). -------------------------------------------------------------------------------- 8529b04 | DracoOmega | 2024-08-17 21:40:06 -0230 Stop Coglins from destroying cursed items without a prompt in local tiles Clicking on a weapon in the inventory panel in local tiles attempts to wield that weapon. For coglins in particular, it bypasses the normal prompt for 'which hand do you want to put that weapon in?' - with left click going into the main hand and ctrl+left click going into the offhand. However, the logic in can_wield() regarding curses only checked that the player had *a* hand free to wield a given weapon - not necessarily the hand they were about to put something in! So if a player had one cursed weapon and their other hand was free, using click-to-equip for the hand with the cursed weapon would see that it was possible to equip a new weapon, and then immediately unwield and destroy the cursed item to replace it with the one just clicked on. Now there is specific logic to check for the corresponding weapon being cursed first. -------------------------------------------------------------------------------- 193dd4b | DracoOmega | 2024-08-17 21:07:55 -0230 Fix ally-cast foxfires from counting as the player's own kills I'm not sure this matters for a whole lot outside of messaging, mind you. -------------------------------------------------------------------------------- f4a7df6 | DracoOmega | 2024-08-17 21:06:41 -0230 Fix an issue with Mark of the Celebrant and Reflection Since Celebrant's cooldown was set *after* the volley of blood arrows fired, if the player took damage as a result of it, this damage could trigger another barrage. (Possibly this could also happen with Pain Mirror) But while this is a bug in its own right, the crash mentioned in #3972 doesn't seem to me like it could be directly caused by getting multiple bloodrites. I think reusing the beam structure may have resulted in improper values being set if the beam was reflected in the process. So instead, copy the beam structure anew with each shot to avoid this. This should fix #3972 -------------------------------------------------------------------------------- 470f6e4 | DracoOmega | 2024-08-17 20:11:45 -0230 Some Gavotte targeter improvements If a monster that will get wall slammed overlaps with the player's transit path, it will still be hilighted to indicate it will take damage. The targeter now accounts for seen terrain and monsters that are outside the player's current line of sight, instead of effectivey treating everything the player cannot currently see as empty floor. This allows more intuitive and accurate hilighting of which monsters will take damage from a given movement (since it otherwise may not be obvious why a given monster isn't hilighted when the *player* knows there's a wall in the way already.) This does mean the tracer will sometimes claim a monster will take damage when it won't (ie: because something dug a wall out of line of sight or destroyed a plant it was expected to hit) but this should be much, much more rare than the previous situation of ignoring map memory of unseen walls entirely. -------------------------------------------------------------------------------- 6911597 | DracoOmega | 2024-08-17 20:11:45 -0230 Expire boulders and ballisto spores when changing floors At some point in the not-so-distant future I will actually unify 'temporary monster' checks that don't depend specifically on abjurability. But in the meantime, don't let the player drag boulders between floors with them. (Amusingly, spores would effectively only follow you only if there was a hostile monster in sight when you took the stairs, and otherwise stay on their original floor.) -------------------------------------------------------------------------------- d9894b7 | DracoOmega | 2024-08-17 20:11:45 -0230 Note in Upheaval's description that it cannot harm the player (Or elementals summoned via Elemental Force) -------------------------------------------------------------------------------- e2c4daa | DracoOmega | 2024-08-17 20:11:45 -0230 Prevent spawning a Crucible exit on the other side of deep water Since the only deep water possible in this map is on the very edges of the arena, forcing the exit to only place on the floor (which makes more sense anyway) should prevent any possible softlocks. -------------------------------------------------------------------------------- 718b86c | DracoOmega | 2024-08-17 20:11:45 -0230 Don't let Rimeblight explosions hit good neutrals This mostly only matters for Beogh worshippers, but could unduely cause penance at random mid-battle. If it can ignore friendlies, it can ignore neutral orcs, too. -------------------------------------------------------------------------------- 959a7d1 | DracoOmega | 2024-08-17 20:11:45 -0230 Fix AF_SPIDER and AF_HELL_HUNT printing messages when triggered out of LoS -------------------------------------------------------------------------------- e09b82a | DracoOmega | 2024-08-17 20:11:45 -0230 Fix initial explosion from Rimeblight ignoring LoS check (CarefulOdds) -------------------------------------------------------------------------------- 9405a8f | DracoOmega | 2024-08-17 20:11:45 -0230 Remove Oni gaining extra benefit from mutation potions An oversight left over from when the original armataur double potion mutation applied to all potions. Oni are only intended to double healing potions. -------------------------------------------------------------------------------- 62c44d5 | DracoOmega | 2024-08-17 20:11:45 -0230 Add a confirmation prompt for accepting Infernal Marks (various) This is a high-impact choice made once per run. A confirmation prompt seems reasonable here. -------------------------------------------------------------------------------- c9fbf6c | DracoOmega | 2024-08-17 20:11:45 -0230 Remove an orphaned comment The code it was commenting *on* has been already removed anyway (it was in regard to spell enhancers not applying to spells cast via rods). -------------------------------------------------------------------------------- 1502f1d | DracoOmega | 2024-08-17 20:11:45 -0230 Remove code for handling zapping wands with 0 charges. This isn't possible to do anymore, anyway. -------------------------------------------------------------------------------- 0ad0e9b | DracoOmega | 2024-08-17 20:11:45 -0230 Don't let !/@ work when aiming smite-targeted spells These keys allow force-casting a spell not just beyond its range, but at places where the spell's targeter:::valid_aim() returns false - essentially ignoring any target validity checks that are done there. While this serves some purpose for beam spells, by allowing the player to select beam paths that are not possible within the spell's range, (and the beam's range and physical properties will be respected, regardless), I don't think it serves any purpose for spells which target a specific location. Forcing a spell to be cast on a location the game itself says is not valid is just asking for undefined behavior. And boy, there's quite a bit of it at the moment. This may not be comprehensive, but at the moment at the very least: -Grave Claw, Mercury Vapours, Momentum Strike, Cigotuvi's Putrefaction, and Sculpt Simulacrum can all be cast at full LoS range. -Magnavolt and Putrefaction can trigger a crash-on-demand by aiming at a tile without a monster. -Putrefaction can be functionally used on uninjured monsters and non-living monsters. Many older spells in the game do not exhibit the same range bugs because each spell's own code checks manually that the target they have been given is valid and in range - with even the most straightforward of range checks being essentially duplicated countless times in different places. Some of these spells predate the targeting API existing at all, and some were bandaided later on, but I'm inclined to think that where a spell defines a hitfunction for validity, that this function should be authoritative and the spell should not have to duplicate its checks (this sort of problem has come up many times in past and been fixed in a one-off manner on many of this times.) Doing so would allow cutting out a bunch of now-redundant code from many spells, though I am going to pass on doing so during feature freeze, since it seems at risk of introducing new bugs. I'd like to make it a 0.33 thing, though. -------------------------------------------------------------------------------- 2805000 | DracoOmega | 2024-08-17 20:11:45 -0230 Display the health buff that shadows get from Shadowslip in xv (Acrobat) -------------------------------------------------------------------------------- fccc697 | DracoOmega | 2024-08-17 20:11:45 -0230 Don't mislead firewood with Shadowslip "The fungus turns its attention towards your shadow x24" -------------------------------------------------------------------------------- 098aa68 | DracoOmega | 2024-08-17 20:11:45 -0230 Fix enemies being mislead by Shadowslip after being charmed (Monkooky) If an enemy was distracted by your shadow, they would continue to fixate on it even after being charmed. On the one hand, this makes a certain sense. They think your shadow *is* you, so why should they listen to orders from that othere chump over there? And it *is* pretty funny. But probably it should just break the mislead effect, so now it does. This fixes #3970 -------------------------------------------------------------------------------- 2c87f10 | Kate | 2024-08-17 22:05:56 +0100 Adjust a description for consistency "Magic" rather than "mana". -------------------------------------------------------------------------------- 2cd2782 | gammafunk | 2024-08-17 15:07:03 -0500 doc: Some clua api doc tidying -------------------------------------------------------------------------------- 8b4f558 | gammafunk | 2024-08-17 15:02:40 -0500 fix: A check for monsters having ranged spells The function mons_has_ranged_spell() didn't considered spells marked as ranged by _ms_ranged_spell() to actually be ranged unless their range was greater than 1. The problem with this is that many LOS-affecting spells have an undefined range, which gets resolved to a range of -1. Hence a monster like a curse toe with e.g. Symbol of Torment and only summons as its other spells was incorrectly not flagged as ranged. This commit only excludes attack spells if their range is exactly 1. I've looked over all calls to mons_has_ranged_spell() and there's nothing that should break if we expand the list of monster ranged spells in this way. It might be good to actually designate a LOS range for all the various smite targeted attack spells for clarity in the monster info UI. Smiting itself already has such a range, for example. I'm not changing any spell definitions for now, since I've not checked if those changes could somehow have other side effects. Monster AI is notorious for having subtle bugs. (cherry picked from commit 585c54f536188b0a9123da2be5ea99197ebdd732) -------------------------------------------------------------------------------- f3f7718 | Implojin | 2024-08-17 14:48:55 -0500 fix: clua api ldoc generation This has apparently been broken since 60c0b14602 (mid-0.31), as mentioned in previous commits on this ldoc remains pretty fragile. To regenerate these, run `make api`. -------------------------------------------------------------------------------- a3a3e7c | Implojin | 2024-08-17 11:36:33 -0500 Add Lexi Hattaway to the credits -------------------------------------------------------------------------------- 28ae855 | David Lawrence Ramsey | 2024-08-16 22:30:14 -0500 Fix enum name for magnetised dust clouds. So it consistently uses 'magnetised', instead of 'magnetized' in some places and 'magnetised' in others. -------------------------------------------------------------------------------- 9333e8e | patrick | 2024-08-16 23:23:25 -0400 Tone down the greed value of a Shoals shop 100 is the same value as Gozag's Platinum Reserve, which is intended to be a ridiculously high overcharge. The proprietor of the mermall isn't supposed to be quite that greedy. Now it's 20. -------------------------------------------------------------------------------- 191c959 | David Lawrence Ramsey | 2024-08-16 22:06:45 -0500 Tweak food_snacking_frequency documentation. Since 40% is not one third of the time. -------------------------------------------------------------------------------- cc75f2f | Lexi Hattaway | 2024-08-16 23:04:53 -0400 added my first vault (pentagon) after testing -------------------------------------------------------------------------------- 88fe4fe | David Lawrence Ramsey | 2024-08-16 21:36:48 -0500 Use @objective@ properly in Nergalle's dialogue. -------------------------------------------------------------------------------- 385508d | regret-index | 2024-08-16 01:59:21 -0230 Add Darby to the credits Accidentally left out after f582fa6, despite d06570b and 3ec762b. -------------------------------------------------------------------------------- 8f138ea | David Lawrence Ramsey | 2024-08-15 16:17:24 -0500 Add Michael Hunter to CREDITS. -------------------------------------------------------------------------------- 6728d54 | David Lawrence Ramsey | 2024-08-15 10:43:37 -0500 Add Christopher Partin to CREDITS. -------------------------------------------------------------------------------- 122fbd9 | DracoOmega | 2024-08-15 05:54:48 -0230 Make uniques a little more chatty There's been a bunch of effort in recent years to characterize uniques better, and give them more personality in their dialogue. It seems fair that they get to chat a little more than other monsters as a consequence, so that players have a better chance to see it before killing them. (Donald and Yuif had greatly increased odds to talk compared to other uniques, and I have lowered their bonus to keep their net rate of conversation about the same as it was before now.) -------------------------------------------------------------------------------- 0be9698 | DracoOmega | 2024-08-15 05:54:48 -0230 Nudge Mark of Haemoclasm's numbers up again just a small bit After the previous buffs of 4c67e76a8e2a7885a haemoclasm feels a lot closer to the right place, but could possibly stand to be just a *bit* more frequent, so this increases its trigger chance from adjacent enemies a small bit more and also nudges its base damage a tiny bit higher. -------------------------------------------------------------------------------- 38b740f | DracoOmega | 2024-08-15 05:54:48 -0230 Fix Unleash Destruction being completely silent Not sure *exactly* how much noise to give it, but 'more than none'. In theory, I could see it argued that lightning-based destruction should be louder than other types, and this wouldn't actually be hard to implement, but I'm unconvinced that it's meaningfully better to sometimes be much louder than other times at random. -------------------------------------------------------------------------------- 562a9a4 | DracoOmega | 2024-08-15 05:54:47 -0230 Don't let player shadows stab loudly (Midn8) Player stabs are deliberately silent, but when your shadow joined in to eviscerate some poor elf in their sleep as well, it would make enough noise to potentially wake up all the others. I could just block shadow melee noise on stabs, but shadow *spells* are already all completely silent, so it seems fine to make their melee universally silent as well. -------------------------------------------------------------------------------- 907ac08 | DracoOmega | 2024-08-15 05:54:47 -0230 Allow divine heal-on-kill to work on monsters which are 'objects' It already seperately excluded summons and things which don't grant the player XP, but for some reason it *additionally* vetoed monsters which were objects. Monsters that counted as objects but also gave XP *mostly* meant 'dancing weapons', but it was still strange that Makh/Veh/TSO healing didn't count them. This bit of code seems ancient, and if there was ever a good reason for it, I doubt there is anymore. -------------------------------------------------------------------------------- 0c44f4d | DracoOmega | 2024-08-15 05:54:47 -0230 Slightly rescale chance of good god lifesaving to cap at 6* In keeping with a general policy of not giving god benefits that scale beyond the 6 piety stars the player is able to see, piety above 160 no longer increases the chance of good gods randomly saving your life (Ely's guaranteed lifesaving already hit max chance at 6*) The old chance was ~28% at 200 piety and ~24.4% at 160 piety. The new chance maxes at 26% at 160 piety (using a very slightly simpler formula). -------------------------------------------------------------------------------- a6fa64c | DracoOmega | 2024-08-15 05:54:47 -0230 Slightly tweak Magnavolt spell description To try and make it somewhat clearer that it fires one beam individually at each marked target. -------------------------------------------------------------------------------- b7f7cf1 | DracoOmega | 2024-08-15 05:54:47 -0230 Fix a possible Crucible of Flesh crash When new victims are spawned, they are placed with 30-80% of their max hp, but for enemies with very little max hp, it was sometimes possible for this to round down to 0, placing a seemingly-normal-looking enemy that the game nonetheless thought was 'dead' when you tried to hit it, causing an assert. -------------------------------------------------------------------------------- 3e06661 | DracoOmega | 2024-08-15 05:54:47 -0230 Buff / un-nerf Drain Life While 9e354a60c6874087a purported to only make Ramparts and Refrigeration check AC (and gave them additional damage in compensation), it also did this to Drain Life and *without* giving it any additional damage at the same time. With the low damage that Drain Life puts out from monsters, this was a very significant accidental nerf. Since the game is already pretty consistent about life-draining style effects ignoring AC, I've opted to return this property to Drain Life instead of just buff its damage. But since Soul Eaters were never known to be *that* scary, I've also adjusted its damage slightly upward as well (from 1d21 to 2d13). Unavoidable damage that ignores AC is pretty strong, but Drain Life is extremely resistable, so I think it's fair for its raw numbers to feel relevant. (I've also removed a bit of unnecessary code/comments now that Drain Life isn't player accessible in any fashion.) -------------------------------------------------------------------------------- d20efa1 | DracoOmega | 2024-08-15 05:54:47 -0230 Make a few more spells work with Aphotic Marionette This implements Marionette casting of Battlesphere, OTR, Polar Vortex, and Malign Gateway (mostly through calling the player versions of these spells via overrides). It also fixes Berserker Rage being inconsistent about when it could be used this way, as well as Invisibility not producing a message when gained this way. -------------------------------------------------------------------------------- 6655e30 | DracoOmega | 2024-08-15 05:54:47 -0230 Give RevMPSaver an additional effect, rename to SpellMotor In theory, flat spell cost reduction is a powerful effect, but capitalizing on this gizmo property is difficult. To benefit from it, you need to engage in weapon combat first, but many of the spells which gain the most from being able to repeatedly cast with cost reduction tend to be attack spells you'd preferred to have cast from a distance. Its design seems to want a character who is strong enough to comfortably sit in melee, but who has relevant blasty spells they want to cast a lot *after* that point, which is a hard sell on a species whose biggest strength comes from leaning into their ability to do enormous weapon damage while sacrificing defense. Moreover, the cost reduction is also short-lived, since Rev will wear off while the player is casting. In the hope of moderately addressing both of these awkwardnesses, I am adding a second effect to RevMPSaver and renaming it to SpellMotor. In addition to its current effect, it also causes the player to launch a melee attack at a random enemy in range whenever they cast a spell. This gives a direct boost to the hybrid blaster archetype, but also helps the player *sustain* the cost reduction by maintaining Rev if there are nearby enemies to hit while casting. It also allows the player to *build* Rev by spellcasting (but only while directly engaging in combat with those spells). If your weapon attack would somehow have a delay *longer* than it takes to cast a spell, there is a proportional chance to perform no attack (so no being cheeky with giant heavy weapons). While this arguably makes this gizmo property more powerful than its peers, I think the archetype it directly supports is also weaker and less straightforwardly popular on coglins such that I think this is okay. (And it would be nice if all gizmo properties felt reasonably worth taking; I think RevMPSaver is currently a bit of a dud.) -------------------------------------------------------------------------------- 2cfdfcf | DracoOmega | 2024-08-15 05:54:47 -0230 Adjust Dazzling Flash tracer for monsters, increase duration vs. player Monsters previously considered already-blind enemies as useful targets for this spell. And while the duration *can* stack, it's generally not very useful to keep extending blindness on an already blind player (and, in fact, the moon troll's cast rate was high enough that they would spend fully 25% of their turns casting it, regardless of it accomplishing anything). In some mild compensation, increase the baseline duration when applied to the player. This does affect some other methods of blinding the player, but in general it is a weaker effect on players and a longer duration makes sense to me. (This also doesn't matter a lot given the rarity of blind effects in the game that will hit the player. This is slated to be changed somewhat in 0.33 and duration will be reviewed again at that time.) -------------------------------------------------------------------------------- 04ba9e8 | DracoOmega | 2024-08-15 05:54:47 -0230 Change Dazzling Flash schools (Conj/Hexes -> Hexes/Fire) A remnant of back when Dazzling Spray actually *was* a damaging spell, conjurations has been an extremely weird fit on the completely non-damaging Dazzling Flash spell for a while. It also meant that Vehumet could gift it to players, despite it not being appropriate to the god at all. The choice of Fire as the new secondary school is somewhat arbitrary, but it felt like the closest thematic fit for 'makes a lot of light, very abruptly'. (I don't think it will affect players much, as one never really trained conjurations as a hexer, nor picked up flash as a conjurer.) -------------------------------------------------------------------------------- cb27354 | David Lawrence Ramsey | 2024-08-14 22:16:14 -0500 Add another Xom ring slot message. -------------------------------------------------------------------------------- 34a0b8a | David Lawrence Ramsey | 2024-08-14 20:45:31 -0500 Fix typo. -------------------------------------------------------------------------------- 414de44 | regret-index | 2024-08-14 23:12:42 -0230 Update some ancient documentation links After adding quite a bit more to the Art Requests wiki page, I realized I should check what is recommended for people reading the documents, and found incredibly ancient references. Some of these tile requests stretch as far back as 14 years ago, and should at least be directed more towards present day contexts. -------------------------------------------------------------------------------- ac85ce3 | regret-index | 2024-08-14 16:24:29 -0230 Add a force_more to sighting the_gamble (Riverfiend) While autoexplore does stop for the immediate sightings of both an altar and a transporter, it is relatively plausible to completely miss that it is a limited time offer amongst the messages of sighting the enemies and rewards in either side. Since this has completely different behaviour than normal transporter vaults in being temporary (and is thus better off for it), it might as well get a force_more the way temporary portals do. -------------------------------------------------------------------------------- e0650be | regret-index | 2024-08-14 05:15:14 -0230 Make some food documentation more consistent Indecisiveness bleeds through, sometimes. -------------------------------------------------------------------------------- 5a795d2 | CipHuK | 2024-08-14 05:03:55 -0230 Trove: Fix trove_misc_dual_throne_room veto (#3976) "The trove contains two misc which are useful even for low Evocations. There are four talismans which do not depend on the no-device mutation, plus evocation + shapeshifting manuals." "Also, there's no wands in the 'prices' table." [Committer's notes: squashed the two commits together and adjusted the logic syntax to be a bit more easily readable. Closes #3976.] -------------------------------------------------------------------------------- 9f76b2e | regret-index | 2024-08-14 03:38:11 -0230 New option: food_snacking_frequency (default 40%) A relatively quick and simple setting for caches of fruit and meat, which allows setting the percent chance of displaying their corresponding flavour message. Should be relatively harmless, but also reduce the current awkwardness of people who want to see the messages dancing back and forth on top of the piles (as long as they read the options guide, alas). On that same note, since people seem to be relatively receptive of the flavour messages in the first place, the odds have been increased (from ~33.3% to 40%). -------------------------------------------------------------------------------- 6bd198a | regret-index | 2024-08-14 01:28:58 -0230 Brief quick vault passover Some living trees replaced with dead ones, a late D glowing orange brain placement nerf, and some decorative altar adjustments + fix-ups. The last of these adds a small chance for the tiny altar square used in a large amount of games to get a highly variable floor tiling arrangement around it, to add a little more interest to the open-altar squares being used constantly throughout such a large part of the game. It also comes with a few tweaks to _pick_an_altar() for a few branches to catch up to some later flavour options; as long as we've got such a minor flavour function already around, we might as well continue to update it. -------------------------------------------------------------------------------- a9c2434 | regret-index | 2024-08-13 21:55:46 -0230 Tweak some Xom messages The Xom pseudo-miscasts that entail "Something invisible lands on the floor beside you!" and the like unfortunately collide with the warning colours in the default messages.txt for invisible monsters using something as broad as "Something .* you". This commit replaces those messages with new ones that won't collide with such and are still appropriately confusing for Xom. -------------------------------------------------------------------------------- 3ec762b | regret-index | 2024-08-13 20:57:20 -0230 Further loose tile edits and additions * New tiered talons mutation icon by Darby. * New vampire bat tiles and the held Charlatan's orb by pianoman523, both with edits (the former brightened up in a few shades to contrast better against dark floors, the latter desaturated to match the item on the ground). * A less inaccurate rakshasa tile by meckryl has been added to the unused monster tile folder in anticipation of finding a proper home later for the current tiger-demon rakshasa tile. * The new claws mutation icon has been edited to show three levels through darkening and brightening individual different claws, as was suggested by Ge0FF. * Mystic cages have been edited to hopefully read more as a feature and less as an item, through chopping off the top to fit on a plinth. * Coolio's edit of Denzi's dwarf tile has been edited further to remove the axe always in its hands, since cosmetic weapons on monsters inteferes with showing actual weapons on the same monsters. * Wiglaf's duplicate tile in the /player directory has been cut, since there's already one in the /unique directory. * Additional mutation icons: no potions (ontoclasm's potions), no armour (Bloax's troll hide armour), no grasping (ontoclasm's statue tiles), stabbing paws (aidanholm's generic monster spell icon), multilived (Denzi's felid tiles), shaggy fur (Sastreii and CanOfWorms's death yak tile), gelatinous body (CanOfWorms's slime creatures), camouflage (white_noise's D walls and snw-0's pebble walls), beak (outlining from a Creative Commons Zero bird vector by Lexatchison), and torment resistance (CanOfWorm's resistance icons + roctavian's tormentor). -------------------------------------------------------------------------------- 86e73b9 | DracoOmega | 2024-08-13 17:55:46 -0230 Properly add dummy data for removed electroferric vorticies This fixes #3977 -------------------------------------------------------------------------------- d22c551 | gammafunk | 2024-08-13 09:13:25 -0500 fix: DES syntax in a serial vault (ASCIIPhilia) The serial_demonic vault had a malformed KMONS for depths 9 and 10. -------------------------------------------------------------------------------- b660852 | Nikolai Lavsky | 2024-08-12 13:19:45 +0300 docs: adjust a couple of help texts Fix a colour tag and realign table columns. -------------------------------------------------------------------------------- d7452cd | DracoOmega | 2024-08-12 01:51:23 -0230 Nudge Hellfire Motar damage down slightly This spell is slated to become 3 school in 0.33, and will likely get this damage back again afterward, but for the moment it may be a *touch* too strong when also considering its utility and excellent MP-efficiency. -------------------------------------------------------------------------------- c677a86 | DracoOmega | 2024-08-12 01:51:23 -0230 Slightly relax Eringya's Toxic Bog's placement restrictions By allowing bog to be created on tiles with a maximum of *2* adjacent walls instead of just one. Bog is a spell with a lot of limitations, and while I think some of those limitations are interesting, it could probably stand to be just a *bit* more permissive. Let's give it a try. -------------------------------------------------------------------------------- cc760f6 | DracoOmega | 2024-08-12 01:51:23 -0230 Properly make orc wizard apostles Cautious Astoundingly, despite this flag having been implemented *for* them in the first place, it appears to have never actually been implemented in trunk at any point. I am really not sure how this came to happen. Hopefully this makes this feel a little less suicidal to have as allies, as it was originally intended to. -------------------------------------------------------------------------------- d7b6f66 | DracoOmega | 2024-08-12 01:51:23 -0230 Increase Cigotuvi's Putrefaction draining cost The latest iteration on corpse rot seems to have been well-received, but is probably a bit strong for where it is. I considered moving it to level 5, but the original intent of "Strong for a level 4 spell, but with a meaningful draining cost" is something I want to try leaning a bit more into first, and the current iteration virtually removes the cost if spellpower is high enough. New draining cost is 75->35 at max power (versus 55->5 before this commit) -------------------------------------------------------------------------------- ce3698e | DracoOmega | 2024-08-12 01:51:19 -0230 Revamp Brom's Barrelling Boulder a little When first added to the game, there were significant concerns that BBB's obvious upsides of providing blockers and crowd-controlling lines of enemies while also damaging them would be too strong. In practice, the spell's many limitations and low damage made it almost universally considered to be bad instead. While sometimes one hit the perfect storm of juggling a scary monster repeatedly out of sight until it died, there were simply too many ways for the spell to fail to provide value. It was useless against adjacent enemies, usually useless against enemies at range 1 (who would destroy the boulder before it did anything), extremely unreliable against enemies at a distance (due to veering off course at random), easily sidestepped by groups of enemies on open terrain, aimable only in compass directions, and after all that did much less damage than stone arrow. For comparison, IMB (also a level 4 starter book spell) knocks back enemies in *all* directions, is usable against things already on top of you, *and* does more damage, without being considered overpowered. So I think it's time to revisit boulder. Boulder now moves one tile immediately upon being cast (so that it can no longer be destroyed before even moving). Its HP increases with spellpower (and will generally be higher). It no longer causes a fragmentation explosion upon hitting a wall (this did almost no damage anyway) nor takes passive damage from running into enemies. Instead, it simply is destroyed upon hitting a wall or moving into an enemy that cannot be moved (whether because it's against a wall or otherwise stationary) - though it will do additional damage in the latter case. It no longer applies a ministun to pushed enemies (previously done automatically via actor::knockback). It also no longer veers off course. This was likely intended as a way to keep it from being too reliable an obstruction in corridors, but it also made it too unreliable in the open as well (and the aiming restrictions *already* made it require specific positioning to be useful). Instead, corridor protection comes in the form of the boulder taking abrasion damage from solid terrain it passes alongside. Each time it moves, it takes (randomized) damage proportional to how many adjacent solid features there are. This means that it takes no damage rolling in the open, but will disintegrate after only a short distance in a full corridor. The targeter has even been updated to indicate the distance at which a boulder (with HP based on your current spellpower) may disintegrate before reaching. Finally, boulder damage has been increased. The hope is that this iteration on boulder feels more rewarding to use, and is appropriately powerful for a level 4 dual-school spell. -------------------------------------------------------------------------------- 322ac23 | DracoOmega | 2024-08-12 01:51:19 -0230 Remove some seemingly-redundant rendering code While investigating the issue that is hopefully resolved in the prevous commit, I noticed that monster status icons are seemingly rendered twice in local tiles. The code I am removing appears to be effectively repeated by the call to pack_foreground() in DungeonCellBuffer::add -------------------------------------------------------------------------------- 0f7a2da | DracoOmega | 2024-08-12 01:51:19 -0230 Properly render clouds on top of items in local tiles The comments suggest this was always intended, but didn't actually work due to how items are packed in a different buffer than monsters (and one which appears to always be rendered after clouds). Now it applies a similar technique used when items are to be drawn submerged in water, and moves cloud-engulfed items to a lower buffer. (Webtiles uses different rendering code and did not have this bug.) -------------------------------------------------------------------------------- 1803d01 | DracoOmega | 2024-08-12 01:51:19 -0230 Tweak Magnavolt behavior a little and buff Electroferric vorticies were always a bit of a kludge to fix how otherwise the spell (designed to ramp up in power over multiple casts) got a lot worse when it actually killed the magnetised enemies quickly. But I never really liked how they were big and space-filling and sometimes oddly good as obstacles; it felt out of theme for how the spell was supposed to function. So here's another take on solving the same problem: Instead of magnetised enemies making an always-magnetised vortex monster upon death, they leave behind a cloud of magnetised fragments instead. This cloud has no effect on its own, but will function as an attractor for Magnavolt, just like a magnetised enemy would. It lasts a short time and then dissipates (without any of the 'extended duration by rezapping' behavior electroferric vorticies had). I have also increased the base damage of the spell by a moderate amount, given feedback over its current power level. Finally, the magnetised dust status reveals invisible enemies - mostly to ensure that enemies which go invisible *after* marking them will not result in the beam tracer either leaking information *or* misleading the player about whether or not the beam paths that will result from casting the spell are safe. -------------------------------------------------------------------------------- 2a9263f | regret-index | 2024-08-11 19:24:16 -0230 Various requested tiles (pianoman523) + Jiyva altar adjustments Tin of tremorstones active and inert versions, claw and hoof mutation icons, and Hellfire Mortar's spell icon. * The hooves and claws icons don't have three variations like most mutations, but getting away from the generic mutation icons (especially for mutations given player species will have innately, who probably) shouldn't show helix strands) is the more important goal for UI consistency than having the full count of gradations. * Hellfire Mortar's icon is in a weird spot because the actual mortar monster itself is using an old recolour of a granite statue rather than having a proper mortar-like tile, but "mortar shaped like a dragon" will probably still be retained eventually anyway. * The Jiyva altar tweaks in this fixes the light-direction to be consistent with each part, brings the palettes of each part closer, and adjusts the outlining of the slimeball against the the wobbling altar it's on top of. Hopefully it'll read better now? -------------------------------------------------------------------------------- aa93178 | regret-index | 2024-08-11 02:27:19 -0230 Yet further adjustments to Xom effects * Xom bazaars hold one less talisman (since they frequently get repeats and the randart is more enticing), plus potentially one more potion (since most of the consumables presented are relatively undervalued). * Xom hostiles have been further tweaked downwards at earlier levels, with there being plenty of new effects covering the "Xom tries to directly kill the player" front without needing the precise nature of "Xom directly just summons something you can't fight in a corridor ambush situation". While it was always possible to get early tier-4 and tier-3 demons, they were much less likely than the revised state was for XLs 6 and 7, which has thus been tweaked upwards. Also, the first few XLs get even less hostiles, so there's a decent chance to at least fight or get something before dealing with 4 crimson imps on D:1 or D:2. -------------------------------------------------------------------------------- 3bae827 | regret-index | 2024-08-11 01:42:44 -0230 Last big vault review for 0.32 This, of course, continues to include tweaks to the most dangerous and least threatening portals and branch ends for many places. Worthy of note: * To help make early portals be somewhat easier to find, two of the Sewer entries that only placed in far corners of levels now have experimental severe wall padding away from the furthest corners, and the Bailey entry that has no monsters or terrain differences has been cut. * cheibrodos_frozen_isle has no_tele_into (to reduce getting wrecked by teleport) _and_ a hatch in it now, dealing with issue #3927. * Crypt entry vaults now use Crypt walls to sell a little more flavour for the ever-struggling Vaults branch, and have specified monster types to reduce overlap with other Vaults enemies / Depths enemies and also cut the small chance to see non-Crypt curse skulls. * Pan entries now use Pan floor (but not Pan wall) so there's less spoilers about which of a dozen fixed boxes in each game have demons in them in each Depths. * pleasuredromes is updated to better suit Depths again. (Why did we have commits screwing with Depths encompass vaults, but none to reduce all of the unthemed deep elf use?) * wizlab_doroklohe now has pretty different monster sets to try and reduce its overlap with other demonic and undead wizlabs, either pairing those more directly or swerving over into earth and construct themes alongside some sparse use of undead. * (Base gargoyle monster tiles and war gargoyle tiles have been adjusted to actually more obviously split from one another, since this will make for the second wizlab pairing the two.) -------------------------------------------------------------------------------- dd5112e | David Lawrence Ramsey | 2024-08-10 19:41:37 -0500 Add another gizmo noun. -------------------------------------------------------------------------------- fe854bf | David Lawrence Ramsey | 2024-08-10 11:18:58 -0500 Remove now-inaccurate comment bit (ge0FF). -------------------------------------------------------------------------------- b3f2be6 | Nicholas Feinberg | 2024-08-10 08:37:18 -0700 Remove an antique bit of monster AI (Monkooky) Doesn't seem helpful to make low HP monsters avoid targeting the player. This logic dates back to pre-Stone Soup days. -------------------------------------------------------------------------------- 7c87569 | David Lawrence Ramsey | 2024-08-10 10:18:02 -0500 Make Blorkula's bat form unconstrict him. Closes #3971. -------------------------------------------------------------------------------- c9a0f24 | David Lawrence Ramsey | 2024-08-10 01:34:58 -0500 Fix indentation and spacing. -------------------------------------------------------------------------------- 49d6eb2 | DracoOmega | 2024-08-10 00:51:32 -0230 Fix console build -------------------------------------------------------------------------------- c18c819 | DracoOmega | 2024-08-10 00:15:32 -0230 Make it more obvious where the Crucible exit is Properly update the minimap when the portal opens (I thought this happened already, but apparently not) and also make a ring around it change to a different type of floor. Possibly a higher-visibility floor could be chosen or (ideally) a fancier exit tile made at some future point, but this should still improve visibility a little, at least. -------------------------------------------------------------------------------- 6f226b4 | DracoOmega | 2024-08-10 00:15:32 -0230 Make poison status icon overlap a little less with other things -------------------------------------------------------------------------------- 7ec8f00 | DracoOmega | 2024-08-10 00:15:32 -0230 Show some status icons above the player (and add customizable options) Certain negative statuses are very important, but can be easy for a player to overlook when they are applied randomly or unexpectedly (eg: Slow from *Slow triggering, or from draconian cold-bloodedness). We already have standard icons for many of these things, so it seems possible to indicate them directly above the player, where it may be a lot more obvious than the sidebar. I have added support for displaying a number of statuses there (and it is now straightforward to add more). Since there are many statuses that *could* be indicated but which are often not important to do so (either because they're low impact, beneficial, or already have their own default force_more), I've added a new option: tile_player_status_icons. This allows a player to decide which of the implemented statuses they want to show this way (if any). Currently there is support for displaying slow, fragile, sentinel's mark, will/2, haste, weak, corrosion, might, brilliance, -move, constriction and petrifying. By default, it only displays slow, fragile, constricted, and 1/2 will. This is somewhat arbitrary and I am open to input for different defaults. I tried to make the string used in the options to enable a status be the same as it appears on the sidebar (though it bothers me a bit that it's harder than I'd expect to efficiently query this directly - duration-data.h currently cannot be included anywhere without manually including a bunch of things before it, which is awkward....) -Potion and -Scroll are other statuses that immediately jump out to me as worth showing in this manner (since they can be critical, and also easy to miss activating) but no icons exist for them yet. (Also, poison is still handled by an older method and cannot be edited with this option yet.) -------------------------------------------------------------------------------- 39fa310 | DracoOmega | 2024-08-10 00:15:32 -0230 Give Animated Armour the resists of their base type (ie: animated fire dragon scales having rF++ rC-, etc.) It seems like this was always intended, but because animated armour wasn't flagged as using equipment, the resists on their gear was also ignored (though the AC on their gear was *not*, oddly enough...) -------------------------------------------------------------------------------- e9c885f | regret-index | 2024-08-09 19:05:27 -0230 Further dog summon icon improvements (pianoman523) It's a little fancy for something relatively mechanically straightforward, but hey, people love their (magical) dogs, so we might as well lean into it. -------------------------------------------------------------------------------- 1fec1db | David Lawrence Ramsey | 2024-08-09 09:12:26 -0500 Add another new Makhleb line for Donald. -------------------------------------------------------------------------------- 78ccd73 | DracoOmega | 2024-08-09 04:17:47 -0230 Fix broken Mark of Execution activation chance (Acrobat) I forgot to remove the 100% chance to activate that I'd be using in testing and I additionally forgot to check that what you were killing was actually hostile, so that the player couldn't activate it by killing cheap friendly summons. Oops. -------------------------------------------------------------------------------- e9ac164 | DracoOmega | 2024-08-08 23:12:25 -0230 Prevent using Passwall to move through temp terrain (rypofalem) It was *also* possible to use Oozemancy to Passwall through metal or similar walls. Now it isn't. -------------------------------------------------------------------------------- 19bd505 | DracoOmega | 2024-08-08 23:12:25 -0230 Mention that Dissolution/Xak'krixis can dig in xv -------------------------------------------------------------------------------- 0dac2c7 | DracoOmega | 2024-08-08 23:12:25 -0230 Fix multiple broken things with monster digging/burrowing For some reason, burrowing monsters could only burrow through exactly rock wall and clear rock wall and *no other* diggable features. Yes, this meant that Dissolution, whose name has been in the section header comment of the digging section forever, and who has special messages unique to them alone, *couldn't dig through any wall type that actually exists in the zone they appeared in*. Wow. Also, monsters that could cast the Digging spell could only dig through exactly rock wall, clear rock wall, and grates - none of the other types of diggable terrain would prompt them to cast the spell, even though it would work if they did. This commit refactors that entire section slightly, and makes burrowing and digging directly check for feature diggability instead of this ancient narrow list. I've banned burrowing monsters outside of Dissolution (which is currently just Xak'krixis) from burrowing through slime walls, largely for parity with the reasoning given to player formicids. Take proper care of those mandibles! -------------------------------------------------------------------------------- 8a5fa98 | DracoOmega | 2024-08-08 23:12:25 -0230 Fix Polar Vortex not properly putting water under destroyed mangroves It was bypassing the normal wall destruction function entirely, and it's not clear to me that there was any good reason for this. -------------------------------------------------------------------------------- 851616c | DracoOmega | 2024-08-08 23:12:24 -0230 Remove a digging exploit with formicids of Jiyva While wands of digging would simply not work on temporary terrain prior to the previous commit, formicid digging *did* work. And it was possible to use Oozemancy to make metal walls slimy and then simply walk through them. While it would be, in theory, possible to apply the same policy as the previous commit - let the player walk through walls whose underlying feature could also be dug - it has awkwardness with how the player moves in the process. We can't just revert to metal and keep you in the same place; the player may have forgotten which walls were metal and which weren't! After a little discussion, it seems fine to dodge the question by just not letting you dig through acidic slime with your mandibles at all. Technically a small nerf to formicids in Slime, but I doubt it ever really mattered there anyway. (I am normally adverse to one-off exceptions like this, but people seem to think this one is intuitive enough and it neatly solves the issue.) -------------------------------------------------------------------------------- 7cfa934 | DracoOmega | 2024-08-08 23:12:24 -0230 Allow summoned trees to burn (and oozified walls to be dug) For some years now, temporary terrain has been immune to numerous effects that might destroy it, such as wands of digging. This is a sensible precaution to prevent the player from temporarily transforming metal or other undiggable terrain into rock so that they can dig straight through it. Summon Forest can transform metal walls into trees as part of its effect, but it also places numerous trees on empty terrain, and it's always felt a shame to me that it's impossible to burn those down too. Messy conflagrations can be fun from time to time, and it also makes the trees feel more tree-like instead of inexplicably fireproof. So this is an attempt to make temporary terrain behave more like that type of terrain normally does while *still* preventing the player from using it to cheese their way through terrain that they should not. Essentially: digging and burning works on temporary terrain like it would on normal terrain, but if the underlying feature could *not* be affected by that effect, it simply causes the terrain to revert to that instead. Zapping digging at a metal wall that has been oozified will return it to metal, as will burning a wall that has been turned into a tree. But oozified rock will dig as normal, and trees made in open areas can spawn fires propery. (As a bonus, burning down a rock-tree still makes some fire cloud nearby - like what would happen if it *could* put a spreading fire in the wall's place). Currently, all other sources of terrain destruction are unchanged. Forest fires can't spread *into* temporary trees, they are unaffected by Polar Vortex, and Shatter still completely erases rather than reverts terrain (even though trees are easier to shatter than metal walls). -------------------------------------------------------------------------------- 1c43b72 | DracoOmega | 2024-08-08 23:12:24 -0230 Make dryads cautious Summon Forest is already a strong spell, but the degree to which the dryad (key to the spell actually doing anything at all) will suicidally rush enemies for no benefit can sometimes be fiddly or dissatisfying. Having to protect them with your own body can be interesting, but the open layout often makes that impossible when they're so insistant on moving past you to hit stuff for irrelevant damage, and it feels wrong that it's helpful to order them *not* to attack stuff, which you can only do if you're not using other allies at the same time. Now they should be a little less overeager to close in on enemies. -------------------------------------------------------------------------------- af40330 | DracoOmega | 2024-08-08 23:12:24 -0230 Don't print message for breathing your draconian breath when it fails -------------------------------------------------------------------------------- acb7b81 | regret-index | 2024-08-08 20:48:58 -0230 A spree of placeholder innate trait / mutation / weirdness icons Even if it'll take quite a long while to properly really fill out this space, it'll look less and less awkward the more non-generic icons there are available to correspond to each individual trait. This commit continues to remix old tiles to provide new ones. (FIXME: I'd _really_ prefer if the handful of mutations that are innate to some species but possible to mutate on other species didn't share the "generic" mutation icons in both circumstances. After this commit, that list is limited to Beak, Talons, Claws, and Gelatinous Body.) Credits: Mutations: * Berserk: aidanholm's Malmutate icon and snw-0's rage ego icon. * Deterioriation: The Malmutate icon and roctavian's flayed ghost tile. * Persistent drain: The Malmutate icon and Denzi's Tartarus stone walls. * Teleportitis: ontoclasm's Teleport scroll icon and Bloax's Corona icon. * Strong-willed: CanOfWorms's resistance icons and ontoclasm's magic resistance / willpower item ego. * High mp + low mp: Sastreii's robust, thin skeletal structure, and antimagic status icons, plus CanOfWorms's mana mutations. Innate traits * Forlorn (demigod godlessness), faith (as innate to mummies): snw-0's faith item ego. * Demonspawn Hurl Damnation: ontoclasm's Hurl Damnation ability icon. * Demonspawn Demonic Will: roctavian's red devil plus the strong will pieces. * Draconian cold-blood: aidanholm's adjustment of ontoclasm's Freeze icon, paired with ontoclasm's Sublimation of Blood icon. * Yellow draconian acid res, pale draconian steam resistance, gargoyle petrification res: CanOfWorms's poison resistance icon, snw-0's petrified status icon, and Denzi's steam breath ability icon. * Kobold nightstalker: CanOfWorms's shadow item ego icon. * Naga spit poison: Ontoclasm's spit poison icons. * Tengu acrobatics: Sastreii's edit of Lasty's acrobat item ego icon, and ontoclasm's statue tiles. * Vine Stalker antimagic bite: Sastreii's fangs tile plus CanOfWorms's mana mutations. Gods: * Jiyva-gifted / yellow draconian acidic bite: Bloax's acid blob tile plus jpeg and coolio's old mimic teeth. * Jiyva-gifted eyeballs: Denzi's great orb of eyes tile. * Jiyva-gifted engulfing: ontoclasm's water elemental tile. * Jiyva-gifted item detection: ontoclasm's detected item plus CanofWorms's slime creature tile. * Ru's skill sacrifices: snw-0's skill-training icons, one of Denzi's old skill-training icons, and ontoclasm's sacrificial Ru dagger. * Sacrifice resistances / temperature sensitivity: CanOfWorms's fire vuln and cold vuln mutation icons. * Sacrifice essence -> weak-willed: CanOfWorms's vulnerability icon and ontoclasm's MR / Willpower item ego. -------------------------------------------------------------------------------- bb65b56 | DracoOmega | 2024-08-08 15:33:04 -0230 Fix Shadow Tempest sometimes failing to hit anything Due to a missing break statement, the chosen casting position was being ignored and a completely random one used instead (which might frequently not have LoS to any valid enemy). -------------------------------------------------------------------------------- f6b258d | DracoOmega | 2024-08-08 15:33:04 -0230 Fix Yred zombies persisting after leaving the floor (Undo) -------------------------------------------------------------------------------- 4f2d792 | michaelhunter27 | 2024-08-08 07:46:42 -0500 Add doll editor info to docs/tiles_help.txt Adds a 'character appearance' section in tiles_help.txt that gives an overview of the Doll Editor. Resolves #2815 -------------------------------------------------------------------------------- 700f80e | DracoOmega | 2024-08-08 05:00:10 -0230 Fix a test suite error (unhappily) It was being used to perform mutation tests without a core part of mutation data being initialized, and only appeared to work up to this point due to what I consider essentially a coincidence. It made mutation-related functions effectively consider *all* mutations to have the data of the first mutation listed in mutation-data.h, which until 02fa12cfa58bf5b15c769780ce23e0ab14f10ce6 was Tough Skin (which happened to have 3 levels - the only reason that a test didn't fail before now). The test harness here is skipping a massive amount of standard initialization code for Crawl, seemingly deliberatetly. I understand the desire for more isolated tests, but this strikes me as deeply concerning, as it's not at all clear when necessary parts in this complex system may or may not be initialized in ways that cause the test to produce incorrect values. This time, a test failed that should have succeeded, but it seems entirely possible to me that it could also cause tests to succeed that ought to fail. Basically: I don't really like this, or my equally ad hoc fix here. This will silence build failures for the moment, but it feels like a bad long-term solution to any of this. -------------------------------------------------------------------------------- 96dd062 | David Lawrence Ramsey | 2024-08-08 00:34:33 -0500 Fix missing period. -------------------------------------------------------------------------------- 52cfe79 | David Lawrence Ramsey | 2024-08-08 00:26:28 -0500 Fix indentation. -------------------------------------------------------------------------------- c4951ef | David Lawrence Ramsey | 2024-08-08 00:25:02 -0500 Fix typos. -------------------------------------------------------------------------------- 17f805d | David Lawrence Ramsey | 2024-08-08 00:24:22 -0500 Fix doubled word. -------------------------------------------------------------------------------- f1bee58 | DracoOmega | 2024-08-08 02:30:38 -0230 Adjust flavour descriptions of draconian scales a little Yellow draconian scales were described as 'golden yellow' and in fact their dragon talisman transformation described them as turning into 'golden dragons', despite mechanically and flavor-wise having almost nothing in common with these. I assume it dates back to before acid dragons actually existed and was just an attempt to get *some* dragon that was similar to yellow draconians. Well, now we have a very clear analogue, so let's use that. Flavor descriptions tweaked accordingly. (Also moving the 'iron' descriptor out of grey's scales, since that should now be covered by their XL 14 mutation.) -------------------------------------------------------------------------------- 02fa12c | DracoOmega | 2024-08-08 02:30:37 -0230 Adjust player draconian color balance a little Draconians have long been considered a strong species, but after the breath rework of 926e5b6e4c1ff7608bc4a4bdb60678fc7a80099a , multiple players thought they had become even stronger. This wasn't my intention and I had considered nerfing their aptitudes in weapon/magic skills a little in compensation, but after further investigation into player data, it appears like draconians may benefit from being played by experienced players to a noticably greater degree than most other species do - in other words, they are only an outlier in species strength when including experienced players and seem closer to middle-of-the-pack otherwise. I am theorizing that this is because benefiting from the new breath mechanics involves active resource management moreso than most species' strengths do. At any rate, I am reluctant to broadly nerf a species that may be 'fine' for the larger chunk of Crawl's playerbase, especially since one of the ways in which they are strong is varied, interactive, and unique. However, balance *between* colors could use some adjustment. To this end, I am making the following changes: -Grey draconians get their +5 AC bonus at XL 14 instead of XL 7 -Red draconian breath damage is significantly increased and can no longer miss. -Black draconian breath damage is slightly reduced. -Yellow draconian breath range is increased by 1. (A tweak to acid bite may also be coming in a future commit) -Purple draconians no longer have increased willpower scaling with XL, but get the Strong Will mutation at XL 7 and at XL 14 gain 'Inviolate Magic' which prevents their magical effects from being unravelled and reduces hostile MP drain by 2/3rd. More detailed reasoning: -Grey draconians are clearly ahead of the pack at the moment. 5 AC may be debatably weaker than a key resist in lategame, but 5 AC is a lot when you get it all at once at XL 7. To that end, move their +5 AC to XL 14 instead. (It may be tradition for all draconians to get some resist at XL 7, so let's just say they're getting rFumblingInWater which is already more impactful than rSteam) -Red draconians are clearly worst and I think the numbers on their breath are a large part of it. It was balanced with the assumption of being able to hit a single target with multiple explosions, which I think is more awkward in practice than I'd expected. -Purple getting a better willpower modifier than other draconians is rather opaque if you're not familiar with the game and barely indicated anywhere. Making this an explicit mutation is a lot more transparent *and* has the helpful side-effect of making them stronger from XL7-14, since they were also underperforming. Since this nonetheless results in them having 1 less pip of willpower by the end of the game, I've given them a different minor thematically congruent benefit at XL 14 (credit for the suggestion to Undo) -------------------------------------------------------------------------------- 0b084fa | DracoOmega | 2024-08-08 02:30:37 -0230 Slightly refactor/simplify _dispellable_player_buffs It hasn't needed to keep track of both durations and attributes for years now, so remove the remaining references to dispellable attributes. (Even ATTR_DELAYED_FIREBALL was removed automatically on load, so it was impossible for the removed save compat code to even do anything). -------------------------------------------------------------------------------- a427651 | DracoOmega | 2024-08-08 02:30:37 -0230 Slightly increase chance of Mark of Execution activating Also remove the clause about it not triggering off of summons. This never actually worked, due to being incorrectly checked after the monster was already dead, but on reflection I think it might be fine to activate on kills of summons; I don't see any obvious cheese potential attached. -------------------------------------------------------------------------------- 4c67e76 | DracoOmega | 2024-08-08 02:30:37 -0230 Buff Mark of Haemoclasm The most underperforming of the Marks, haemoclasm is popular and conceptually fun, but frequently failed to help the player very much - and could in fact make things worse for them! The explosion chance was far too low to rely on doing anything useful (and would commonly hit nothing even when enemies did explode) but still generated normal explosion noise, attracting more enemies to the player's position without even much compensation. This commit greatly reduces explosion noise (down to 5), lowers the chance of enemies exploding with nothing nearby to hit, and greatly increases the chance of enemies exploding when they *do* have something adjacent to hit - rising moderately with how many things are nearby. I'm not 100% certain that this is better than just a flatly higher chance at all times, but the idea is to reduce purely-negative noise generation from blasts that cannot be productive, while somewhat encouraging the player to wade into dense piles of enemies to maximize explosion chance (and the possibility of chain-reactions!) in crowds. I've also slightly increased the blast damage caused by higher HP enemies. We'll see how this feels and further adjustments will be made if called for. -------------------------------------------------------------------------------- 7d931e3 | DracoOmega | 2024-08-08 02:30:37 -0230 Tweak Crucible of Flesh danger level slightly It's still a little hard to tell exactly where to balance this. On the one hand, several players have repeatedly stated is was surprisingly easy to handle. On the other, nearly 20% of players who have taken this mark have ultimately died to the Crucible itself. Maybe this is slightly inflated by how the same characters *without* Vessel of Slaughter may have died in whatever situation caused them to use it instead. At any rate, this is intended to be a fairly minor adjustment. The easiest levels players can plausible enter the Crucible will have slightly weaker demons, while at higher levels the Crucible has a slightly higher cap on the number of demons it can produce at once (and how many will be there when the player first arrives). -------------------------------------------------------------------------------- 1005255 | DracoOmega | 2024-08-08 02:30:37 -0230 Nerf Mark of the Celebrant damage Celebrant has been a popular mark, and is widely agreed to be the most powerful at present. It seems fun, which is good! It also seems like it might be a little *too* good, so let's try reducing its numbers somewhat. (This is about a ~22% reduction in damage output) -------------------------------------------------------------------------------- 55b383c | DracoOmega | 2024-08-08 02:30:36 -0230 Improve Mark of the Legion's description, slightly improve demon quality The mark description failed to mention that demons summoned by Infernal Legion will never be hostile (unlike regular servants!) and may have undersold its power by referring to the summons as 'weaker demons'. While it's true that their tier will be lower than those produced by the baseline Infernal Servant, their quantity is intended to *more* than make up for that. (It's been the least-chosen mark in testing and I haven't gotten much direct feedback on it yet. Will this help? Perhaps slightly.) -------------------------------------------------------------------------------- 51068f2 | DracoOmega | 2024-08-08 02:30:36 -0230 Increase Globe of Annihilation damage Giving up your ability to summon servants can feel like a significant sacrifice for a Mahkleb worshipper to make. Let's make what you get in exchange feel a little more exciting by increasing the payoff a bit. -------------------------------------------------------------------------------- f8e23a7 | DracoOmega | 2024-08-08 02:30:36 -0230 Slightly reduce Mark of Atrocity scaling cost, make finale auto-hit Using ramping destruction with Mark of Atrocity is a heavy commitment that costs a large amount of HP, and while I do like the risk/reward aspect of this, it can feel unsatisfying if your big payoff misses. While I don't think it was terribly likely to do so, let's try just making it not. -------------------------------------------------------------------------------- 2eb4e9b | DracoOmega | 2024-08-08 02:30:36 -0230 Adjust Dith shadow HP calculation, improve durability during Shadowslip Instead of Invocations directly increasing Dith shadow HP, scale it with player XL only. This should largely be in line with line with the present values at moderate amounts of Invo (though less if invo was raised high). Instead, make using Shadowslip directly increase your shadow's HP based on your invocations skill. While Invocations already increased the duration of Shadowslip's decoy effect, this additional duration could be hard to benefit from due to the decoy dying too quickly. This should help a little with that, while also making it possible to explain Invocations' effect directly in the ability description, without it having any other hidden effects. (Also make the shadow mimic linger just slightly longer after appearing, to widen the window where Shadowslip is possible to use.) -------------------------------------------------------------------------------- 0cffd93 | DracoOmega | 2024-08-08 02:30:36 -0230 Tweak Dith weapon damage Remove the damage reduction given to ranged weapons versus melee ones. I was a little concerned originally that archer of Dith would be overly strong compared to other options, but this seems to not be the case (and many launchers are already slower than melee weapons, so they were additonally disfavored). Give quick blades a 25% reduction in shadow base damage compared to other weapons. They should still be the weapon that benefits the most from shadow mimic melee, but to a somewhat more moderate degree. -------------------------------------------------------------------------------- 2995cb5 | DracoOmega | 2024-08-08 02:30:36 -0230 Tweak Dithmenos shadow spell numbers Shadow Prism does less damage, Shadow Ball and Creeping Shadow do slightly less damage at low power, all shadow spells which can miss (Shard, Ray, Tempest) are a little more accurate at higher power. Shadow Torpor's formula is changed and it slows for much longer than before (it was excessively weak in its current incarnation). Shadow Puppet has a little less HP in general, lower damage earlygame and increased damage very lategame. -------------------------------------------------------------------------------- 878f319 | DracoOmega | 2024-08-08 02:30:36 -0230 Reduce Dith piety gain slightly, tweak ability costs Marionette is now a little cheaper and Nightfall is slighty more expensive. -------------------------------------------------------------------------------- b1c0d4f | DracoOmega | 2024-08-08 02:30:36 -0230 Fix a possible crash with Shadow Tempest If it killed an enemy that caused other enemies already selected as valid targets to die (ie: summons vanishing because their summoner died), it could still try to zap one of these now-dead monsters (now located at (0, 0)), causing an assert. -------------------------------------------------------------------------------- da2ddc2 | DracoOmega | 2024-08-08 02:30:36 -0230 Don't cause self-used Cleansing Flame to engulf the caster Since all users of this were already immune to its effects, this just produced needless (and possbly confusing) messages about resisting something. Instead, just have it affect tiles in range that are *not* the source, as most caster-centered AoE effects already do. -------------------------------------------------------------------------------- 11afe5f | DracoOmega | 2024-08-08 02:30:36 -0230 Pay HP/MP costs at the start of using an ability instead of afterward Spells pay their costs before the code of a given spell executes, which allows (for example) Vehumet/TSO's mp-on-kills passive to cover the cost of the spell itself. But abilities only paid their costs *after* their code was finished executing, meaning this was not possible. It also resulted in oddness with Mark of Atrocity's scaling HP cost, where the player would be charged the cost of the *next* level of atrocity while only checking that they could afford to pay for the current level of atrocity. (Fortunately it was not actually possible to die this way.) I have rearranged code so that the payment happens before the ability is used and is silently refunded if the ability fails or is cancelled (just like spells currently do). Unfortunately, piety costs are much more complicted, since gaining/losing piety can trigger messages and other mechanical effects. So piety is solely paid after the ability code is complete. I think this has much less of a noticable gameplay effect than with HP/MP costs, however. Finally, this also fixes a bug where the check for triggering Celebrant after casting a spell with an HP cost happened at the wrong moment, and could be triggered at instant speed merely by aiming a spell that *would* result in the caster falling below 50% HP if they cast it - whether or not they actually did so. -------------------------------------------------------------------------------- 96598cd | DracoOmega | 2024-08-08 02:30:35 -0230 Map Makhleb's Accept Mark abilities to capital letters by default -------------------------------------------------------------------------------- 25aef92 | DracoOmega | 2024-08-08 02:30:35 -0230 Prevent casting Rimeblight on yourself (Midn8) -------------------------------------------------------------------------------- 64bea3c | David Lawrence Ramsey | 2024-08-07 13:46:36 -0500 Add a few more Xom drained brain messages. Which use the other random body part options. -------------------------------------------------------------------------------- 0111239 | Implojin | 2024-08-07 13:24:48 -0500 fix: Don't reject bones muts in tempforms (acrobat, Ge0ff) 23c4013377 introduced a bug where demonspawn could miss a horns levelup mut (with a blank demonic ancestry message) by gaining an XL while in treeform, stormform, wispform, etc. We really don't want to be rejecting mutations based on temporary forms here. -------------------------------------------------------------------------------- d06ab9c | David Lawrence Ramsey | 2024-08-07 12:31:05 -0500 Tweak Xom more-stealth message. Feeling more catlike makes little sense if the player's a felid, and it doesn't match the initial stealth message. -------------------------------------------------------------------------------- d3e3170 | David Lawrence Ramsey | 2024-08-07 12:23:02 -0500 Fix indentation. -------------------------------------------------------------------------------- 9c17b79 | David Lawrence Ramsey | 2024-08-07 12:16:29 -0500 Fix Xom drained brain msgs. They don't go through god_speaks(), so they need the substitutions and substring handling to be done manually. Maybe random body parts should be handled in the database instead of the code, but that would require adding Lua hooks for all the functions indicating which body parts the player does and doesn't have. For now, this is simpler. Closes #3966. -------------------------------------------------------------------------------- 8f36e4d | Nikolai Lavsky | 2024-08-07 16:11:02 +0300 fix: pluralise Xom-summoned illusions correctly -------------------------------------------------------------------------------- 89ee397 | regret-index | 2024-08-07 02:36:33 -0230 Throw together another Makhleb overflow altar A lot of Makhleb's overflow altars rely on fighting tier-5 demons (which are barely seen from Makhleb outside of potential future Crucible wrath), or demons behind glass (an old cliche we don't need that much more of). This vault playing around with negative space should help out those vaults without too much extra burden, deliberately drawing off of a new flavour Makhleb has in marks, by carving / splattering one onto the floor rather than into one's flesh. -------------------------------------------------------------------------------- 634013a | David Lawrence Ramsey | 2024-08-07 02:36:33 -0230 Add rare fire-themed temple to Ignis and Makhleb. "It contains a fire pit and bloody fountains on both sides (more Makhleb's preference than Ignis', but the former has many nore worshippers, after all)." [Committer's notes: Due to containing a non-Temple god, I decided to make this a rare Makhleb overflow altar with an Ignis altar rather than the other way around. Also took out some unecessary randomization covered inherently with vault rotation and mirroring default functions, moved around the header lines to fit house style, and opted for a dry fountain for Ignis instead. Closes #3791.] -------------------------------------------------------------------------------- 51d8626 | regret-index | 2024-08-07 02:36:33 -0230 Quick small icon adjustments Hide some error question-marks in the spell list, give the Word of Chaos mutation a non-default icon using its own ability icon, fixed a weird visual issue with the cold / fire resistance level 3 mutations, and properly give reduced potion healing the same icon as other mutations one can mutate without innately having it (by being Vine Stalker). (It'd be nice in that last case if we had a certain dynamic icon adjustment for splitting up innate versus changeable mutations, but there's still an absolutely immense amount of new mutation icons needed before that can really be done anyway, alas.) -------------------------------------------------------------------------------- 156bdd1 | David Lawrence Ramsey | 2024-08-06 17:26:53 -0500 Fix wording regarding death cobs. Since they're described as cobs of maize. -------------------------------------------------------------------------------- cc84cd3 | David Lawrence Ramsey | 2024-08-06 14:28:21 -0500 Add another Xom gizmo slot message. -------------------------------------------------------------------------------- 8252d5b | David Lawrence Ramsey | 2024-08-06 14:00:41 -0500 Add another gizmo noun. -------------------------------------------------------------------------------- 56fa223 | David Lawrence Ramsey | 2024-08-06 13:47:19 -0500 Revert "Make maximum skill checks account for Ru." Since it only affects maximum XP level, not maximum skill level. This reverts commit 79a3620ce472ee7c03ea3699a0e18aa6aacdea37. -------------------------------------------------------------------------------- 452ae66 | David Lawrence Ramsey | 2024-08-06 12:26:51 -0500 Make XP docking account for Ru's Sacrifice Exp. Since your maximum XL is no longer 27. -------------------------------------------------------------------------------- 79a3620 | David Lawrence Ramsey | 2024-08-06 12:16:59 -0500 Make maximum skill checks account for Ru. If you've sacrificed experience, you maximum level is no longer 27. Also, make gaining the inexperienced mutation lower your training targets so that they're in range. -------------------------------------------------------------------------------- a8328fd | elliottbernstein | 2024-08-06 11:35:09 -0500 block entry of > 27 skill target -------------------------------------------------------------------------------- d85c740 | Isaac Clancy | 2024-08-06 09:07:14 -0500 Fix incorrect dependencies in the Makefile -------------------------------------------------------------------------------- 0644d94 | Implojin | 2024-08-05 21:44:17 -0500 Increase visibility of malevolence messaging (sdynet) Here we force_more for malevolence messages and highlight them in the log, to hopefully reduce the incidence of players not realizing they've been hit with malevolence (especially when going down stairs). -------------------------------------------------------------------------------- c0d1bbe | regret-index | 2024-08-05 21:03:50 -0230 Don't try to use the Bazaar wrapper outside of Bazaars (Cheibrodos) The default-depth line for the entries was still applying to the bazaar wrapper vault (for Xom versus not-Xom vault bazaars), which meant there was a small chance for a bazaar-entry floor to try to place the wrapper itself (and then fail due to the bazaar layouts all being only valid within bazaars). Moving the default-depth line above it fixes this. -------------------------------------------------------------------------------- e579cb0 | Nikolai Lavsky | 2024-08-05 23:16:29 +0300 feat: add an indicator for banished apostles Sometimes an alive apostle doesn't show up at work, doesn't answer work emails, and ignores Recall Apostles. This can happen if the apostle has been banished, but there was no indication for that on the Extra religion screen previously. This commit fixes that. -------------------------------------------------------------------------------- 909ce11 | David Lawrence Ramsey | 2024-08-05 12:13:28 -0500 Remove unneeded blank line. -------------------------------------------------------------------------------- 90a6e04 | David Lawrence Ramsey | 2024-08-05 02:28:16 -0500 Fix foul flame damage (hjklyubn, DracoOmega). The formula was only doing half the damage it was supposed to be doing. -------------------------------------------------------------------------------- f8a32a3 | regret-index | 2024-08-05 03:43:32 -0230 Use a min and not a max Whoops. -------------------------------------------------------------------------------- 0c02579 | David Lawrence Ramsey | 2024-08-05 00:06:44 -0500 Add another mythical creature to artefacts. -------------------------------------------------------------------------------- 0ccf3f1 | regret-index | 2024-08-05 02:15:52 -0230 Summon only two, not three illusions from Xom wrath + Oka (particleface) The action normally gives one a friendly illusion to offset the two hostile ones, but with sacrificing love or worshipping Oka the friendly one would be hostile instead. This now only places two illusions period if allies are forbidden, so it's not made _extra_ worse. -------------------------------------------------------------------------------- 8b305a4 | regret-index | 2024-08-04 22:04:14 -0230 More adjustments to Xom and tension Worthy of note: * Xom's bazaars are now a lot less likely while autotravelling between floors, and with decreasing odds past the first if one's not in noticeable trouble. While they're a reasonable success, getting seven per 3-rune game after hitting the rough basic gold minimums is far too many per game. * Xom's divination is once more less likely on already-explored or already-revealed floors- the creature detection isn't super reliable due to not updating compared to Ash or antennae, so it shouldn't eat up a variety of Xom actions. * Xom's door opening-and-closing is now solely a bad act with minimum rather than maximum tension, due to the number of ways things can go badly with it (like ghost vaults), and it is now no longer nearly so likely in high tension scenarios. A small amount of other scenery screwery has also been added (food and tree warping), to still keep a little more variety when Xom's in a good mood. * Xom's hostile shadow creatures count scales even further to XL now, since it got a lot from guaranteeing a chaos-list creature amongst them. * Xom's actions have been juggled around a bit more to make stat drain and torment less likely plus showcase the newer effects instead. Hopefully 0.33 will contain a massive rewrite of the overall action choices.... * The monster current percent of health to tension threat ratio is no longer a 1-to-1 ratio (and instead scales to 33% of their total threat if they're hostile or neutral, and to 20% otherwise). As everybody knows, "almost dead" means "still entirely capable of killing you". * Monsters chanting Word of Recall count more for tension, and monsters that can't see an invisible player no longer count as much less. Neutral and good neutral monsters now count for half rather than 0 tension, also (so frenzying a monster doesn't completely throw out its capacity to also spin around and hurt you, and so that random friends aren't completely ignored for the distractions they may be). Silence is now tracked for the player always (invocations and scrolls are just as relevant as spells are), and for monsters only if they care about such. * Tension is now always slightly higher in Pan (where there's no easy escape and still regular monster summoning) and much higher on the Orb run (for obvious reasons). -------------------------------------------------------------------------------- c317361 | DracoOmega | 2024-08-04 18:43:43 -0230 Fix off-by-one error in Dismiss Apostle descriptions (Mattlistener) Accidentally broken by 258319946a6387f947fb8e9a2748ec4143870134 It was printing the stat block for the incorrect apostle (including, more confusingly to players, the last apostle that was available to be recruited, whether they had actually taken them or not!) -------------------------------------------------------------------------------- f9ad053 | David Lawrence Ramsey | 2024-08-04 14:12:47 -0500 Don't refer to undead krakens as dead (Aliscans). Simplify the message to not mention dead ones (as is done with starspawn) and to be more accurate regarding tentacles in a way that should cover all cases (e.g. a soul-bound kraken from Yred's power flies, and so is not in water). -------------------------------------------------------------------------------- f563a0e | David Lawrence Ramsey | 2024-08-04 14:04:39 -0500 Remove obsolete comment. -------------------------------------------------------------------------------- faebb85 | David Lawrence Ramsey | 2024-08-04 12:23:32 -0500 Document BiA Sprint change. -------------------------------------------------------------------------------- d9b9d3c | David Lawrence Ramsey | 2024-08-04 12:11:00 -0500 Rename the Xom number key. Since it's only used locally. -------------------------------------------------------------------------------- 579b58d | David Lawrence Ramsey | 2024-08-04 12:00:28 -0500 Put back an eye reference in a Pan lord desc. This partially reverts commit e099dce725e5513535340ebb5d52ce9d2ed2cbab. -------------------------------------------------------------------------------- 3326928 | David Lawrence Ramsey | 2024-08-04 10:08:47 -0500 Improve Charlatan's Orb changelog entry (ge0FF). -------------------------------------------------------------------------------- 48756ab | David Lawrence Ramsey | 2024-08-04 09:27:17 -0500 Revert "Replace eyebrow references with hair references." Now that all species have eyes again, we can assume again that if they have hair, they have eyebrows. This reverts commit 61b81b70c18568995e0eea3fec7c10c91e6aba5e. -------------------------------------------------------------------------------- 132a332 | Monkooky | 2024-08-04 09:21:14 -0500 Remove undocumented 'wait here' command The behaviour of the undocumented 'wait here' shout is clearly similar to 'guard this area'; but the different parameter for _set_friendly_foes obfuscates that they are identical. This makes the code harder to parse with no real gain to gameplay. -------------------------------------------------------------------------------- 33c2599 | David Lawrence Ramsey | 2024-08-04 09:21:09 -0500 Update changelog for Charlatan's Orb changes. -------------------------------------------------------------------------------- ad2143b | Monkooky | 2024-08-04 09:21:09 -0500 Update Charlatan's Orb The Charlatan's Orb can currently break the 27 skill limit for evocations, and this does not behave correctly for some misc evokers. The orb was already probably an incorrect choice for a significant majority of characters, and simply capping the boost at 27 would have made this worse. Instead, we give the orb a more unusual effect of directly boosting skills based on unmodified evocations. -------------------------------------------------------------------------------- e91ea31 | Implojin | 2024-08-04 05:25:11 -0500 Remove an obsolete fake lang line We haven't passed out from exhaustion since 0ac0241410, and I'm removing this because it came up in an unrelated grep. Possibly more of these are obsolete, but I haven't the heart to brutally trim them. -------------------------------------------------------------------------------- 4b24945 | Implojin | 2024-08-04 02:49:32 -0500 Remove a 2010 sprint piety cost hack Prior to this commit, this hack only affected BiA, increasing its piety cost (and no other god abilities) by 2.5x in sprint. Very dubious that this approach was ever a good idea. Sprint could certainly use a balance pass, but this isn't it. This reverts commit 8636e5810e06c6195528b92d0df079439bb1c6f5. -------------------------------------------------------------------------------- 9bdd919 | orjb1 | 2024-08-03 21:37:44 -0230 Propose unrand guarded vault for Rift "So the flavour I'm going for here is [...] not abyss/leakage themed, [and I] did not want a portal (in my headcannon the acolyte got stuck here experimenting). My idea was that the acolyte has been busy 'forging/blessing/animating' demon tridents repeatedly eventually created 'Rift'. Elf/Vaults seemed reasonable?" [Committer's notes: Squashed commits, fixed another descriptions issue according to dolorous's comments in the PR, moderately nerfed the other dancing demon tridents, added new tile decoration, and heavily adjusted the header to fit Crawl house styles- see my comment in the PR for further elaboration there. Closes #3711.] -------------------------------------------------------------------------------- 85f748f | yrdzrfxndfvh | 2024-08-03 20:23:44 -0230 add silly lair vault "oh no... the lair of the legendary eight-headed giant serpent Orochi has been infested with cockroaches!" [Committer's notes: Removed float orientation (why are people so ready to take up the big vault slot with small vaults?), moved it to the right file, handled some teleport closets, and added a makeshift kusanagi reward. Closes #3848.] -------------------------------------------------------------------------------- a3d2664 | yrdzrfxndfvh | 2024-08-03 19:28:13 -0230 2 monster additions to ziggurats "adds protean progenitors to giants because they are giants and undying armories to orc because it sounds fitting (they get the same scaling as moths of wrath)" [Committer's notes: Both notions are appreciated, but are both restrained in being being added here for differing reasons. I somewhat lowered the chances on Orc floors for both moths of wrath and undying armouries, to try and not outweigh their prevalence already in Spider / Vaults / Lair Branches / Earth floors, and also because they can't actually affect one another that well. It, of course, should still be meanfully harder off with the undying armouries regardless. Protean progenitors also are somewhat lowered in weight from other stronger giants because they're rather mechanically different from other giants and because it'd take away from the juggernaut + titan focus otherwise when protean progenitors also already have Chaos floors. Still should both be good for a little more spice in the already too-weak floors. Closes #3920.] -------------------------------------------------------------------------------- 28c56dd | gammafunk | 2024-08-03 11:44:42 -0500 fix: Correct a Bazaar item name (Oneirical) -------------------------------------------------------------------------------- f6a9f58 | David Lawrence Ramsey | 2024-08-03 11:02:19 -0500 Tweak Zin angel message. Refer to gambling as lawless, not evil; it's a chaotic, but not evil, act. -------------------------------------------------------------------------------- 300cd29 | David Lawrence Ramsey | 2024-08-03 09:14:30 -0500 Rename default djinni/naga tiles w/colours. So that all the pairs are next to each other in alphabetical order. -------------------------------------------------------------------------------- 41edf89 | David Lawrence Ramsey | 2024-08-03 08:31:18 -0500 Fix XL typo. Coglins get gizmos at XL 14, not 13. -------------------------------------------------------------------------------- 4a25f21 | David Lawrence Ramsey | 2024-08-03 07:48:03 -0500 Fix typo and capitalisation. -------------------------------------------------------------------------------- 20d766a | DracoOmega | 2024-08-03 04:36:59 -0230 Update changelog -------------------------------------------------------------------------------- 19b87b1 | David Lawrence Ramsey | 2024-08-02 22:21:21 -0500 Fix spacing. -------------------------------------------------------------------------------- 6abdf12 | regret-index | 2024-08-02 23:04:40 -0230 New Xom action: force speaking a slow Word of Recall The easiest way to interact with players in a game about killing monsters is to introduce more monsters, and while Xom's list of actions is very full of summons already, there are yet still further contexts and twists one can reasonably experiment with. This very rare bad Xom action, with controls on minimum XL and maximum tension, should reasonably stand out on a few fronts: it can be interrupted (and takes between 2x and 3x as long as a normal word of recall to do so, so there's lots of space to react), and it's pulling out actual monsters from the level and its vaults as opposed to generating yet more monsters one could flee and wait out timers for. Probably it's fine under Xom's continued flexibly unreliable nature? Definitely not any worse than when a Zot trap randomly does it. (Also, it allows lines like "The rat is forced to slowly start squeaking a word of recall!", which is a great notion in and of itself.) -------------------------------------------------------------------------------- c468895 | regret-index | 2024-08-02 22:54:56 -0230 Let Xom add an extra chaos brand to unrands (DracoOmega) "This implements an item flag that lets unrand weapons be described as 'chaotic' and gives them the chaos brand (on top of whatever brand or on-hit effects the unrand weapon might already have). This is intended solely as a Xom perk for Xom's bazaars. Regular rebranding can't work on unrands, and it felt like there could be some fun to be had with Xom breaking the rules and giving you a touch more chaos on some of the most interesting and exciting weapons." [Committer's notes: This gives a 37.5% chance of seeing a chaotic-touched normal unrand weapon distributed amongst the weapon types in a Xom bazaar, and a 37.5% chance of seeing a regular unrand that was already risky or chaotic enough without extra effects. Since chaos brand is actually a relatively poor fit on weapons besides ranged or short blades or top-end two-handers on a god that provides zero reliable emergency escape options, the power already baked into unrands should help cover for it. For the record, just to reiterate: absolutely do not provide this in any contexts besides Sprints or Xom's bazaars. This is solely meant as a rare treat for Xom worshippers in the base game.] -------------------------------------------------------------------------------- c472126 | regret-index | 2024-08-02 22:54:56 -0230 New Xom action: special bazaar banishment The most exciting part of Xom by a decent margin are the strategic benefits for worshipping them, since this lasts far longer than any given moment of Xom's whims passing by to make a situation worse or better. While direct gifts and mutations are relatively fine starting points, there's a decent space more to do something unique, especially with only one other god interacting with shops solely through direct player's choices of semi-permanent dungeon fixtures. This rare Xom action directly warps a character over to a unique Bazaar, as long as they have a sufficient amount of gold. (For technical reasons involving losing previous bazaar floors, this can't happen while in you're in a Bazaar or the Abyss. Whenever you exit, you'll arrive wherever you just were previously.) This Xom-exclusive bazaar itself contains all three of the following heavily customized shops: * "Party Supplies": Potions and scrolls with some risk to the user (e.g. immolation, silence, ambrosia), and a small amount of debuff darts, both for cheap and with extra-high quantities. * "Affordable Mysteries": Spellbooks leaning on effects Xom directly or indirectly uses across the non-conjurations non-elemental schools, some wands, some talismans with one randart, plus a manual that supports one of those prior books / wands / talismans. * "Avant-Garde Galleria": Chaos randart weapons, small chances for innately risky or chaotic unrand weapons and armour, two randart rings with a negative resist plus either ^Contam or ^Drain, and two randart orbs of mayhem / wrath / guile with a chance of a randart scarf of harm instead. This being done through a bazaar's shops rather than god gifting reasonably differentiates it from other god gift upgrades (including Xom's own untouched regular gifts), but it should hopefully feel quite distinct and memorable and exciting when one gets the opportunity, and it should also encourage people to try out more of riskier consumables, equipment egos, and negative artefact properties. -------------------------------------------------------------------------------- b3ecabc | David Lawrence Ramsey | 2024-08-02 16:56:14 -0500 Improve player blindness check. Use is_lifeless_undead() for consistency with everywhere else. -------------------------------------------------------------------------------- f771970 | David Lawrence Ramsey | 2024-08-02 16:47:16 -0500 Remove stray blank line/semicolon. -------------------------------------------------------------------------------- 3c87236 | David Lawrence Ramsey | 2024-08-02 16:27:52 -0500 Add a few more eye messages for Xom. -------------------------------------------------------------------------------- 1698bd0 | David Lawrence Ramsey | 2024-08-02 16:18:51 -0500 Reorder Xom body part checks a bit. Put eyes after ears, as is done in random_body_part_name(). -------------------------------------------------------------------------------- 9069b2d | David Lawrence Ramsey | 2024-08-02 16:16:06 -0500 Remove lack of eyes from players/monsters. Every player species/form is now assumed to have eyes. Only undead players (not counting living vampires) are unblindable and undazzleable. Monster vine stalkers also lose the unblindable flag. Eyes are still available as a random body part in Xom messages. -------------------------------------------------------------------------------- 9a6a6ae | David Lawrence Ramsey | 2024-08-02 14:54:43 -0500 Consistently add commas to definitions. -------------------------------------------------------------------------------- 857e39b | David Lawrence Ramsey | 2024-08-02 14:41:50 -0500 Properly ban eye sacrifices for eyeless players. It was done in the wrong place; Ru's sacrifice mutations are handled differently. -------------------------------------------------------------------------------- d77ae7e | DracoOmega | 2024-08-02 15:55:11 -0230 Fix ranged auto-fight behaviour with Soul Splinter (CarefulOdds) It wouldn't properly realize you couldn't usefully cast it on a monster that was presently soul-splintered. -------------------------------------------------------------------------------- 996240b | David Lawrence Ramsey | 2024-08-02 13:15:11 -0500 Fix comment wording. -------------------------------------------------------------------------------- 3fab5b5 | David Lawrence Ramsey | 2024-08-02 12:50:56 -0500 Fix comment typo. -------------------------------------------------------------------------------- 61fea11 | David Lawrence Ramsey | 2024-08-02 12:00:25 -0500 Add a few lines to Zin angels/goblin sharpers. Taken from an image in this Reddit thread (u/kuniqsX): https://www.reddit.com/r/dcss/comments/1ei6m5l/5_hand_blackjack_deal/ -------------------------------------------------------------------------------- 666e40f | David Lawrence Ramsey | 2024-08-02 11:54:20 -0500 Fix punctuation. -------------------------------------------------------------------------------- ec6e65a | David Lawrence Ramsey | 2024-08-02 11:03:18 -0500 Add another book magic entry to artefacts. -------------------------------------------------------------------------------- 9dd0097 | Monkooky | 2024-08-02 00:24:10 -0500 remove auto-hit flag this flag is entirely redundant; it is true exactly when aimed_at_feet is and checked exactly when aimed_at_feet is -------------------------------------------------------------------------------- c4cf240 | DracoOmega | 2024-08-02 02:29:43 -0230 Allow Mark of the Celebrant to trigger when djinn pay HP for spells (If such payment lowers them below 50%) -------------------------------------------------------------------------------- 5a228cc | DracoOmega | 2024-08-02 02:29:18 -0230 Make Permafrost Eruption actually unable to miss Since it was intended to be, and the description implies it is (as opposed to merely being very accurate). -------------------------------------------------------------------------------- 0da81c8 | DracoOmega | 2024-08-01 02:54:10 -0230 Fix typo in god description -------------------------------------------------------------------------------- 2a28826 | DracoOmega | 2024-08-01 02:54:10 -0230 Fix a future mutation indicator still showing on 'A' when it shouldn't -------------------------------------------------------------------------------- f732623 | regret-index | 2024-08-01 00:43:27 -0230 Vaults vaults batch (with extras) Part of the problem of the Vaults branch is that with its level generation focus on themeless minivaults making up the majority of every floor, there's not very much space to actually focus on the strength of vaults as something different from regular floor generation to notice as it stands out. The heavy work done on differentiating V from Depths has somewhat helped this, but for the most part, if there's no significant out-of-depth spam it can be difficult to actually distinguish floors as floors and not just opportunities for ironbound gimmicks to roll high and mean. This vaults batch, aside from one themed vault and a few vaults that try to place themselves throughout most of the game, is meant to somewhat address this with a few relatively simple themes and a depth-scaling lua function to help emphasize monsters the branch consistently already uses as instead part of given themed chambers- cold storage ice boxes, parks and zoos, charnelhouses, and intersection checkpoints for mages or ranged monsters. They're a little more likely to place monsters than other vaults because the depth scaling somewhat warps the capability to normally rely on normal monster band placements, but overall few should stand out versus what one could get already, while varying up the terrain and each game just that little bit more. (Also, this commit comes with a minor additional case to prevent weaponless training dummies from interrupting rest, and also consolidating the two "preserve_wall" and "no_wall_fixup" tags into one rather than splitting their vault usage between the two.) -------------------------------------------------------------------------------- 4455a2a | regret-index | 2024-08-01 00:43:26 -0230 Green tiles (pianoman523) The volley of thorns spell icon and a new extra-fancy altar for Jiyva, both with heavy edits. -------------------------------------------------------------------------------- 1ee3b3f | David Lawrence Ramsey | 2024-07-31 21:06:30 -0500 Mark serpent form as having a tail. And make sure it only works for constriction, not tail-slaps. -------------------------------------------------------------------------------- 75b3d6c | DracoOmega | 2024-07-31 23:14:36 -0230 Fix inverted logic in refactor aux attack checks. Players could use every aux they *didn't* have, instead of ones they did... -------------------------------------------------------------------------------- dcd205b | DracoOmega | 2024-07-31 21:44:54 -0230 Make Blindness actually reduce player aux accuracy (One of the pitfalls of it using an entirely different to-hit function...) -------------------------------------------------------------------------------- 31a074b | DracoOmega | 2024-07-31 21:44:54 -0230 Reword the names of a few aux attacks to look better in xv Avoiding such lines as "You have 80% to hit with your claws and 75% to hit with your claw." (This doesn't affect hit verbs, though will also affect miss messages.) -------------------------------------------------------------------------------- ee1fe2b | DracoOmega | 2024-07-31 21:44:54 -0230 Change how aux attack accuracy is displayed Previously, the small description of aux attack mutations would list trigger chance, accuracy, and base damage in one block, which misleadingly made it look like the accuracy was in some way a property of that specific aux attack. But in fact, all aux attacks have the same accuracy and this was just reporting the player's current to-hit with aux attacks in *general* (a fact that was misunderstood by literally everyone involved in a recent discussion about them) and additionally doing so using a scale of plusses that no one had any confidence about the meaning of. We already report player melee to-hit in monster descriptions in a human-readable way, so I am adding a description for aux attack accuracy there as well (if the current character has any) and removing the line from aux mutation descriptions. I tried to be careful that the math here was correct (there are multiple subtle differences between how the to-hit value is used by auxes versus normal melee attacks) but am still not 100% confident. -------------------------------------------------------------------------------- e50eda5 | DracoOmega | 2024-07-31 21:44:54 -0230 Refactor aux attack usability Instead of a switch statement in _extra_aux_attack(), add a is_usable() method to AuxAttackType (so that it is possible to direct query whether the player possesses a given aux attack type outside of trying to perform them. -------------------------------------------------------------------------------- 2b9147a | Implojin | 2024-07-31 18:39:45 -0500 fix: Disallow zigfig use on the orb dais (Lightli) Previously, it was possible to use a zigfig while standing on the orb dais, resulting in the zigfig being used without a zig entrance appearing. Here we mark the dais as "critical", hopefully preventing this and other issues in the future. -------------------------------------------------------------------------------- b43e308 | Implojin | 2024-07-31 17:49:59 -0500 fix: tweak colours of evokers in item stacks Following from 3b7b6a97b3 and 50297eb6a4, here we give evokers the same treatment as the previous commit. -------------------------------------------------------------------------------- 3b7b6a9 | Nikolai Lavsky | 2024-08-01 01:30:45 +0300 fix: tweak colours of artefacts in item stacks It's hard to notice artefact magical staves and artefact talismans in big item stacks, because their glyphs are coloured in darkgrey as if they were mundane items. This commit fixes that, and also gives unrandarts lightcyan colour as a followup to cf64465. -------------------------------------------------------------------------------- 5e7d71e | DracoOmega | 2024-07-31 06:13:40 -0230 Let orc wizard apostles know Soul Splinter and Grave Claw. -------------------------------------------------------------------------------- cbb5823 | DracoOmega | 2024-07-31 06:13:40 -0230 Let monsters cast Grave Claw Also mostly for ghosts and illusions. (Most of the code was already in place for this to work earlier; I just hadn't done the last bits.) Monsters, of course, are flagrant cheaters and don't have to care about ammunition for this spell. Ghosts, at least, are probably as full of the malice of the recently dead as they can hold. (This means the spell description could be a little misleading with the latter paragraph; in future I will try to find a way to fix that.) -------------------------------------------------------------------------------- bc9fe51 | DracoOmega | 2024-07-31 06:13:40 -0230 Let monsters cast Soul Splinter Mostly for ghosts/illusions at the moment, though who knows if another use will present itself in future. -------------------------------------------------------------------------------- d9bca62 | DracoOmega | 2024-07-31 06:13:40 -0230 Gently nerf Gravitambourine Make it require slightly more evocations to get a radius upgrade and decrease its Bind duration at less than ~11 evocations. -------------------------------------------------------------------------------- e2a70cf | DracoOmega | 2024-07-31 06:13:40 -0230 Prevent Injury Bond from being cast on firewood (regret-index) -------------------------------------------------------------------------------- afbbcc1 | DracoOmega | 2024-07-31 06:13:40 -0230 Make Blazeheart Golem explosion *actually* scale with spellpower. This has been bugged since the spell was first implemented and would always cause a 3d20 explosion regardless of spellpower (oh, the irony....). After so long seeming to not be wildly overpowered at this level, I was a little hesitant to nerf it to the originally-intended values, so I have moved those upward a little. It will now reach 3d20 at 80 spellpower instead of 100 (capping at 3d22 at 100 power). I expect it will still feel like it packs a sufficient punch (but it really was intended to care about spellpower.) -------------------------------------------------------------------------------- 87d6e9d | DracoOmega | 2024-07-31 06:13:40 -0230 Make recasting Canine Familiar give a minor duration boost at low duration It was possible if a familiar was already nearly expired when the player recast it (to heal/buff them) for it to poof before even making use of the instant attack you gave it. Now, ensure this doesn't happen by giving a few extra turns of duration if they were almost out. (This isn't enough to make it viable to keep them along with you at all times, but should ensure that if you spend MP in their direction that they will remain long enough to immediately make use of it.) -------------------------------------------------------------------------------- df025e5 | DracoOmega | 2024-07-31 06:13:40 -0230 Fix random rounding in Rimeblight spell description (Acrobat) -------------------------------------------------------------------------------- c1ca0b8 | DracoOmega | 2024-07-31 06:13:40 -0230 Display hoarfrost cannon damage in Hoarfrost Cannonade description To make it a little easier to tell how gear changes will affect your summons' bullets without having to actually cast the spell. -------------------------------------------------------------------------------- cde8aef | DracoOmega | 2024-07-31 06:13:40 -0230 Rename a couple confusing zap_types ZAP_FLASH_FREEZE wasn't actually used by Flash Freeze, which instead used ZAP_ICY_FLASH_FREEZE (while the former was used only by Creeping Frost). Rename these to actually correspond to the spell that uses them. -------------------------------------------------------------------------------- 480633a | DracoOmega | 2024-07-31 06:13:39 -0230 Clear the pursuers list after uncontrolled blinks/teleports This mostly addresses the rare case of a teleport going off (or dispersal trap being triggered) on a turn where the player had stepped away from some monster and this translocation moving them into range of the monster when they otherwise would not have been. (ie: it is possible to recieve an attack of opportunity if you step away from a monster, teleport, and then land 2 tiles away from their present location - even if you were nowhere near the monster when you moved). (Technically this makes the player immune to attacks of opportunity even in cases where they were already in range and shifted only a single tile, but that seems harmless.) -------------------------------------------------------------------------------- b985506 | David Lawrence Ramsey | 2024-07-30 22:38:28 -0500 Tweak a few Xom pseudo-miscast messages. -------------------------------------------------------------------------------- 9527bbf | David Lawrence Ramsey | 2024-07-30 22:35:04 -0500 Reorder Makhleb mut checks. Put them in the same order that's used elsewhere. -------------------------------------------------------------------------------- 46e0fb5 | David Lawrence Ramsey | 2024-07-30 21:22:27 -0500 Add a few more time names to artefacts. -------------------------------------------------------------------------------- 39ff337 | David Lawrence Ramsey | 2024-07-30 21:14:10 -0500 Add second placeholder for Globe of Annihilation. If the player had no Makhleb hell-mutation, it would mention drawing power from "the Hells themselves", but have no description for the energies produced; it now uses "hellish energy" as a placeholder there. -------------------------------------------------------------------------------- 79739bf | DracoOmega | 2024-07-30 22:25:53 -0230 Make Call Down Lightning a bit more visible when cast Without a beam trail, the default animation was very brief. Let it linger just a tiny bit longer. -------------------------------------------------------------------------------- 1adbacb | DracoOmega | 2024-07-30 22:24:22 -0230 Make cerulean imps more likely to speak after summoning them I actually went in to find out why the line to make them speak was 'broken' and couldn't actually trigger, but evidently they just had a ~96% chance to opt to say nothing when asked. These lines feel cute enough that I think they should be a little more common. -------------------------------------------------------------------------------- db1a49a | DracoOmega | 2024-07-30 22:20:13 -0230 Fix 'future XL mutations' key showing up all the time on 'A' (PJRamaglia) -------------------------------------------------------------------------------- bd53a00 | DracoOmega | 2024-07-30 21:14:37 -0230 Fix incorrect labels for local tiles paperdoll editor (inflori) Off-by-one since Coglins added an off-hand weapon slot. -------------------------------------------------------------------------------- ebd1993 | DracoOmega | 2024-07-30 21:13:38 -0230 Display Makhleb's 4* Destruction upgrade on the god power screen (cfcfcfcf) Not really happy with how hacky this code is, but it otherwise seems hard to insert the power at the appropriate point it is gained. -------------------------------------------------------------------------------- f4909a7 | DracoOmega | 2024-07-30 21:11:17 -0230 Slightly clarify a point in Mark of the Legion's description (Acrobat) -------------------------------------------------------------------------------- b563570 | DracoOmega | 2024-07-30 21:10:42 -0230 Let ?summoning work in the Crucible (Lici) It's not really easy to scale the results of this scroll with how dangerous the Crucible itself has scaled at any given time, but that's probably fine. (I've included all of the non-Tyrant Makhleb servant set in the list that the scroll can produce.) -------------------------------------------------------------------------------- b690a71 | DracoOmega | 2024-07-30 21:07:39 -0230 Prevent aiming Unleash Destruction at yourself (cfcfcfcfcf) The player couldn't be hurt by the beam itself, but would still pay the cost for the ability and waste time. -------------------------------------------------------------------------------- 73a98bb | DracoOmega | 2024-07-30 19:17:56 -0230 Display future XL-based mutations on the 'A' screen (elliptic) This commit will make the 'A' screen display mutations that will be gained predictably at a future XL (ie: *not* for demonspawn or base draconians, but for all other species-based mutations). I have attempted to word these to make it somewhat more clear that the player does not have the mutation in question *yet* (ie: turning 'you can' into 'you will be able to' and so forth.) Simple automatic string replacements cannot reliably shift the tense of everything, so a custom message to describe a future mutation can also be specified in mutation-data.h (and this is done for a few of them, including ones that are especially long or would be really confusing, like claiming that vampires will 'become afflicted by vampirism' by XL 3 because bat form is technically an uprade to the vampirism mutation... I'm not entirely happy with the implementation, but it should still be a mild status quo improvement. -------------------------------------------------------------------------------- a117348 | David Lawrence Ramsey | 2024-07-30 14:35:30 -0500 Fix punctuation. -------------------------------------------------------------------------------- 263b1d4 | David Lawrence Ramsey | 2024-07-30 14:22:50 -0500 Add demonspawn soul scholar quote. -------------------------------------------------------------------------------- cabdb54 | David Lawrence Ramsey | 2024-07-30 13:57:30 -0500 Remove unneeded blank line. -------------------------------------------------------------------------------- 0340e30 | David Lawrence Ramsey | 2024-07-30 13:56:59 -0500 Tweak a hell message. We don't know if the player can taste things, and while there is a can_smell() function, there's no can_taste() function, and the sense of taste is mostly the sense of smell anyway if real-life rules apply here. As for the player's not having blood, the blood definitely isn't theirs in that case, so the message still works for them. -------------------------------------------------------------------------------- cddd9a8 | David Lawrence Ramsey | 2024-07-30 13:39:32 -0500 Add "mouth" to Xom's list of body parts. Also add a few messages for it. (Also, regarding the previous commit message, all players are guaranteed to have two arms, if not two hands [due to Ru sacrifices], so they're all have singular and plural external body part options.) -------------------------------------------------------------------------------- cc40c1e | David Lawrence Ramsey | 2024-07-30 12:34:31 -0500 Add "muscles" to the list of internal body parts. So an octopode (with no bones) in death-form (with no blood) has one singular internal body part (the soul) and one plural internal body part (the muscles), so that internal body parts always have a possible option. External body parts are covered in singular by the head, and in plural by the hands, so they always have a possible option already. -------------------------------------------------------------------------------- 8c2505f | David Lawrence Ramsey | 2024-07-30 11:58:18 -0500 Add another gizmo modifier. -------------------------------------------------------------------------------- cc2d2dd | David Lawrence Ramsey | 2024-07-30 11:44:11 -0500 Replace redundant gizmo entry (oops). -------------------------------------------------------------------------------- f42772b | David Lawrence Ramsey | 2024-07-30 11:11:58 -0500 Update Xom message to account for all body parts. -------------------------------------------------------------------------------- accad25 | David Lawrence Ramsey | 2024-07-30 11:08:31 -0500 Add Xom messages for internal body parts. -------------------------------------------------------------------------------- 903400a | David Lawrence Ramsey | 2024-07-30 11:08:31 -0500 Add "soul" to the list of internal body parts. -------------------------------------------------------------------------------- 7a905b2 | David Lawrence Ramsey | 2024-07-30 11:08:31 -0500 Rework random body part handling. Properly separate internal and external body parts via a flag defined in mon-util.h, and actually include mon-util.h in mon-util.cc and xom.cc so that it's properly defined. -------------------------------------------------------------------------------- f36d2cf | David Lawrence Ramsey | 2024-07-30 11:08:13 -0500 Add another gizmo entry. -------------------------------------------------------------------------------- 8415c40 | patrick | 2024-07-30 11:26:26 -0400 Add more gizmo terminology -------------------------------------------------------------------------------- b2e4c65 | DracoOmega | 2024-07-29 19:09:05 -0230 Remove a very tiny chance to fail to place a Duel opponent monster::find_home_anywhere() (used as the default placement method for transiting monsters) isn't guaranteed to actually work. It tries 600 times to place a monster (choosing a random cell anywhere on the floor, which may be well outside the bounds of a portal vault) and afterward just gives up. This may be acceptable behavior for shafted monsters (though I am a little dubious even here), but in the case of Duel it results in the Duel immediately ending and the *next* time the player duels, that monster can appear alongside the new one. I'm not 100% sure this is the underlying cause of a recent bug, but it I can't see any other obvious cause, and this definitely is *possible* (if fantastically rare). Anyway, just place the duel target next to the player on arrival (like with stairs), which is more certain to work. (It will be relocated after that time anyway.) (Side note: monster::find_home_anywhere() doesn't appear to respect no-tele-into either, meaning it is probably possible to shaft monsters into display case vaults. Fixing this is somewhat non-trivial, though, since I think the most obvious implementation would also prevent monsters from taking stairs or hatches into no-tele-into areas as well, and I think at least some vaults make use of this at present?) -------------------------------------------------------------------------------- f184c26 | DracoOmega | 2024-07-29 19:02:41 -0230 Place duel opponents properly if you have LoS range < 3 (inflori) Duel tries to place your opponent a random 3-5 tiles away from the player, in a spot that the player still can see. But it is possible for kobold with scarf of shadows and Robe of Night to have LoS 2, making those two conditions mutually exclusive. This resulted in the monster placing 'anywhere' instead, which could include in the spectator stands where it was impossible to reach them.... Now the min placement distance will be capped by you.current_vision -------------------------------------------------------------------------------- cea2b13 | gammafunk | 2024-07-29 12:05:42 -0500 fix: Remove a teleport closet (Natris,nicolae) For nemelex_altar_shiori, some glyphs that became floor were not flagged with `no_tele_into`. Some glyphs inside unreachablehk -------------------------------------------------------------------------------- 38ce937 | Christopher Partin | 2024-07-28 21:13:21 -0500 Update README.md Added a link right below # How to Play to help navigate users to the installation help documentation. This documentation is nested under several folders. For new users or those who aren't technically-savvy, having these installation instructions directly in the README, under How to Play, makes sense. That way they don't have to go searching if they run into any confusion, which will cause frustration. [Committer's note: Removed unneeded initial slash from link, and reformatted commit message.] -------------------------------------------------------------------------------- 1bdf802 | regret-index | 2024-07-28 23:05:04 -0230 Idiosyncratic earthworks (pianoman523) New barreling boulder tiles, a more convincing Charlatan's Orb, and something heavily repurposed into providing unique stone walls for the Abyss. Abyss as a result has one of three different tile colours of stone each game, which is a little weird but looks unique enough that I'm willing to take the chance on this experiment. -------------------------------------------------------------------------------- 4efc981 | David Lawrence Ramsey | 2024-07-28 19:08:27 -0500 Put Makhleb's mut desc checks in the same order. In case someone uses wizard mode to grant themselves multiple ones, the description will be as accurate as the code is. Also, remove a duplicate "the" from a fallback message. -------------------------------------------------------------------------------- 3abf8ce | David Lawrence Ramsey | 2024-07-28 18:43:01 -0500 Remove unneeded line breaks. -------------------------------------------------------------------------------- 19d7f82 | David Lawrence Ramsey | 2024-07-28 18:36:37 -0500 Also mention piercing in Hell-upgraded UD. -------------------------------------------------------------------------------- 9376fc3 | David Lawrence Ramsey | 2024-07-28 18:21:46 -0500 Mention how your associated Hell changes UD. Closes #3938. -------------------------------------------------------------------------------- a9c1aa2 | DracoOmega | 2024-07-28 14:47:06 -0230 Fix weird typo with Infernal Servent power boost from hostiles (ge0FF) -------------------------------------------------------------------------------- 7aa91e7 | regret-index | 2024-07-28 06:22:01 -0230 Improve calcifying dust visibility (pisaster) While the older calcifying dust tiles were troubled ones on an aesthetic level, they admittedly were all quite difficult to miss- fully opaque and mostly a colour not densely provided in most capacities. For visibility's sake, I'm making the new tiles somewhat more filled in, brighter, more saturated, and fully solid. This still isn't perfect, but I'd honestly prefer more changes on other system levels for this sort of matter anyway for other clouds, as many other cloud tiles are much harder to see and mostly rely on not being nearly as prominent, in much higher quantities, or both. Some sort of not-standing-in-a-harmless-Cloud status, maybe? (Also, I adjusted the default danger highlighting for calcifying dust in general- its phrasing doesn't seem to account for it doing less than one exclamation mark's worth of damage, which is very silly in its inconsistency.) -------------------------------------------------------------------------------- f9c04a0 | regret-index | 2024-07-28 06:22:01 -0230 Fruit tiles (meckryl) and spider tile (pianoman523) The cache of fruit and culicivora tiles, specifically. Both nice improvements on accuracy and colour. -------------------------------------------------------------------------------- 03e56d1 | DracoOmega | 2024-07-28 03:07:22 -0230 Don't display Charms/Transmutations skills in Djinn dumps (inflori) When manually enabling spell skill training on a djinn (either for a character type that started with it off, or toggling it off and on again on some other character), it would enable *all* magic skills, including those which had been removed. I don't think had much effect, since it wouldn't train them or display them in the skill menu, but they WOULD show up in chardumps after that point. -------------------------------------------------------------------------------- c00c2e1 | DracoOmega | 2024-07-28 02:10:23 -0230 Checkwhite -------------------------------------------------------------------------------- 6854c70 | DracoOmega | 2024-07-28 01:54:55 -0230 Fix another lua test assert Apparently fsim.lua was turning the player into a minotaur, which caused them to have horns by the time mutation.lua rolled around, which prevented them from gaining antennae (and had previously only been stopped by mut_species.lua turning them into something else first). Instead, change into something with no *physiological* mutations to conflict with tests, during this test itself. (I do still wonder if an explicit test species makes sense...) -------------------------------------------------------------------------------- 6b3df5f | DracoOmega | 2024-07-28 01:54:55 -0230 Improve Mark of the Tyrant's hostile summon behaviour (Lightli) Getting a hostile demon from Infernal Servant also raises the quality of the friendly demon you get, but with 25+ invo and Mark of the Tyrant, this made demon qualify fall off the top of the chart and summon the default demon (a red devil) instead. Additionally, being able to get actual hostile fiends at the highest levels of invo with this mark could feel overly punishing for the player's investment, so let's cap hostiles to the same level that they would be at high invo without having this mark. -------------------------------------------------------------------------------- a89054e | DracoOmega | 2024-07-28 01:54:55 -0230 Raise Formicid translocation aptitude to +2 After felid and spriggan's massive +4 translocations apt, virtually no other species in the game has better than 0 (aside from +1 for Deep Elf and Barachi, who have positive apts with virtually every magic). I find the idea of a species who cannot translocation *themselves* being otherwise one of the most adept at using it to be amusingly paradoxical, and there are multiple high level spells now that a formicid would be very happy to cast (even while still lacking access to the low-level bread and butter of the school, which I think could create some interesting tension.) Let's see how it feels. -------------------------------------------------------------------------------- 3a655b3 | DracoOmega | 2024-07-28 01:54:54 -0230 Fix a crash with killing an enemy with the 1st of 2 retaliation attacks More specifically, with killing one via minotaur retaliatory headbutt when the executioner blade aux from Mark of Execution was active. It would try to retaliate a second time, after the monster was dead. -------------------------------------------------------------------------------- fafa182 | DracoOmega | 2024-07-28 01:54:54 -0230 Tweak some mutation lua tests There are now no species in Crawl without any innate mutations at all, so it is not possible for the lua tests to rely on any playable species not having any. In fact, it turns out that mutation.lua *already* silently relied on you being a species with no innate mutations, even though that had stopped being true by default since humans were changed, and it was only due to 'cleanup' at the end of a previous test in the default ordering that it didn't assert. (ie: it would already assert if you ran the test on its own) I've changed mut_species.lua to restore the player to the species they were at the start of the test rather than to any specific species (this feels closer to the idea of 'cleanup' to me and is what is currently done with the player's position.) As for mutation.lua, I changed the asserts to only ensure that NON-innate mutations are cleaned up (this was only done during random mutation tests anyway, and not ones that cared about mutation conflicts). If we really want to ensure a blank slate of innates for the purposes of tests, I think we would be better off either creating a method specifically for this pupose or a vanilla species specifically to be used for tests only (and thus not depending on vagueries of design changes over the years). -------------------------------------------------------------------------------- 766c39c | DracoOmega | 2024-07-28 01:54:54 -0230 Give Deep Elves innate increased MP regen Deep Elves are the last remaining species without anything unique about them besides numbers - even humans have a neat special gimmick now! And while they are a fairly popular and extremely iconic species for pure casters, many skilled players consider them to be on the weak side even within their own domain - their skills at magic simply not outweighing their fragility. While winrate should not be a primary concern with species design (cf. mummies!), I think this is a case where it's possible to make them a little stronger and also a little more fun without fundamentally affecting how they play to anyone who enjoys their current incarnation - something minimally intrusive that will make them better at specifically the thing they are already chiefly associated with doing. And I firmly believe everyone likes having a little something they can point at about a species they like and say "This is a thing they can do that no other species can!" Let's try giving Deep Elves one of those things! (And given the positive reaction that was voice dabout a previous changelog update that falsely claimed this change had already been made, I suspect many people will be happy to see it.) -------------------------------------------------------------------------------- f17e09b | DracoOmega | 2024-07-28 01:54:54 -0230 Make tides look a little better around some pseudo-walls (regret-index) While trees and statues are 'solid', they don't actually visually occupy all of their tile, and having the tide in Shoals make a hard cut off around them looked kind of bad. This generally looks much nicer. -------------------------------------------------------------------------------- dce7167 | DracoOmega | 2024-07-28 01:54:54 -0230 Don't let Vessel of Slaughter be dispelled It would even immediately throw the player into the Crucible if an enemy did this! -------------------------------------------------------------------------------- b58bf77 | DracoOmega | 2024-07-28 01:54:54 -0230 Don't crash on using Vessel of Slaughter in Sprint This one *does* potentially allow 'stalling' in Meatsprint specifically, but Djinn warpers having Vhi's is probably more balance-affecting than this is (and what *is* Meatsprint balance, anyway?) I don't expect it should be problematic in other ones). -------------------------------------------------------------------------------- cfb98ad | DracoOmega | 2024-07-28 01:54:54 -0230 Re-enable Duel in Sprint There were some past concerns about it affecting the balance of certain sprints by letting the player duck out of situations that were never intended to allow a breather, but the current version of Duel mostly doesn't allow using it to stall. It seems like it should be fine to me. -------------------------------------------------------------------------------- 3ada536 | DracoOmega | 2024-07-28 01:54:54 -0230 Mildly reduce Soul Splinter's power This has been a well-liked and effective spell, but might be a little bit TOO effective. This lowers its health by ~30% and decreases its damage a little when extracted from enemies with more than 2 HD. -------------------------------------------------------------------------------- d8249b9 | DracoOmega | 2024-07-28 01:54:54 -0230 Prevent recasting Soul Splinter on a monster with a wisp already out Or at the very least, say that they're not susceptible and prevent it from working (being beam-targeted makes it a little hard to outright prevent it from being cast in the direction of an ineligable monster). This prevents the current wierdness of it making weakness wear off the target when you recast it (as well as strange message ordering). Additionally give better messages when the wisp doesn't form due to a lack of adjacent space (and likewise don't auto-target an enemy in such a position). -------------------------------------------------------------------------------- c485ba4 | DracoOmega | 2024-07-28 01:54:54 -0230 Refactor and simplify how monsters follow the player across stairs The code that handled determining which monsters would follow with the player when they took stairs or transporters had some opaque and complicated behavior which may have once served an important purpose, but enough of the game has changed around it that I think a simpler and more intuitive method could be better. Namely: friendly monsters could follow the player from up to 5 tiles away from the staircase, but only so long as they were connected in a contiguous chain, and *only* if there was not a single non-friendly monster adjacent to the player at the same time (at which point the max distance allies could be pulled from was 1). Note that 'non-friendly monster' in this case included PLANTS. So merely being near a plant would cause you to leave allies behind which you'd normally expect to follow you. Note also that this chain didn't care about line of sight, so you could pull along things around multiple corners, just so long as they were all touching each other. There was additional behavior of flagging monsters as MF_TAKING_STAIRS even when we knew they *couldn't* take stairs, just so they could count as links in that chain to allow access to stair-taking allies who might be behind them, and needing to juggle separate return values for whether that flag *really* meant they were taking the stairs or not. (Also, if one of them broke the chain during transit, the rest of your allies wouldn't arrive...) The original stated purpose of this code was to prevent zombies and summons from blocking perma-allies behind them from travelling with the player, but in the time since it was written, interlevel-recall was added and most perma-allies removed from the game. There just isn't a compelling need for this additional complexity anymore, in my opinion. The new logic is: stair-using allies can follow from 3 tiles away (so long as the player can see them) and adjacencies don't matter. MF_TAKING_STAIRS should now only be used for monsters who are *actually* taking the stairs, and determining followers can be done via a simple radius_iterator instead of a sort of breadth-first search. This does allow you to pull allies that are clearly not adjacent to the you through transporters, which are instant, but it's not like the previous logic ever pretended the monsters were walking multiple tiles into the gate under their own power in a single turn anyway. I think it should be fine. (I have also fixed a few other minor bugs at the same time, such as it being possible to seperate Dowan and Duvessa if one of them gets confused after you start taking the stairs but before you finish.) Finally, since we no longer need to keep non-stair-using allies alive during the entire transit process merely to determine which monsters WILL transit, I have moved the code to kill such summons before it, which can help with certain bookkeeping. -------------------------------------------------------------------------------- f8c9cd6 | DracoOmega | 2024-07-28 01:54:54 -0230 Fix being unable to fire Unleash Destruction through plants This was because Unleash Destruction lacks piercing before 4* and the zap type used for the tracer in this case wasn't actually defined (and the logic was backwards anyway...) This fixes #3941 -------------------------------------------------------------------------------- c1c50dc | DracoOmega | 2024-07-28 01:54:54 -0230 Don't claim that battlespheres and boulders are 'summoned allies' When you leave them behind by taking the stairs. Battlesphere already has its own messages and I doubt anyone would expect a tumbling boulder to follow them down the stairs at any rate. -------------------------------------------------------------------------------- f1d1f66 | DracoOmega | 2024-07-28 01:54:54 -0230 Expire friendly summons upon leaving a level instead of returning to it This makes bookkeeping for a number of things easier (since summoners can be notified that their summons expired while they're still on the same floor as each other instead of possibly never) and I think it more intuitively fits what the player would expect to happen anyway. I have slightly simplified the relevant code after moving it to remove cases I don't think matter anymore (ie: there are no more Yred perma-allies that *aren't* bound souls). One trivial behavioral change is that if you leave summons behind and then immediately return to the floor you just left, you won't see any clouds of translocational energy left behind where they were standing. I don't think this really matters. -------------------------------------------------------------------------------- a12b9cf | David Lawrence Ramsey | 2024-07-27 20:01:54 -0500 Remove soul-ripe check for Yred lit torch kills. Killing a ripe soul apparently bypasses the lit torch kill routine entirely when it becomes a bound soul. -------------------------------------------------------------------------------- 3445740 | David Lawrence Ramsey | 2024-07-27 19:47:19 -0500 Use the possessive for Yred souls/Beogh donors. Also ensure that unseen kills with the black torch unlit use "a" instead of "the", as is done for such kills with the black torch lit. -------------------------------------------------------------------------------- a15a517 | DracoOmega | 2024-07-27 14:26:07 -0230 Fix the Crucible of Flesh's branch description not displaying properly. -------------------------------------------------------------------------------- 83ca460 | DracoOmega | 2024-07-27 14:24:19 -0230 Fix Makhleb (and Veh/TSO...) heal-on-kill chance (Acrobat) Due to an issue with bracketing in 6009e8ebb8f3537a9b757f7d46b1154c4f9f549e the heal chance didn't smoothly scale between 1* and 6*, but rather remained at 30% at 1* until jumping suddenly to 80% at 6*. This should fix that. -------------------------------------------------------------------------------- d116fae | DracoOmega | 2024-07-27 14:06:51 -0230 Slightly clarify some code regarding kills by Dith shadow mimic Since the revamp, shadow mimic no longer tries to pretend it has the player's MID, so I'm pretty sure it's not necessary to seperate this logic (and the comment is outdated at any rate). -------------------------------------------------------------------------------- 1ab59e1 | DracoOmega | 2024-07-27 14:06:51 -0230 Make Dimensional Bullseye default targeter prefer the most distant enemy Instead of defaulting to the closest (which is often pointless). The hope is this is a very minor improvement to QoL when using this spell frequently. -------------------------------------------------------------------------------- 75a34a4 | DracoOmega | 2024-07-27 14:06:51 -0230 Have Beogh-pacified Orc drop their equipment upon leaving level (Acrobat) Automatically pacifying orcs who were wearing equipment the player wanted could be a sometimes-frustrating experience for Beogh worshippers. The heavy penance Beogh exacts for attacking neutral orcs was intended to discourage the deeply unflavorful act of murdering your converts to steal their stuff, but in practice it was still sometimes possible to body-block their exit from the level and find something else to kill them for you. I'm not sure exactly how often this was practical, or how commonly players actually did this, but at the same time I don't know that 'randomly lose access to a monster's items from time to time' is an especially interesting thing to try and preserve. So now pacified orcs will simply drop all their items when they leave the level. I've tried to flavor this in the most sensible way I could think of (since one assumes they're not completely giving up the sword to live in the woods and still have a use for those items themselves!). But you *are* the possible messiah after all... -------------------------------------------------------------------------------- 5b40a6c | DracoOmega | 2024-07-27 14:06:50 -0230 Make Arachne's band actually place Due to this oversight, Arachne's band had *never* placed after she was moved outside of Spider, and somehow this never got reported despite her description and dialogue repeatedly mentioned this presence. >.> The multiple buffs she recieved were done under the assumption that her band had been spawning properly all along, but let's see how she performs now that they have finally been reunited. -------------------------------------------------------------------------------- 1bfce13 | David Lawrence Ramsey | 2024-07-27 10:59:45 -0500 Adjust Crucible of Flesh branch naming. The short name shouldn't have an initial "The" (so the Place: entry doesn't display "a The Crucible"), and the full name shouldn't have its initial "The" capitalised (so artefacts named after it don't have a capitalised "The", as artefacts named after other branches don't). -------------------------------------------------------------------------------- 8575986 | David Lawrence Ramsey | 2024-07-27 09:46:08 -0500 Fix punctuation. -------------------------------------------------------------------------------- 26e7247 | David Lawrence Ramsey | 2024-07-27 09:24:02 -0500 Don't display Makhleb abilities w/o descriptions. Only brand 1 has an associated god ability description. Attempting to display brand 2 or 3 will erroneously add a "None." to the the end of Makhleb's god abilities list, so skip doing that. Closes #3937. -------------------------------------------------------------------------------- 59ecee1 | David Lawrence Ramsey | 2024-07-27 08:47:33 -0500 Remove redundant code. Dith's behaviour in describe_god_powers() is the same as the default. -------------------------------------------------------------------------------- 139e194 | regret-index | 2024-07-27 00:48:33 -0230 Some experimental projectile & cloud effect tile placeholders These new tiles are mostly meant to try and reduce Crawl's use of the exact same single cyan blast for effects themed after translocations, metal, lightning, and necromantic effects, alongside a few others. These new effects are for: * Metal Splinters (using roctavian's Sandblast) * Splinterspray and Volley of Thorns (also using that Sandblast) * Force Lance (using snw-0's spell icon for Force Lance) * Harpoon Shot (using roctavian's Stone Arrow and Iron Shot effects) * Ghostly Fireball (using unused Warp Weapon, Guardian Statue, and Kitsune tiles by Denzi, jpeg, and amcnicky) * Calcifying Dust (using snw-0's seething chaos clouds) (The Ghostly Fireball looks a little weird for a fireball but fine for a negative energy effect, and that spell already probably should be joined back to other negative energy themes if it's not going to have the healing effect- even will-o-the-wisps didn't end up becoming undead. This still leaves out Flashing Balestra and Momentum Strike in terms of keeping the blast mostly for lightning effects, but I don't know what to use for the former and the latter is part of a couple different effects that should be adjusted to actually draw the beam at all times instead of only when it misses.) -------------------------------------------------------------------------------- 51ccf8c | gammafunk | 2024-07-26 22:12:33 -0500 feat: Extend and clean up a clua debug function For `crawl.stack()`, allow passing a coroutine as an argument, so that we can examine its stack instead of the current clua one. This is necessary for debugging something like qw, which wraps its main execution in a coroutine. I use standard lua functions for checking when an argument is a lua "thread" (lua's terminology for coroutines) and converting a coroutine into a lua state. The approach used in this commit is modeled on what the `debug` library `stacktrace()` function does to examine coroutines, as seen here: https://github.com/crawl/crawl-lua/blob/master/src/ldblib.c#L99 I've tested this with qw, and it works as expected. This commit also removes the request in the call `lua_getinfo()` for the number of upvalues, since this isn't used. It also fixes up and completes the lua documentation of `crawl.stack()`. Resolves #2677. -------------------------------------------------------------------------------- 3a32abd | mgdelmonte | 2024-07-26 22:03:11 -0500 Add `crawl.stack` function to return the current Lua stack. Committer's Note: Squashed a subsequent bugfix commit that used snprintf since we use a fixed-length buffer. There were concerns expressed in the #crawl-dev channel about allowing introspection from clua, but after looking over this implementation I think it's fine. The `debug` lua library supplied by lua itself does far more than what this simple stack printing function is doing, and probably needs to remain unavailable from clua. The debug information gathered by `crawl.stack` is as minimal as possible, it can only ever look at clua state, and it only ever obtains basic strings about each function's activation record as supplied by the `lua_Debug` struct. -------------------------------------------------------------------------------- c489626 | David Lawrence Ramsey | 2024-07-26 11:19:32 -0500 Add another Donald line for new Makhleb. -------------------------------------------------------------------------------- 35137ae | DracoOmega | 2024-07-26 12:40:34 -0230 Add a default force_more for Makhleb offering Marks (ge0FF) -------------------------------------------------------------------------------- 7459a59 | DracoOmega | 2024-07-26 12:23:52 -0230 Fix indentation -------------------------------------------------------------------------------- 3eb0283 | DracoOmega | 2024-07-26 12:23:51 -0230 Don't let the player use Vessel of Slaughter while a vessel of slaughter While the instant damnation blast makes this potentially useful, and it doesn't even extend duration (thus delaying the Crucible), it's not the most intuitive thing and was never intentional. (Also properly mark the ability as disabled inside the Crucible, rather than merely have it abort on using.) -------------------------------------------------------------------------------- 1eedee0 | DracoOmega | 2024-07-26 12:23:51 -0230 Fix %s falsely claiming Vessel of Slaughter gives 'half damage' (ge0FF) A remnant from an earlier iteration. -------------------------------------------------------------------------------- b0f3c17 | Nikolai Lavsky | 2024-07-26 17:46:44 +0300 fix: don't brand self with a buggy note description Also, remove an unnecessary space and full stop for consistency with other `perma_mutate()` and `temp_mutate()` calls. -------------------------------------------------------------------------------- a2252a6 | David Lawrence Ramsey | 2024-07-26 08:36:09 -0500 Add more comma fixes (ge0ff). -------------------------------------------------------------------------------- 796cbfd | David Lawrence Ramsey | 2024-07-26 08:28:35 -0500 Fix wrapping. -------------------------------------------------------------------------------- 309b93d | David Lawrence Ramsey | 2024-07-26 08:28:35 -0500 Fix wording. -------------------------------------------------------------------------------- a62e944 | David Lawrence Ramsey | 2024-07-26 02:23:56 -0500 Fix typo. -------------------------------------------------------------------------------- 5e83875 | David Lawrence Ramsey | 2024-07-25 23:57:48 -0500 Fix incorrect comma in inexperienced mutation. -------------------------------------------------------------------------------- f333cd2 | David Lawrence Ramsey | 2024-07-25 23:57:04 -0500 Revert one more incorrectly added comma (DracoOmega). This partially reverts commit d8dc43ca6bb7975a14134bd797f78f8a4c8ebf60. -------------------------------------------------------------------------------- fff831d | DracoOmega | 2024-07-26 02:18:20 -0230 Fix a crash upon using Vessel of Slaughter (Lightli) This one is sort of amusing, since it didn't crash for me locally. But apparently if you try to call zappy to fill out a beam struct for a zap with no player defined hit/damage values, and are in wizmode, it will *silently* replace those empty values with the monster equivalent zap. But outside of wizmode, it will not (and then promptly assert due to not having any values). And of *course* I do my testing and development in wizmode... >.> -------------------------------------------------------------------------------- e40bc53 | David Lawrence Ramsey | 2024-07-25 23:46:29 -0500 Revert some incorrectly added commas (DracoOmega). This partially reverts commit d8dc43ca6bb7975a14134bd797f78f8a4c8ebf60. -------------------------------------------------------------------------------- cde6273 | DracoOmega | 2024-07-26 02:00:49 -0230 Fix missing Vessel of Slaughter ability (Lightli) -------------------------------------------------------------------------------- dde1e95 | David Lawrence Ramsey | 2024-07-25 23:22:30 -0500 Add another ghost line for new Makhleb. -------------------------------------------------------------------------------- faf5e19 | DracoOmega | 2024-07-26 01:33:07 -0230 Flag Brand Self abilities as hurting the player This may not be a sufficiently emphatic warning for how much they hurt, but it's at least better than claiming they cost nothing. (And is about the same as what Kiku's Brand Weapon With Pain ability says.) -------------------------------------------------------------------------------- 4064a0e | David Lawrence Ramsey | 2024-07-25 23:01:36 -0500 Update a few Donald lines for new Makhleb. -------------------------------------------------------------------------------- 7e27316 | David Lawrence Ramsey | 2024-07-25 22:48:55 -0500 Add another Makhleb executioner line. -------------------------------------------------------------------------------- e8675a7 | David Lawrence Ramsey | 2024-07-25 22:42:42 -0500 Rewrap Fugue status description. -------------------------------------------------------------------------------- 0802471 | David Lawrence Ramsey | 2024-07-25 22:42:04 -0500 Add comment regarding now-unused ability flag. So it can be more easily reused. -------------------------------------------------------------------------------- d8dc43c | David Lawrence Ramsey | 2024-07-25 22:39:05 -0500 Fix typos/spelling/wording/punctuation. -------------------------------------------------------------------------------- fd94369 | DracoOmega | 2024-07-25 23:22:04 -0230 Fix tag upgrade build -------------------------------------------------------------------------------- fed0f14 | DracoOmega | 2024-07-25 22:56:49 -0230 Update Makhleb powers description a little -------------------------------------------------------------------------------- 54559aa | DracoOmega | 2024-07-25 22:56:49 -0230 Save compat code for existing Makhleb worshippers Will set up the selection of Marks, as well as confer a random destruction flavour if they're already at 4* or above. -------------------------------------------------------------------------------- 718c1bd | DracoOmega | 2024-07-25 22:56:49 -0230 Nudge up Unleash Destruction's cost and damage -------------------------------------------------------------------------------- c225357 | DracoOmega | 2024-07-25 22:56:48 -0230 Add a note and milestone for accepting Marks from Makhleb -------------------------------------------------------------------------------- 30a9add | DracoOmega | 2024-07-25 22:56:48 -0230 Add icons for Makhleb Mark mutations/abilities (regret-index) -------------------------------------------------------------------------------- 2c43a06 | DracoOmega | 2024-07-25 22:56:48 -0230 Rename destruction flavour mutation enums -------------------------------------------------------------------------------- 07fbe39 | DracoOmega | 2024-07-25 22:56:48 -0230 Makhleb capstone: Mark of the Fanatic The most flashy and complex mark by far, this grants the player the Vessel of Slaughter ability - a high piety-cost ability that transforms them into a demonic avatar of Makhleb and unleashes a large blast of damnation around themselves as they do so. While in this form, the player has demonic resistances (including torment immunity), will invulnerability, takes 1/3rd less damage from all sources, recieves doubled healing from kills, and has a bonus to all outgoing damage proportional to how low health they were when they activated the ability (with the expected healing from damnation kills encouraging the player to 'push their luck' a little). But in exchange, once the transformation wears off, the player will be dragged into the Crucible of Flesh and made to suffer and slay in payment. The Crucible is a medium-size portal arena that continually spawns waves of hostile demons (scaled to the player's level and also how many runes they have collected beyond 3) and paralyzed mortal victims. The player must earn their exit by finding and slaughtering enough of these victims (killing demons also counts for half as much, but the faster the player can manage it by taking out 'helpless' targets, the less bad things will be for them.) Killing a mortal victim will immediately spawn another somewhere else on the map, while demons instead arrive at semi-regular intervals (up to a cap). Kills in the Crucible grant no xp or items, but still count for Makhleb's heal-on-kills passive, to help allow the player to sustain themselves (since resting will often be difficult here). There are also a small number of single-use teleport traps scattered around which the player can use for short-term escapes. In some ways, the gameplay of the Crucible is reminiscent of being banished, but should still be sufficient different as to be distinct - the map is pre-revealed and stable, it has walls instead of being endless, the monster set is more controlled, ?teleport works the same as usual, etc. A fundamental flavor aspect of Mahkleb's Marks is about accepting hellish bargains at the cost of oneself, and I felt like at least one of them should lean as hard as possible into classical 'deal with the devil' flavour: tremendous power at a cost one may come to regret later. And Vessel of Slaughter's power is undeniable, and its cost unique. I hope people find it fun! (I am sure various numerical knobs will need tweaking, since this is a complex double-edged effect and it should both feel worth it AND dangerous). (I also plan to replace Makhleb wrath with use of the Crucible so that we can fully eliminate all the unsatisfying direct-damage wrath effects that tend to either do nothing or kill the player with little counterplay). Massive credit to regret-index for designing the portal vault (with heavy subvaulting randomization), as well as the Crucible wall tiles and tiles for slaughter form. Couldn't have done this without her. -------------------------------------------------------------------------------- 182a3b3 | DracoOmega | 2024-07-25 22:56:48 -0230 Mahkleb capstone: Mark of Atrocity This Mark increases both the power and cost of the player's Unleash Destruction ability each time it is used consecutively (ie: without doing anything else inbetween). Upon using it a 4th time, it will also unleash 4 additional empowered bolts of destruction at random distant targets and reset this buff. Some of the additional cost is in flat HP, making this slightly better in relative terms on high HP species. -------------------------------------------------------------------------------- a31ef7c | DracoOmega | 2024-07-25 22:56:47 -0230 Mahkleb capstone: Mark of Execution Allows a fragment of an executioner to rest dormant inside oneself. Whenever you kill an XP-granting enemy in melee, there is a 1-in-8 chance for it to awaken and manifest their iconic whirl of blades around the player. For the duration, the player gains rampaging and a very good aux attack (whose base damage scales with XL) which also triggers upon the player dodging (like minotaur retaliatory headbutts). The duration of this status effect is very brief, but it does not expire for actions that the player spent attacking (allowing one to keep it up indefinitely as long as they keep swinging). -------------------------------------------------------------------------------- 21b3c34 | DracoOmega | 2024-07-25 22:56:26 -0230 Refactor melee aux attack handling slightly This is to allow performing an individual specific aux attack without needing to perform all the rest of the attack round at the same time. There should be no functional change caused by this commit. -------------------------------------------------------------------------------- 6638cf3 | DracoOmega | 2024-07-25 22:56:24 -0230 Makhleb capstone: Mark of the Celebrant Whenever a player with this mark is reduced to 50% or less HP, they unleash a flurry of blood arrows aimed randomly at nearby enemies (at least one per enemy, though if there are fewer than 8, it may shoot at the same enemy up to twice, with the remaining shots scattered randomly). Rather than a time-based cooldown, the passive recharges immediately when the player returns to full HP again - which in some situations might even happen due to Makhleb's healing in a protracted battle. To help this slightly, kills made with these blood arrows will always trigger Makhleb's healing passive. Given that it is effectively 'easier' to trigger and recharge with less max HP, and provides an immediately response to help stabilize after spike damage, it is expected this will be relatively more appealing to lower HP / EV-based characters than Marks which rely on paying flat HP instead. -------------------------------------------------------------------------------- 33c4ccf | DracoOmega | 2024-07-25 22:32:52 -0230 Remove a couple outdated comments (and some irrelevant code) Exploding spores haven't made monsters beneath themselves in a long time, and likely won't again (certainly not in this manner, at any rate.) -------------------------------------------------------------------------------- 06b347f | DracoOmega | 2024-07-25 22:32:52 -0230 Makhleb capstone: Mark of Haemoclasm This mark gives a passive 10% chance whenever the player kills a monster themselves for it to explode in a violent rain of gore, damaging enemies in a 3x3 area. The damage the explosion does is proportional to the max hp of the thing killed (and cannot harm the player or their allies). If an enemy dies to this explosion, they instead have a 100% chance to explode, allowing for occasional dramatic chain explosions (especially if the player has been using AoE damage sources up to this point, which likely gives it additional synergy with axes and conjurations). -------------------------------------------------------------------------------- ecea4f0 | DracoOmega | 2024-07-25 22:32:52 -0230 Different tiles for each flavor of Destruction (regret-index) -------------------------------------------------------------------------------- 9c19790 | DracoOmega | 2024-07-25 22:32:52 -0230 Mahkleb capstone: Mark of Annihilation Replaces Infernal Servant with Globe of Annihilation, which launches an iood-like projectile that explodes in a large blast of the player's signature destruction. It moves at speed 15 (so about half the speed of an iood), and the size of the explosion increases with the distance travelled: no explosion (and only 1/2 damage) at point-blank range, radius 1 at 1 tile travelled, 2 at 2-3 tiles travelled, and finally 3 at 4+ tiles travelled. Part of the logic of this replacing servant is that while this is a destruction-flavored ability, I didn't want it to completely eat up having a 'free' conjurations button of flexible elements with something much more expensive and less flexible. And it wouldn't play very well with servants anyway, so the loss might not be that meaningful. (I considered it simply being a 3rd ability, but at the moment am saving that for something a bit flashier; I could be convinced otherwise, with testing.) -------------------------------------------------------------------------------- 07ef810 | DracoOmega | 2024-07-25 22:32:51 -0230 Makhleb capstone: Mark of the Legion This mark replaces the player's Infernal Servant ability with Infernal Legion, which gives a status that summons many short-lived demons near the player over time instead. These demons are weaker (equivalent to using Infernal Servant with approximately 1/2 of your Invocations skill), and the ability itself is much more expensive. They will only be summoned while at least one enemy is nearby. This mark also allows you to fire Destruction through your allies without harming them (since they now have a much greater tendency to get in the way at all times), which has some additional synergy with other player builds as well. -------------------------------------------------------------------------------- d15373d | DracoOmega | 2024-07-25 22:32:51 -0230 Mahkleb capstone: Mark of Carnage This mark changes how the player's Infernal Servant operates. Instead of summoning a demon near the player, it instead summons that demon adjacent to a random visible enemy and causes a 5x5 burst of destruction where it appears. This burst uses only the 'characteristic' types of the player's Unleash Destruction ability (ie: fire/lava if you have Geh, acid/metal splinters if you have Dis) and cannot inflict damage on either the player or your other allies. -------------------------------------------------------------------------------- f17db96 | DracoOmega | 2024-07-25 22:32:51 -0230 Makhleb capstone: Mark of the Tyrant This mark improves the player's Infernal Servant ability, especially at very high invocations. Summoned servants have duration 6 instead of 4, and at 19+ invocations it starts to become possible to summon the other tier 1 demons (with hell sentinels needing ~26) at an additional piety cost. Whenever the player kills an enemy on their own, a random active servant will be buffed with one of: haste, might, brilliance (if they have spells), or regeneration. -------------------------------------------------------------------------------- 2583199 | DracoOmega | 2024-07-25 22:32:51 -0230 Add code framework for gaining Infernal Marks This adds the basic backend for gaining Makhleb's new capstone gift - one of a selection of Makhleb-specific mutations that grant powerful passive effects and/or change how your Makhleb invocations work. At 6*, the player will be offered a choice of 3 different Marks (out of however many exist - currently planned at 9). Selecting one of these will permanently brand the player with it (injuring them greatly in the process...) and give them its effect for as long as they worship Makhleb. The mark will persist as a mutation, even if they abandon the god, but will not actually function unless they start worshipping them again (this prevents any possibility of abandoning to reroll your mutation possibilities, and it's also good flavour that you have to live with the consequences of your actions here.) Forms which normally suppress mutations will not suppress these. (They also cause silver vulnerability - despite otherwise being perma-mutations, they are clearly demonic in origin and ought to count.) None of the marks included in this commit *do* anything yet; that will come in future commits. -------------------------------------------------------------------------------- 2cd86a2 | DracoOmega | 2024-07-25 22:32:51 -0230 Merge Lesser/Greater Servant abilities into Infernal Servant As part of the Mahkleb revamp, both demon summoning abilities are being merged together. Infernal Servant is still obtained at 3*, is priced between the two previous abilities, and the quality of demon summoned is now strongly influenced by invocations (and sorted roughly in order of strength, so that it requires more invocations to get executioners and balrugs than other 2s, for instance.) The variety of demons it can summon is expanded to include red devils, ice devils, rust devils, soul eaters, sun demons, and sixfirhy, while losing neqoxecs (which were very weak as allies and unpleasant as enemies). Hostile demons are no longer produced by failing to use this ability, but instead there is a flat 1-in-6 chance that any use of it will produce a durably summoned hostile demon *alongside* your friendly one - along with a small increase in quality of the friendly demon summoned at those times. The hope is this preserves some of the 'deal with a devil' flavor of the ability while making it less correct to 'use at the start of battle and then ?tele if you get a bad roll'. -------------------------------------------------------------------------------- ac1edcb | DracoOmega | 2024-07-25 22:32:51 -0230 Greatly simplify demon summoning from Obsidian Axe With Mahkleb servant summoning changed, the last remaining code using cast_summon_demon() and _summon_demon_wrapper was the Obsidian Axe. This code still retained support for summoning hostile and temporarily-friendly demons (the latter not used since player Summon Greater Demon's removal by f16e6d0322db59044e3995c94cea1b2b62393fd3 ) and imps, almost all of which was unused. The Obsidian Axe doesn't need most of that, so I folded a simpler version directly into the artefact function itself. It should work largely the same as before this commit, with only a very minorly different chance of summoning a 3 vs. 4, and always at duration 6 instead of something like a ~90% of being duration 6. -------------------------------------------------------------------------------- 02c4a77 | DracoOmega | 2024-07-25 22:32:50 -0230 Merge Minor/Major Destruction into Unleash Destruction Mahkleb was the last god remaining who had a minor/major split among abilities doing largely the same thing (and where the lesser of those eventually becomes almost entirely obsolete as the game goes on.) It makes some sense to merge them to create more room for other exciting toys at higher piety levels. But even though Major Destruction had the lowest piety cost among all abilities in the game that cost piety, Minor Destruction literally cost 0 and there can be a powerful psychological difference between 'free' and 'only almost free'. Some players liked having an ability they could use without long-term cost! But the same time, having something 'freely spammable for limited effect' has some design awkwardnesses, so let's try leaning into the HP cost even more (which is flavorful for Makhleb, and can counterbalance the ability being free in the short-term while still having no *strategic* cost). At the same time, let's introduce a little more chaotic diversity from run to run by having 4 different 'flavours' of Unleash Destruction (themed after each of the Hells) and granting the player a random one of these when they first hit 4* with Makhleb (ie: the same threshold that previously granted Major Destruction.) Unleash Destruction now costs more HP (which scales with the player's max HP) and no longer relies on existing unrelated zap types (which caused periodic issues when one of those was changed, and also made it difficult to even tell what Destruction's average damage was). In its base form, it selects between Fire, Cold, Electricity, and Negative Energy (all dealing the same damage) and is non-piercing. All 4 of the upgrade mutations give it piercing, replace one of these elements with a different thematically- appropriate one, and add an additional property to a base element. In full: Gehenna Destruction: -Fire (which inflicts rF-), Lava, Lightning, Negative Energy Cocytus Destruction: -Cold (which inflicts Frozen), Ice, Lightning, Negative Energy Tartarus Destruction: -Fire, Cold, Negative Energy (with bonus damage!), Devastation Dis Destruction: -Fire, Cold, Lightning, Acid, Metal Splinters (It gets a 5th, since the Negative Energy that gets swapped out is the most frequently useless of the base types and Acid is arguably best) Hopefully this revamped Destruction feels suitably relevant both early and later, a least a little distinct from other blasty invocations such as Qazlal's by being piety-free but self-destructive, and gives a touch more variety between runs. (The player character now also produces blood around themselves whenever they use this or any other Makhleb invocation, as another touch of flavour.) -------------------------------------------------------------------------------- 0afb396 | Nikolai Lavsky | 2024-07-26 00:15:17 +0300 fix: treat artefacts with Reflection as unusual items The `unusual_monster_items` option is case-sensitive, so the default "reflect" value matched only non-artefacts. -------------------------------------------------------------------------------- 0624b5b | advil | 2024-07-25 14:48:33 -0400 fix: correctly call job-gen.py in Makefile The #! line in this script is the best option, but it's still not going to solve every configuration. In build scripts, it's best to rely on the Makefile's configuration, not the #! value. -------------------------------------------------------------------------------- 342958b | David Lawrence Ramsey | 2024-07-25 13:24:26 -0500 Decouple being a draconian and lacking hair. All draconians are now explicitly flagged as lacking hair. -------------------------------------------------------------------------------- 2eaa09f | David Lawrence Ramsey | 2024-07-25 12:59:30 -0500 Use species::skin_name() for flesh peoperly. Check for pluralisation as the species::skin_name() comments suggest. -------------------------------------------------------------------------------- 3489c03 | Implojin | 2024-07-25 12:31:48 -0500 fix: Draw ghost backgrounds in webtiles This was left out of 767fb09e7d. Thanks again to index for her tiles work here, this seems like a nice improvement! We're missing an unusual background tile for ghosts, but there should be no way for ghosts to have unusual items with the current code anyway: I've defaulted unusual ghosts to have the regular unusual highlight just to let this codepath work properly in the future. -------------------------------------------------------------------------------- 7865272 | David Lawrence Ramsey | 2024-07-25 12:18:39 -0500 Describe flesh as "skin" by default. To match species::skin_name() when possible. -------------------------------------------------------------------------------- c59282b | David Lawrence Ramsey | 2024-07-25 12:14:42 -0500 Actually describe gargoyles' skin as stone. At the species level. This matches statue form as well. -------------------------------------------------------------------------------- db40d75 | David Lawrence Ramsey | 2024-07-25 12:00:47 -0500 Properly describe gargoyle "flesh" as stone. -------------------------------------------------------------------------------- 47babdb | David Lawrence Ramsey | 2024-07-25 11:58:33 -0500 Fix comment typo. -------------------------------------------------------------------------------- a6c389b | David Lawrence Ramsey | 2024-07-25 11:43:05 -0500 Fix flesh name handling. species::skin_name() is not guaranteed to be either singular or plural, so take a cue from expiring petrification and use "flesh". Use "stone" if we're actually petrified. -------------------------------------------------------------------------------- f0725ce | David Lawrence Ramsey | 2024-07-25 11:14:48 -0500 Properly account for form wrt bandages. Currently only mummies have bandages, and can't be transformed into something without them, but check just in case. -------------------------------------------------------------------------------- 93245fa | David Lawrence Ramsey | 2024-07-25 11:07:55 -0500 Add flesh to random body parts. -------------------------------------------------------------------------------- cb7f57b | David Lawrence Ramsey | 2024-07-25 10:10:34 -0500 Properly separate singular/plural body part msgs. -------------------------------------------------------------------------------- f64ed19 | David Lawrence Ramsey | 2024-07-25 09:59:49 -0500 Add another Xom tail message. -------------------------------------------------------------------------------- b0289f2 | David Lawrence Ramsey | 2024-07-25 09:57:41 -0500 Adjust a Xom tail message. -------------------------------------------------------------------------------- b315743 | David Lawrence Ramsey | 2024-07-25 09:54:47 -0500 Add Xom random body part pseudo-miscasts. -------------------------------------------------------------------------------- a3dc3e8 | David Lawrence Ramsey | 2024-07-25 09:45:56 -0500 Split out body part msgs into their own function. Also separate them into singular and plural options. -------------------------------------------------------------------------------- 2c1b039 | David Lawrence Ramsey | 2024-07-25 07:38:54 -0500 Shorten -Gavotte status description. -------------------------------------------------------------------------------- 5617537 | David Lawrence Ramsey | 2024-07-25 00:47:53 -0500 Remove obsolete Stiff status description. -------------------------------------------------------------------------------- f366dc3 | David Lawrence Ramsey | 2024-07-25 00:47:53 -0500 Add missing -Gavotte status description. -------------------------------------------------------------------------------- 767fb09 | regret-index | 2024-07-25 02:36:53 -0230 More adjustments to ghost visibility While adjusting the opacity of ghosts is somewhat reasonable, it also heavily diminishes them actually being ghosts, due to their tile otherwise relying heavily on player paper doll tiles, so I'd like to try a bit of a different approach that also addresses one of the core awkwardnesses of ghosts varying heavily versus players over time. Regardless of one's threat display settings, all ghosts now have an wavering gradient overlay aura matching their threat level. This should also help with ghost visibility, while additionally emphasizing them a bit more dramatically than just being a player doll tile but harder to see. (This has the weird side-effect of such an aura wavering if one levels up mid-fight, but clearly they're just being intimidated by the player's power.) -------------------------------------------------------------------------------- a15e480 | David Lawrence Ramsey | 2024-07-24 21:24:51 -0500 Give felids tails (only cosmetic). Such tails don't do tail-slapping, and can't grow stingers either. Since the felid tiles all show tails, and there's nothing indicating they're e.g. Manx types. -------------------------------------------------------------------------------- c0dcec2 | David Lawrence Ramsey | 2024-07-24 21:12:46 -0500 Use booleans instead of numbers in has_tail(). -------------------------------------------------------------------------------- 3df9983 | David Lawrence Ramsey | 2024-07-24 21:02:09 -0500 Account for player tails in Xom/body part msgs. -------------------------------------------------------------------------------- 353f8a7 | David Lawrence Ramsey | 2024-07-24 20:45:01 -0500 Remember that players generally have heads. Add "head" to the list of random body parts, since we assume in other messages elsewhere that all players have heads. -------------------------------------------------------------------------------- 55c3cb5 | David Lawrence Ramsey | 2024-07-24 20:27:11 -0500 Add another acrobatic move to Xom dances. -------------------------------------------------------------------------------- 3ba2811 | David Lawrence Ramsey | 2024-07-24 20:17:54 -0500 Add @random_body_part_external@. This is the same as @random_body_part@, except that it leaves out blood and bones. (If a species with external blood and/or bones is added, it will obviously need to be adjusted for them.) Make Xom use it in clone drop messages, so that mirrors don't get smashed over parts of the player that should not be on the outside. -------------------------------------------------------------------------------- 6575a43 | David Lawrence Ramsey | 2024-07-24 20:07:42 -0500 Account for missing a hand in random body parts. -------------------------------------------------------------------------------- 8bde0a3 | DevJac | 2024-07-24 19:44:33 -0500 Distinguish explore mode deaths from Felid deaths By adding a note for the former. [Committer's note: Adjusted commit message.] -------------------------------------------------------------------------------- 5e739b3 | David Lawrence Ramsey | 2024-07-24 18:35:15 -0500 Add another mythical creature to artefacts. -------------------------------------------------------------------------------- 081d225 | Aliscans | 2024-07-24 18:22:55 -0500 Improve wrapping for monster_item_view_coordinates. The "monsters in view" display wraps long lines. It ignored monster_item_view_coordinates when calculating this (except with local tiles), so missed the ends of some lines. It no longer does. -------------------------------------------------------------------------------- d8bda1b | Implojin | 2024-07-24 15:46:09 -0500 Slightly improve ghost visibility Player ghosts were kind of difficult to see in tiles and webtiles, especially Op ghosts, which tended to easily blend with their vault backgrounds. This commit slightly increases the alpha of ghost tiles: r-i had mentioned possibly adding an aura to these to improve visibility as well. More to come in a future commit? -------------------------------------------------------------------------------- 6bbb805 | David Lawrence Ramsey | 2024-07-24 10:39:50 -0500 Keep the petrified from bleeding (Implojin). If they're petrified, they don't have blood. -------------------------------------------------------------------------------- ab7c848 | David Lawrence Ramsey | 2024-07-24 10:20:55 -0500 Fix merfolk fishtail checks wrt feet (Implojin). The fishtail should override mutations, and is independent of form, so it needs to go before the mutation check and the usual form check. -------------------------------------------------------------------------------- 4a3ce62 | David Lawrence Ramsey | 2024-07-24 10:16:28 -0500 Disallow gaining blood w/form changes (ge0ff). So gargoyles/djinn will still be bloodless regardless. This means that no form uses FC_ENABLE for has_blood anymore. (Unless we eventually add a hypothetical blood elemental or the like, which would need it by definition.) -------------------------------------------------------------------------------- 3eefd6c | David Lawrence Ramsey | 2024-07-24 09:50:37 -0500 Fix body part checks for forms (#3935). Don't erroneously fall through and use the species body part if the current form doesn't have it. Also, actually use form_has_feet() instead of only checking for the merfolk fishtail. Closes #3935. -------------------------------------------------------------------------------- 1d91366 | David Lawrence Ramsey | 2024-07-24 07:47:53 -0500 Fix spelling (sulfur -> sulphur) (Graveyardigan). -------------------------------------------------------------------------------- 0c0b035 | David Lawrence Ramsey | 2024-07-23 18:08:41 -0500 Fix spelling. -------------------------------------------------------------------------------- d06570b | regret-index | 2024-07-23 20:26:15 -0230 New Alchemist starting-screen icon (Darby) Venom Mage's spider was better than the encircled half-box Transmuters used by being more material, but something a little more specifically alchemical like this nice potion is fairly better for it. Now if only it didn't take until L8 Conjurations / Alchemy to get a potion-themed spell. (There's always next version....) -------------------------------------------------------------------------------- 6311a48 | regret-index | 2024-07-23 19:04:02 -0230 New Xom action: wave of despair Xom already copies a variety of potions as one of the most common effects granted to the player, so why not also some of the more tactically interesting scrolls? In particular, one of the tension spells is using a much weaker version of a consumable, so it's a good idea to make it a little more recognizably distinct. This new rare beneficial action is meant to be dramatic in a different sense than prior debuffs or destruction by combining a few effects together at once. After Xom tells a spooky story, inanimate skeletons pop out, and the ensuing wave of horror halves will, then drains, then fears everything else in sight. The Will/2 state lasts fairly longer than the fear, making it so stabbers can use other hexes if possible once they start chasing the player again, and also applies to the player, so there's still some risk around the right monsters as Xom should always readily wield. (To help make this a bit more visible, I added a quick Will/2 status icon derived from the current scroll of vulnerability icon.) Consequentially, Cause Fear has been replaced in the Xom tension spells list with Dazzling Flash (which is weak, but not much weaker than Small Mammals already is) and Summon Blazeheart Golem (which has a cute "suddenly handed a bomb" mechanical capacity). -------------------------------------------------------------------------------- 7af4bb0 | regret-index | 2024-07-23 17:33:16 -0230 New Xom action: friendly + hostile clone drop Another hostile Xom effect meant to naturally inherently scale and vary across games in a relatively straightforward fashion while providing further variety, this rare Xom effect differs from other hostile summons by giving you a free ally! Unfortunately, it's outnumbered- this effect summons brief two hostile illusions and one friendly illusion, with the single real player balancing these teams. While ghost-illusion code continues to lag behind on ranged characters and early spellcasters for more important uses of it- Nemelex's Illusion card, player ghost vaults, and Mara each- Xom cloning the player imperfectly in this notably rare action should feel reasonably fine with Xom's chaotic malevolence anyway. (Having both friendly and hostile copies should make it feel reasonably different than any of those circumstances, also). Part of its rarity includes 1: being only done with other monsters around, so there's any incentive to fight with the free ally if possible, and 2: actually having a maximum tension cap, so that the illusions don't get overshadowed by other ways one might be dying anyway. -------------------------------------------------------------------------------- b48ef88 | David Lawrence Ramsey | 2024-07-23 14:52:07 -0500 Fix typo. -------------------------------------------------------------------------------- 1cace68 | DracoOmega | 2024-07-23 17:21:15 -0230 Give the orb dais a proper feature type name (ge0FF) -------------------------------------------------------------------------------- b95f673 | David Lawrence Ramsey | 2024-07-23 14:47:54 -0500 Unbrace -------------------------------------------------------------------------------- a363cd5 | DracoOmega | 2024-07-23 17:12:41 -0230 Don't ever claim the orb dais is '(summoned)' (ge0FF) Using a terrain change effect on top of the dais wouldn't change it, but would still place a map_terrain_change_marker there, resulting in Crawl confusingly claiming that the pre-existing feature had been 'summoned'. Now just don't place a marker there at all. -------------------------------------------------------------------------------- 5f6dd93 | DracoOmega | 2024-07-23 17:12:41 -0230 Remove an unnecessary use of item_def::is_critical() I believe this was once to prevent Xom from making you drop critical items from your inventory, but all that would do now is print a harmless flavour message about the item (and since runes and the orb were goldified, I don't think it even does this anymore!) -------------------------------------------------------------------------------- 83d8b1f | DracoOmega | 2024-07-23 17:12:41 -0230 Mark gems as critical items (ge0FF) A little light future-proofing against them potentially being destroyed by terrain changes. -------------------------------------------------------------------------------- 44e0ba9 | Implojin | 2024-07-23 14:28:17 -0500 fix: don't hide the orb in console The orb dais feature was preventing the orb from being drawn in console. Easy enough to fix! -------------------------------------------------------------------------------- f20c09c | DracoOmega | 2024-07-23 15:16:09 -0230 Remove a now-unused include -------------------------------------------------------------------------------- dfbe08a | DracoOmega | 2024-07-23 15:04:19 -0230 Place the Orb of Zot on an untransformable dais When b22d4219adc6 was done to address Hellfire Mortar cheese, I didn't fully consider all the different effects that might cause the orb to be displaced without the player anticipating this. While it's arguable that Xom starting the orb run without warning is just Xom being Xom, it also seemed likely that casting Summon Forest near the orb could randomly do so, as well as Imprisoning a monster adjacent to the orb, and likely other things. Starting the orb run unexpectedly is a nasty surprise, so instead of doing that whenever the orb is displaced by (possibly unintentional) terrain changes, let's just veto all terrain changes beneath the orb's original location entirely (by giving it a special pedestal feature that is immune to such things). -------------------------------------------------------------------------------- 16c7f17 | DracoOmega | 2024-07-23 14:55:57 -0230 Don't be content with shifting items into closed doors When trying to relocate an item because the terrain beneath it changed, any 'traversable' square that doesn't destroy automatically destroy items (ie: lava) was considered an adequate place to put them. But closed doors are considered traversable only because they *can* be opened, not because they aren't solid right now. -------------------------------------------------------------------------------- a91aa3b | DracoOmega | 2024-07-23 14:54:09 -0230 Don't let Xom door rings destroy items It was only intended that the door push items out of the way, rather than destroy them altogether. This fixes #3932 -------------------------------------------------------------------------------- 4f39dfd | David Lawrence Ramsey | 2024-07-23 08:19:09 -0500 Add another noisy hell message. -------------------------------------------------------------------------------- d1fa21d | Neil Moore | 2024-07-22 21:45:15 -0400 Fix extra percents. -------------------------------------------------------------------------------- 81e4515 | Neil Moore | 2024-07-22 21:41:30 -0400 Re-arrange artefact weapon animal names. -------------------------------------------------------------------------------- 922ebfb | Neil Moore | 2024-07-22 21:29:11 -0400 Add more insects and other crustaceans as artefact names. [skip ci] -------------------------------------------------------------------------------- 262b726 | Neil Moore | 2024-07-22 19:32:53 -0400 Add amphibians to randart names. The section supposedly half-devoted to them didn't have a single one. [skip ci] -------------------------------------------------------------------------------- 0219e33 | Neil Moore | 2024-07-22 19:05:25 -0400 Add some arachnids and reptiles as artefact names. [skip ci] -------------------------------------------------------------------------------- ebc898e | David Lawrence Ramsey | 2024-07-22 17:55:20 -0500 Add another bird name to artefacts. -------------------------------------------------------------------------------- 3dcc868 | Neil Moore | 2024-07-22 18:51:07 -0400 Add more ratites. Especially emus, who famously managed to defeat a military expedition. [skip ci] -------------------------------------------------------------------------------- c53ba14 | Neil Moore | 2024-07-22 18:43:55 -0400 Add more birds to artefact names. A few of which, but not most, are native to Australia. Also, move "Fulmar" to be in correct alphabetical order. [skip ci] -------------------------------------------------------------------------------- f39ece7 | regret-index | 2024-07-21 19:12:25 -0230 * All three of Xom's divinations are now crunched together into one effect. Each individual component frozen in time doesn't really provide much for useful strategizing, and this also helps those with less spoilers tell where vaults are by adding creatures to the magic mapping. (Also, detect creatures using only creature genera is kinda funny anyway.) In exchange, these divinations are slightly less likely to occur, swapping positions with the already-enticingly-variable and scaling tension spells. * Xom's sticky ignition, divine lightning, force lance fleet, tension spells, and friendly / hostile monster summons all now softly scale with runes 5 through 15 so Xom is more noticeable throughout extended. * Xom's ally and hostile summoning now also gets rare bunyips and always-chaos-branded reapers, since the top end needs a bit more variety overall and the latter combines the undead + demon options reasonably nicely. Hostile summoning in general has also been tweaked again: more distance if you're in wrath with less monsters (as the new upgrades have been a bit aggressive sometimes), and less distance without wrath (as it's a little too easy to run away otherwise). * Xom's decor list now includes one-use teleport traps, since it coincides with other translocation Xom effects and it provides a bit of interesting upside to have a few to fall back upon, without ever interrupting full level connectivity in a troublesome fashion. * Xom's fake shatter now drops some sparse large rocks for decorative purposes and other Xom vault correspondence, as well as a consolation prize for Oni and Trolls. * A variety of Xom's rarer good actions are now slightly more likely to happen, period, to compensate for the list of new actions making it less likely Xom will give strategic benefits like items or good mutations. Ideally nearly all of _xom_chooses_good_action and severity alike would be completely revised for a regular random weighting function, while strategic effects would be collected up and timed entirely seperately of Xom's random tension-tracking actions (incidentally also dealing with xomscumming at the same time), but for now, Xom acting slightly more often is fine since over a third of Xom actions have been freshened up and made more variable at this point. -------------------------------------------------------------------------------- 1273c59 | dependabot[bot] | 2024-07-21 20:30:08 +0200 Bump zipp in /crawl-ref/source/webserver/requirements Bumps [zipp](https://github.com/jaraco/zipp) from 3.18.1 to 3.19.1. - [Release notes](https://github.com/jaraco/zipp/releases) - [Changelog](https://github.com/jaraco/zipp/blob/main/NEWS.rst) - [Commits](https://github.com/jaraco/zipp/compare/v3.18.1...v3.19.1) --- updated-dependencies: - dependency-name: zipp dependency-type: direct:development ... Signed-off-by: dependabot[bot] -------------------------------------------------------------------------------- abeaff3 | Medrano83 | 2024-07-21 18:48:40 +0200 Update Android SDK - API level 34 Starting August 31, new apps and app updates must target Android 14 (API level 34) to be submitted to Google Play. https://support.google.com/googleplay/android-developer/answer/11926878 -------------------------------------------------------------------------------- bf73d41 | Implojin | 2024-07-21 09:42:24 -0500 Fix a teleport closet in water_maze_lemuel Looks like this was a minor oversight in d77652238, we were trying to place a hatch and some teleport scrolls here without a corresponding glyph. -------------------------------------------------------------------------------- 1906822 | David Lawrence Ramsey | 2024-07-20 13:42:52 -0500 Add another gizmo entry. -------------------------------------------------------------------------------- 91f3fef | David Lawrence Ramsey | 2024-07-20 13:41:32 -0500 Fix spelling. -------------------------------------------------------------------------------- ca01da3 | patrick | 2024-07-20 14:17:32 -0400 Increase Coglin gizmo-related vocabulary After consulting with a consortium of Coglin engineers, we have learned a great deal about their technology, and accordingly we have been able to expand the technical language used in Crawl to describe their magnificent gizmos. In other words, I added a few entries to gizmo.txt, including both real-world technical jargon and technobabble memes. Just a few. Some of the names thus generated may seem redundnant -- it's possible to get, say, an "autoautomatic autolator" -- but remember that Coglin technology is very advanced, and their terminology must be very precise to include all the nuances of meaning, which sometimes appears as redundancy to lesser minds. Thank you for understanding. -------------------------------------------------------------------------------- 2a440f7 | regret-index | 2024-07-19 21:08:43 -0230 Ever-continuous widespread vault review Of note: * A few undying armouries have been snuck into a few Crypt ends, as they're 1: undead, 2: a bridge between the various constructs old Crypt ends used before Crypt had more undead and the undead in Crypt, and 3: work well with vampires as several Crypt end sets try to make work despite the vampire presence in Depths. They're only in a few of these vaults, so they'll still mostly stay highlights of V:$ and Cerebov's level, regardless. * _qazlal_generations has become another rare D:$ depths entrance vault. * sewer_co_15_rooms now actually provides a potion of enlightenment to enter its center room, and grunt_spider_rune_island no longer can roll a chance to need flight or digging to acquire its rune. * volcano_pools has been adjusted to make it so no starting positions can see the main center eruption point, so people quickly diving into a volcano and then resting up won't be engulfed in flames. * Troves that focused on jewellery now also provide a pair of random talismans with increased randart weighting the lower tier they are, to help out shapeshifters without excessively increasing the value of troves for most other characters otherwise. This matches up with talismans being sold in jewellery shops. * One evocations trove designed before evokables became singular items also now also provides talismans and higher overall wand quality, and a trove that focused on providing four weapons each of four different brand now uses Lua to place much higher quality equipment than before (but still has no guarantees it matches up with one's own weapon skills). For the record, we should avoid using "any weapon" in troves without either heavy Lua or as a weighing down of "acquire weapon", because "any weapon" loves constantly going for D:1 kobold and goblin gear. * Two nearly-or-literally identical Ziggurat entries were crunched together, and a quick new one was added for variety's sake. -------------------------------------------------------------------------------- 20967ce | Nikolai Lavsky | 2024-07-19 16:56:54 +0300 fix: time out a few more statuses when returning to a level Continuing from 116ff8c4a, make a few more monster enchantments time out while the player is off-level. Affects most noticeably the Snake Pit and Elven Halls, where the player could return to a previously visited floor and find that buffs of nearby monsters didn't expire after hundreds of turns. -------------------------------------------------------------------------------- 3cb1da7 | David Lawrence Ramsey | 2024-07-18 22:18:35 -0500 Add missing -GClaw status description. -------------------------------------------------------------------------------- b744d03 | David Lawrence Ramsey | 2024-07-18 15:51:31 -0500 Add another Xom flora message. -------------------------------------------------------------------------------- 41f0f79 | David Lawrence Ramsey | 2024-07-18 13:15:48 -0500 Document holy/unholy brand wielding changes. -------------------------------------------------------------------------------- 3d9f9bc | David Lawrence Ramsey | 2024-07-18 10:11:50 -0500 Add another substance name to artefacts. -------------------------------------------------------------------------------- 74a7a61 | David Lawrence Ramsey | 2024-07-18 10:06:54 -0500 Drop "THE_" from the Enchantress' enums. Since the other monsters with "the" names don't include it. -------------------------------------------------------------------------------- 2231033 | David Lawrence Ramsey | 2024-07-18 09:48:14 -0500 Make unique_name() handle the Enchantress. -------------------------------------------------------------------------------- c619bd7 | David Lawrence Ramsey | 2024-07-18 09:48:14 -0500 Fix indentation. -------------------------------------------------------------------------------- ea9f75d | David Lawrence Ramsey | 2024-07-18 01:40:29 -0500 Add another colour to the database. -------------------------------------------------------------------------------- bcf935f | patrick | 2024-07-17 23:42:44 -0400 Add a quote for Magic Dart -------------------------------------------------------------------------------- 071218b | regret-index | 2024-07-17 23:24:07 -0230 Make tension track more statuses from both players and monsters For the most part, the tension formula hasn't been adjusted since e11a346 fourteen(!) years ago. It's an extremely imprecise formula in a multitude of ways- it doesn't know the actual attack or spell ranges of any given monsters, anything about monster support capacities, the path and presence of spell components like clouds or ramparts or prisms, the players' and the monsters' resistances, and so on and so forth. It somewhat works as a very simple way to track the density of hostile monsters present versus one's own health, but would be quite burdensome to make be actually reasonably good at guessing much more than that. As a result, we've tried to use it for less and less actually meaningful roles over time. Currently it's most prominent for reasonably informing Xom of when to act, whether or not to forbid Beogh's apostle challenges, and if a vault warden should close a given door or not, all of which are reasonably relevant enough that they should reasonably work regardless of how little we'd want to use tension elsewhere. While I'm not pushing for making tension actually become more unweighty and lengthy, it's currently already supporting a number of enchantments on players and monsters, and an update for all of the particularly dramatic new effects added over the past 14 years should be reasonable to quickly work into what already exists. (For reference's sake, slow counts for x1.5 tension, being netted or webbed is x2 tension, and of course none of this matters if there's nothing hostile in sight.) * Players with corrosion get a scaling multiplier for each point of corrosion they have on them. * Players at 10% or lower mp adds a x1.125 multiplier. * Player mesmerization and fear adds a x1.2 multiplier. * Players that are fragile, have the -Potion status, or the -Scroll status get a x1.33 multiplier. * Players that are marked, attractive, unable to cast due to Sap Magic, in bat form, or in wisp form get a x1.5 multiplier. * Players in fungus, pig, or tree form get a x1.66 multiplier. * Monsters that have brilliance or are armed by an undying armoury get a x1.25 multiplier. (The only particularly controversial point here is most likely MP, but most gods use MP for invocations even on non-spellcasters, tension is fuzzy anyway, and most reliable mp drainers should have some reasonable threat to them also, so it's probably fine. There's a long list of absent bits here- sticky flame and poison are the most conspicuously absen-, but this probably shouldn't go for much else not added here, since most of the above are player-option-limiting in some obvious dramatic fashion or another.) Since most of what relies on tension is both invisible and randomized for most players, this shouldn't be too concerningly gameable or complex. Zapping one's self with polymorph, drinking attraction, and drinking lignification are all now technically options for grabbing Xom's attention or delaying an apostle challenge, but this is quite unlikely to make things net better than if one did not in fact do any of these things. The player also could have just hurt themselves instead to get the same rough circumstances change. What this does mean, however, is that Xom should feel fairly more proactive in a wider number of scenarios and Beogh will send challengers in less awful situations, which is plenty enough gain for both gods to probably be worth a page's worth of easily-adjustable and easily-removable checks. (Others may quibble about these exact values. Future commits may change any of these multipliers' strength.) -------------------------------------------------------------------------------- a06d8ee | regret-index | 2024-07-17 20:36:29 -0230 Adjust each Serpent of Hell The Serpent of Hell hasn't changed much since 06872b5, which lets even an extended-only unique of four manifestations provide reasonable statistical data for assessment It also means the context of the Hells has changed around them a fair bit around them, and while we don't need to make every Hell be competively close to one another, it does highlight a few strange bits. In particular, the Tartarus Serpent uses corrosion despite the fact Dis directly uses such multiple times, and the Gehenna Serpent lagging behind the others is more pressing now that Gehenna fell behind the other hells with the 0.28 hells overhaul. This commit adjusts most of the Serpents' potential breaths: * Tar: Bolt of Draining 🡲 Ghostly Fireball, Corrosive Bolt 🡲 Poison Arrow This frees up Corrosive Bolt for Dis, while leaning a little on the poison attacks of putrid mouths plus the extra miasma in the branch since the 0.28 overhaul. In exchange, since Bolt of Draining directly out of the Serpent's mouth hasn't killed anybody in 15 versions, that's swapped out with Ghostly Fireball to let it at least skip EV. * Dis: Metal Splinters 🡲 Corrosive Bolt, Crystal Spear 🡲 Iron Shot The hell that automatically corrodes those who enter should be the hell with the Serpent that breathes corrosion. Caustic shrikes already made it valuable to keep rCorr on anyway, so it shouldn't be too worriesome to upgrade. Crystal Spear has been swapped out for Iron Shot to deal flatly less damage, with the range difference not matter too much due to each serpent being speed 14. * Geh: Flaming Cloud 🡲 Bolt of Magma Flaming clouds don't scale at all with the rest of the game, so the breath attack barely matters in the Hell one is most likely to have fire resistance in. Magma at least is partially irresistable, without being quite as devastating as Damnation is. Also, the Cocytus and Gehenna Serpents now get equal health with the other two Serpents (from ~280 HP to ~323 HP), since those are the two worse performing Serpents and they're already more than differentiated enough on most other levels. The Dis Serpent, meanwhile, loses a little AC and EV, mostly to help subdue Dis that little bit more and compensate for the Metal Splinters replacement. (This does mean the Cocytus one keeps the strangely low-power Freezing Cloud breath, but it's getting a health buff here and its Flash Freeze was buffed by both a0a6642 and f3e26c5, so its broader term stats should probably equal out over more time.) -------------------------------------------------------------------------------- b72f624 | regret-index | 2024-07-17 18:16:46 -0230 Give ?/b a tile for Arena Just Okawaru's altar, which is kind of silly but fairly less silly than showing off a question mark for a place that uniquely doesn't have a normal regular entrance feature for it. -------------------------------------------------------------------------------- 0268064 | regret-index | 2024-07-17 17:47:06 -0230 Add "any hex wand" shorthand This lets vaults and wizmode use the seed's hex wands slot with "any hex wand" like "any beam wand" and "any blast wand" do, which seems to have been accidentally left behind when c28e0ee left out what 376ae5a and a4b73df did. -------------------------------------------------------------------------------- ad30c92 | David Lawrence Ramsey | 2024-07-16 16:53:09 -0500 Tweak "Brilliance"'s deescription again. Specifically mention the dark energy instead of saying "it"; "it" could erroneously refer to the weapon instead. -------------------------------------------------------------------------------- a504a9f | David Lawrence Ramsey | 2024-07-15 23:08:22 -0500 Fix typo. -------------------------------------------------------------------------------- b736c3c | David Lawrence Ramsey | 2024-07-15 22:38:57 -0500 Fix the message naming unique simulacra (#3887). Use the species name for uniques in such messages. If you make simulacra out of the Enchantress, you get Enchantress-shaped blocks of ice that turn into spriggan simulacra; make the message reflect this. This also avoids problems with naming simulacra after uniques with names starting with "the". Closes #3887. -------------------------------------------------------------------------------- 7c789da | David Lawrence Ramsey | 2024-07-15 22:19:24 -0500 Fix some Enchantress naming issues (#3887). As a monster with a name starting with "the", she was only handled properly in name_zombie(). She wasn't handled properly in either monster naming or polymorphed monster naming; Although there has to be a better way than hardcoding it for all those cases. -------------------------------------------------------------------------------- 30ed0ad | David Lawrence Ramsey | 2024-07-14 16:20:27 -0500 Simplify Xom pseudo-miscast feature checks. Use feat_is_statuelike() and feat_is_tree() for the cases where they apply. Accordingly, rename the Xom message key "Xom feature statue" to "Xom feature statuelike". -------------------------------------------------------------------------------- 86621e3 | David Lawrence Ramsey | 2024-07-14 16:15:07 -0500 Fix comment typo. -------------------------------------------------------------------------------- e9b8def | David Lawrence Ramsey | 2024-07-14 13:10:25 -0500 Vary the number of times Xom makes you do stuff. Always using three is boring. Vary from two to six instead. Also use this for the number of extra fingers Xom makes gloves grow. -------------------------------------------------------------------------------- 5bdad0b | David Lawrence Ramsey | 2024-07-14 12:46:45 -0500 Add more dance moves to Xom messages. Accordingly, handle hand and foot substitutions in such messages. Hand(or whatever)stands may get a bit odd for certain types of @hand@, but... it's Xom. -------------------------------------------------------------------------------- 665319e | David Lawrence Ramsey | 2024-07-14 12:25:06 -0500 Rename Xom message key from "two eyes" to "eyes". To make it match the other pairs-of-body-parts tags. -------------------------------------------------------------------------------- 1bc7ac4 | David Lawrence Ramsey | 2024-07-14 11:45:18 -0500 Add purple vine stalker player base tiles. For a little more variety. These are just palette-tweaked versions of the red ones. -------------------------------------------------------------------------------- 3abdcd5 | David Lawrence Ramsey | 2024-07-14 09:28:54 -0500 Add Xom pseudo-miscast messages for trees. -------------------------------------------------------------------------------- 41815e7 | David Lawrence Ramsey | 2024-07-14 09:09:07 -0500 Simplify atropa blindness checks. We only need to check for blindness resistance once, whether player or monster. -------------------------------------------------------------------------------- 815c665 | David Lawrence Ramsey | 2024-07-14 08:59:32 -0500 Fix blinding-related crash (NormalPerson7). Don't treat the player as a monster if they can't be blinded. -------------------------------------------------------------------------------- 0dbcb5d | David Lawrence Ramsey | 2024-07-13 20:28:44 -0500 Add a few more types of evil to artefacts. -------------------------------------------------------------------------------- 1e61e2b | David Lawrence Ramsey | 2024-07-12 23:21:10 -0500 Add a few acrobatic moves to Xom's dances. -------------------------------------------------------------------------------- c1d8bbe | David Lawrence Ramsey | 2024-07-12 23:07:28 -0500 Add another microorganism name to artefacts. -------------------------------------------------------------------------------- 2721c5b | elliptic | 2024-07-12 13:36:13 -0400 Allow randart launchers to have chaos or holy brands (rarely) It wasn't clear to me why these were forbidden - chaos is a possible result from brand weapon scrolls on launchers and TSO can holy brand launchers, so there's no implementation concern at least. The weight here has been taken from speed (now 75% as common as it used to be) and antimagic (now 50% as common as it used to be). The remaining forbidden brands on randart launchers are venom, protection, pain, spectral, and distortion. For reference, here are some brief arguments for why each of those should probably remain forbidden: - venom: would encourage a lot of kiting, since venom weapons max out monster poison quickly - protection: defenses are less relevant/interesting when at range - pain: ranged is awkward with necromantic allies since can't shoot through them - spectral: positioning is less interesting than with melee, and the spectral weapon is less likely to take damage from monsters - distortion: currently even Lugonu is forbidden from disto-branding a launcher - would turn one of distortion's major downsides, blinking monsters away, into an advantage -------------------------------------------------------------------------------- 99b34a3 | patrick | 2024-07-11 20:05:13 -0400 Update Big Baal Hell's to use artprops Specifying armour randarts with egos gives display bugs; the ego property gets listed twice. Fix that by using the artprops feature for what it was meant for: generating randarts with a specific property (that randarts are supposed to have). While I'm here, make all the gear into randarts, not merely good_item, and touch things up in a few other places. -------------------------------------------------------------------------------- 17eea93 | patrick | 2024-07-09 22:23:11 -0400 Clear out the Clear Minds Boutique There were two shops using the gimmick of having randarts with properties that can't normally generate: Clear Minds Boutique and One-of-a-Kind Rings. This is a bit much for a gimmick that's already on the edge of what these people let me get away with. Clear Minds was made entirely as a proof-of-concept while gammafunk was implementing artprop specification syntax, while One-of-a-Kind Rings already existed before then and has a stronger theme. Also, by only generating one such randart, One-of-a-Kind Rings is a little less egregious with its gimmickry. Accordingly, Clear Minds is getting cut. While I'm rummaging around in shops.des, One-of-a-Kind Rings is also getting an inventory tweak: the HP and MP artprops get their higher ends toned down somewhat. -------------------------------------------------------------------------------- 162e8f4 | Nicholas Feinberg | 2024-07-09 16:22:41 -0700 Set up a nine-month-long gag (ploomutoo) It's like April Fools in July! -------------------------------------------------------------------------------- df7db63 | David Lawrence Ramsey | 2024-07-09 00:19:24 -0500 Remove another reference to ears. -------------------------------------------------------------------------------- 3855256 | DracoOmega | 2024-07-08 21:38:50 -0230 Fix an obscure crash with tgw_kikubaaqudgha This vault used lua to place a miasma cloud, killing a caged human and 'raising' them as a zombie. A script called upon the human dying deleted the cloud they were standing in, but due to a change introduced in c0b93f29f480c8b389dd038c0c571e0ef521d79d it was now possible for them to die before _actor_apply_cloud was finished looking at that very cloud which it still maintained a reference to, resulting in undefined behavior. Despite what the lua comment says, the presence of the cloud does not actually prevent placing a zombie there (perhaps it did when the comment was written 13 years ago), so let's just not delete it. -------------------------------------------------------------------------------- 281234c | David Lawrence Ramsey | 2024-07-07 11:44:43 -0500 Properly check for unsigned char range (oops). Instead of casting and comparing (which will fail if the casted value coincidentally ends up in range), use UCHAR_MAX. -------------------------------------------------------------------------------- 484b3ae | David Lawrence Ramsey | 2024-07-07 11:34:39 -0500 Remove duplicate word in comment. -------------------------------------------------------------------------------- 64a9791 | David Lawrence Ramsey | 2024-07-07 11:31:02 -0500 Avoid crashing at Yes/No/All prompts. If the key is out of range, act as though we hit Escape, as we do with other non-alpha keys there, instead of causing undefined behaviour in isalpha(). Closes #3505. -------------------------------------------------------------------------------- 582db3b | David Lawrence Ramsey | 2024-07-07 10:37:07 -0500 Consistently use python3 in scripts (Aliscans). -------------------------------------------------------------------------------- da96e87 | David Lawrence Ramsey | 2024-07-07 09:10:25 -0500 Fix spacing. -------------------------------------------------------------------------------- bbbd308 | David Lawrence Ramsey | 2024-07-07 09:03:45 -0500 Add a quote for the Malign Gateway portal. -------------------------------------------------------------------------------- 1c079de | David Lawrence Ramsey | 2024-07-07 08:34:12 -0500 Fix fire crab quote. -------------------------------------------------------------------------------- 888de62 | David Lawrence Ramsey | 2024-07-07 08:22:22 -0500 Fix more unused variable warnings. -------------------------------------------------------------------------------- 677be53 | David Lawrence Ramsey | 2024-07-07 08:15:17 -0500 Remove unused variable (geekosaur). Closes #3911. -------------------------------------------------------------------------------- 9e1b529 | elliptic | 2024-07-07 08:04:55 -0400 Fix HW's Conj starting skill being accidentally changed to 1 (acrobat) (This was accidentally changed by 17d8ae0d.) -------------------------------------------------------------------------------- 51ab8bf | David Lawrence Ramsey | 2024-07-06 01:38:20 -0500 Remove Terence quote. Since he's been reflavoured from a murderer to a veteran, a quote about a murderer no longer fits. -------------------------------------------------------------------------------- 494059c | regret-index | 2024-07-06 03:41:49 -0230 Quick generic mutation icon placeholders To help some filter out mutations more easily on the A menu, this adds generic icons each for good mutations, bad mutations, Jiyva mutations, and Demonspawn mutations. The categories should provide a bit more immediate usefulness compared to the generic pawprint monster spells frequently rely upon, at least. This mostly tries to avoid innate species mutations (since it's not great to confuse them for other temporary mutations one has), and also Ru's sacrifices (since I didn't have much for ideas that didn't involve basically making the entire set). I might eventually get ideas for following up further on either. Tile used: CanOfWorms' mutation resistance icons, aidanholm's Malmutate icon, snw-0's Summon Demon icon, and Denzi's edible royal jelly tile. -------------------------------------------------------------------------------- 52db497 | regret-index | 2024-07-06 03:29:03 -0230 New Xom action: fake Shatter An rather rare action meant to provide more uniquely Dungeon-altering material as Xom alone can abuse, in the veins of c695c3f and f441f4b. This action has a few changes from Shatter: it has much worse odds to destroy most features beisdes doors or diggable objects (enough to make it much more likely Xom will malmutate, banish, or teleport people hoping Xom will cut through a vault for them), it leaves behind piles of debris in the rock or stone features it destroys, and most importantly, it doesn't actually do any damage- but it still makes one of the loudest noises in the game. The singular nature of the random destruction is somewhat neutral, really- thinner corridors become wider, opener areas may produce new corridor veins out of them, rooms may break open, and it's slow for all but the last of these to matter much in one combat due to the slowly withering nature of debris- but the extreme of a proper (fake) shatter still marks it as a net bad effects. It's a reasonable joke, at any rate, for Xom to do something unique. -------------------------------------------------------------------------------- 1167860 | David Lawrence Ramsey | 2024-07-05 15:47:16 -0500 Show aux hoof/talon base damage (CrawlOdds). Whether or not it's blocked by wearing boots. Closes #3779. -------------------------------------------------------------------------------- 39ae1f0 | David Lawrence Ramsey | 2024-07-05 08:37:18 -0500 Prevent casting BVC on oneself (CrawlOdds). Closes #3901. -------------------------------------------------------------------------------- c50a736 | David Lawrence Ramsey | 2024-07-05 08:13:59 -0500 Properly represent coglins in one more place. All player species were represented in a few vaults where they're caged up, but not in this one. -------------------------------------------------------------------------------- 83a2a37 | David Lawrence Ramsey | 2024-07-05 08:02:41 -0500 Remove plant holiness from Maurice (ge0ff). Added accidentally. -------------------------------------------------------------------------------- 89fc517 | DracoOmega | 2024-07-05 04:25:40 -0230 Fix Grave Claw no longer recharging after dying as a felid (Doctor Sulfur) -------------------------------------------------------------------------------- 4f90109 | David Lawrence Ramsey | 2024-07-05 00:23:17 -0500 Update docs for new species flags. -------------------------------------------------------------------------------- 7c36963 | NormalPerson7 | 2024-07-04 23:54:13 -0500 Use plaintext for more things in species and background YAML files Change the background YAML files to use plaintext for the recommended species and skills fields, and the species YAML files to use plaintext for the recommended jobs, flags, undead, and recommended_weapons fields (for consistency). The only enum values remaining are the species' corresponding monsters and the backgrounds' starting spells, which probably ought to remain enum values as they don't always correspond to their in-game names. Hardcode job-gen.py to allow writing simply 'draconian' in the yaml recommended species field instead of 'base draconian', where the enum value is SP_BASE_DRACONIAN. -------------------------------------------------------------------------------- 9c0ddd4 | NormalPerson7 | 2024-07-04 23:24:20 -0500 Move some common functions out of job-gen and species-gen This commit moves common validation and other helper functions that would be useful for any yaml-to-header generation file out of job-gen.py and species-gen.py, and into a new file genutil.py, and lets the two scripts import gen_util.py. Note the name of the utility module is genutil.py without a hyphen, because importing file names containing the hyphen character is impractical in Python. -------------------------------------------------------------------------------- 6ad58ca | NormalPerson7 | 2024-07-04 23:24:11 -0500 Convert weapon_choice to an enum class and abstract the yaml field This commit changes enum weapon_choice into an enum class. This allows a neat pattern format in job-data-jobs.txt of weapon_choice::{weapon_choice}, and consequently permits changing the enum values in the job yaml files into simple strings. Hence, the weapon_choice yaml field now has the three possible values "none", "plain", and "good", as opposed to the old enum values "WCHOICE_NONE", ..., "WCHOICE_GOOD". Update background_creation.md to reflect this. Note that previously, the type weapon_choice was defined twice, once as an enum type, and once as a pair in newgame.cc. Changing the enum to an enum class prohibits the second definition, so this commit renames the type defined in newgame.cc to weap_choice. -------------------------------------------------------------------------------- f6c074b | NormalPerson7 | 2024-07-04 23:23:52 -0500 Move weapon_choice and job_def definitions out of job-data.h After this commit, the enum weapon_choice and struct job_def are located in a new file, job-def.h, instead of being generated in job-data.h by job-data-header.txt. The header of job-data.h now contains a description of the struct. -------------------------------------------------------------------------------- 0b8ad47 | NormalPerson7 | 2024-07-04 23:23:24 -0500 Add documentation for background creation using yaml files This commit converts background_creation.txt to use the format of species_creation.md to document the yaml format for backgrounds. Also add a one-line README to dat/jobs/. -------------------------------------------------------------------------------- 6925c6b | NormalPerson7 | 2024-07-04 23:20:24 -0500 Generate job groups on the character selection screen from yaml files This commit adds the following new, automatically generated file: - job-groups.h generated by job-gen.py, using almost identical code to that for the species groups generated by species-gen.py. -------------------------------------------------------------------------------- 17d8ae0 | NormalPerson7 | 2024-07-04 23:20:10 -0500 Generate job data from yaml files This commit converts the following files from hand-written to automatically generated: - job-data.h - job-type.h These files are generated from yaml files in the same way as species, using the Python script job-gen.py, which is a modified version of alexjurkiewicz's original species-gen.py. -------------------------------------------------------------------------------- 2401335 | David Lawrence Ramsey | 2024-07-04 23:09:13 -0500 Fix typo. -------------------------------------------------------------------------------- 4d2d54d | David Lawrence Ramsey | 2024-07-04 23:09:10 -0500 Remove unneeded space. -------------------------------------------------------------------------------- d92453a | regret-index | 2024-07-05 01:30:46 -0230 Fix the Xom test -------------------------------------------------------------------------------- 0f6896e | regret-index | 2024-07-05 00:37:21 -0230 New Xom action: mass(?) charm Another unique and removed god ability reasonably shareable with the maximalist god of random effects: the Crusade card. There's some further design space between and beyond replicating single target hex wands and the invocation buff with weird intelligence checks, after all. Swapping around multiple allegiances in the midst of battle is good chaotic fun, but since it can be much stronger to convert multiple monsters present compared to other effects (even in just telling a charmed monster to run offscreen and get itself killed), it's been seperated from the other Xom effects. This good Xom action will always charm one random monster, fail to charm another random monster, and then rolls to mostly find the lower-HD half of present monsters to charm afterwards. Going for the "weaker" proportion of matters is, of course, reasonably balanced by that half having the player to try and balance out present monsters with, and still gets quite involved in the warring afterwards. Let's try it out. -------------------------------------------------------------------------------- a0d1426 | regret-index | 2024-07-05 00:37:21 -0230 More broad Xom action adjustments * As long as Xom's not bored or wrathful, Xom's torment now also hits every other living being in sight as well as the player. With Kiku having lost the effect for Sign of Ruin, there's design space for the mixed-benefits effect, and it can tempt people into still pushing forward on a fight after being tormented, while all still functioning under a mostly negative effect due to being uncontrolled. * Xom summoned chaotic allies and enemies once more are nerfed to be slightly weaker versus XL again, most notably to reduce the odds and pressure of the highest quantity lowest level spawns producing hellwings alongside other tier-4 demons immediately next to players in early Lair, as well as to cover for their new threat levels past Lair branches. Hostile non-brain-drain summons are also fuzzed in placement to not be immediately surrounding the player, to provide more varied tactics to handle them as opposed to being directly in cleaving / IMB range and to reduce the habits of making most Xom worshippers only rest in niches and hallways. * Since bazaars are entirely harmless and thus uninteresting to Xom otherwise, Xom now replaces the flavour customers of bazaars with... very different sights. * Xom now cannot polymorph most monsters into higher HD monsters before xl 4, to prevent D:1 deaths to killer bees and bullfrogs and so on and so forth. (This unfortunately doesn't currently work for bats, as the polymorph fixed-list key per monster needs to prevent shapeshifters from drowning themselves over liquids, and thus any other flying options a bat could be polymorphed into is five or more floors deeper a threat. Passing through a lot more code to allow Xom to not care about instantly drowning given enemies would be ideal, eventually.) Polymorphs are also explicitly described as hostile or not in one's notes. * Xom's good and bad monster enchanting now both can enchant increasing numbers of visible enemies on screen, with a range capped by XL. This also comes with swapping out the charm and invisibility effects for vitrify and regeneration- mass charm is slated for its own seperate effect to actually have resistability attached, and mass invisibility (while very funny) is far too annoying to have be a common thing in Xom games. There might be some space for Xom to do more things in this space (like throw on a dozen debuffs that all don't overlap with paralysis or confusion onto a single target), but this should help for now with the continued goal of the past Xom commits for 0.32 both making Xom's danger scale more throughout more of the game and making Xom's upsides feel more variably tangible than just "skip random fights and get random mutation benefits". -------------------------------------------------------------------------------- f441f4b | regret-index | 2024-07-05 00:37:20 -0230 New Xom action(s): glass door enclosure Why imprison something in silver walls if those walls will inevitably collapse? Might as well at least try something flashier. Vitrification was removed from Xom's list of effects back in 1be608a due to interrupting rest, travel, and exploration with monsters who possibly could yet in practice obviously do not actually have any chance to reach the player. While this is quite understandable, it was nice to have Xom materially effect the dungeon itself in more permanent fashions beyond the extremely rare moving of stairs or a mechnically-irrelevnt smattering of random decor. There are ways to approach this, in particular, that shouldn't really impare the rest / travel / exploration space by too much. This rare Xom action has two different versions depending on Xom's mood. In either form, Xom surrounds the player in a ring of disconnected clear doors at distances 3 through 5, digging through diggable walls and replacing decorative non-altar features as is needed. When Xom is feeling merciful, this also comes with blinking hostile monsters inside or on top of the ring outside the box. When Xom is feeling cruel, this comes with not blinking out adjascent enemies if you're already surrounded, as well as blinking in more visible enemies into the box (scaling randomly to xl). Either way, it should still be nicely dramatic and also still reasonably parseable for Crawl to let one rest behind the transparent doors if monsters on the other side can't, in fact, open them. (Aside from trying to vary up effects here to be seperate of the recent new Xom flora ring, the radius size and disconnected doors here are deliberately evoking reverse_door_vault. While this is somewhat of a very narrow in-joke meme, it also serves interestingly enough from a tactical perspective to excuse such.) -------------------------------------------------------------------------------- 18e1206 | Implojin | 2024-07-04 19:48:51 -0500 Remove an unneeded rampage terrain prompt (CarefulOdds) Since a0b39eb048, rampage has been issuing a check_moveto terrain prompt if the player does a rampage double-move across a tile that pings check_moveto, even if that move would end on a "safe" tile. (E.g. rampaging through a poison cloud into an open tile.) This seems unnecessary as long as we're checking the player's final position, which we are. -------------------------------------------------------------------------------- acc7b80 | David Lawrence Ramsey | 2024-07-04 13:48:45 -0500 Fix typo. -------------------------------------------------------------------------------- 0126419 | David Lawrence Ramsey | 2024-07-04 13:24:30 -0500 Tweak player dazzling/blinding logic. Dazzling immunity requires blinding immunity, and blinding immunity requires not having eyes. This is closer to the monster version where the former is true alredy, and produces the same results as before. -------------------------------------------------------------------------------- 7058c45 | David Lawrence Ramsey | 2024-07-04 11:36:37 -0500 Flag vine stalkers/Maurice as unblindable. Like players, they don't have plant holiness, and giving it to them might introduce bugs. So match the player side of things (no dazzling/blinding) the easiest way. -------------------------------------------------------------------------------- b54987c | David Lawrence Ramsey | 2024-07-04 10:55:30 -0500 Add another Xom ear message. -------------------------------------------------------------------------------- 534115a | David Lawrence Ramsey | 2024-07-04 10:50:11 -0500 Remove a few references to ears. -------------------------------------------------------------------------------- e137b16 | David Lawrence Ramsey | 2024-07-04 10:46:53 -0500 Replace another eye reference. -------------------------------------------------------------------------------- 503b74b | David Lawrence Ramsey | 2024-07-04 10:43:07 -0500 Tweak see invis description to mention vision. This matches the in-game text in mutation-data.h. -------------------------------------------------------------------------------- 61b81b7 | David Lawrence Ramsey | 2024-07-04 10:36:41 -0500 Replace eyebrow references with hair references. Checking for hair for only the eye messages that reference eyebrows in Xom pseudo-miscasts is overly complex. -------------------------------------------------------------------------------- 98fe185 | David Lawrence Ramsey | 2024-07-04 10:31:29 -0500 Rename gold dragon scales to golden dragon scales. -------------------------------------------------------------------------------- 0ec4f85 | David Lawrence Ramsey | 2024-07-04 07:54:29 -0500 Make Vine Stalkers not have ears. Since they're symbiotes, it could go either way, but the tiles seem to not show visible ears, and plants don't have external ears in the usual sense anyway. -------------------------------------------------------------------------------- 9b862b9 | David Lawrence Ramsey | 2024-07-04 00:00:26 -0500 Put random body part msg code in the right place. It was in Xom's pseudo-miscasts so I could test it more easily, but it should have been in do_mon_str_replacements() so that it could be used generally, e.g. in god_speaks(). -------------------------------------------------------------------------------- 971c8ff | David Lawrence Ramsey | 2024-07-03 23:48:12 -0500 Make Xom make your ears wiggle instead of glow. Glowing a random colour is interesting, but movement is more interesting. -------------------------------------------------------------------------------- a66dc38 | David Lawrence Ramsey | 2024-07-03 23:45:07 -0500 Replace a Xom ear pseudo-miscast msg. We don't know if your species already has pointed ears or not, so just make them glow some other colour. -------------------------------------------------------------------------------- d626460 | David Lawrence Ramsey | 2024-07-03 23:40:26 -0500 Add msg for Xom's ripping magic out of you. Using a random body part the player has. Suggested by regret-index. -------------------------------------------------------------------------------- 5d92986 | David Lawrence Ramsey | 2024-07-03 23:31:39 -0500 Add Xom pseudo-miscasts for ears. -------------------------------------------------------------------------------- 6afc23f | David Lawrence Ramsey | 2024-07-03 23:27:28 -0500 Indicate whether species/forms have ears. In species, make a new species flag for it. The player species and forms that don't have external ears are now flagged as having no ears. Nothing is done with the functions to detect player ears yet; this will be remedied. -------------------------------------------------------------------------------- d25bf87 | David Lawrence Ramsey | 2024-07-03 22:08:28 -0500 Tweak Xom's eyes pseudo-miscasts again. Drop references to right and left, and just say one of your eyes. This allows the message to work regardless of which eyes it's talking about. -------------------------------------------------------------------------------- 2d43d07 | David Lawrence Ramsey | 2024-07-03 21:55:49 -0500 Document the fix for Xom's eyes pseudo-miscast. -------------------------------------------------------------------------------- de14e3e | David Lawrence Ramsey | 2024-07-03 21:48:53 -0500 Fix Xom's eyes pseudo-miscasts. Count the ones from your current form, but not the ones form Jiyva's mutation, since the latter are not the usual left/right eyes that the messages are made for. -------------------------------------------------------------------------------- a0bb186 | David Lawrence Ramsey | 2024-07-03 21:05:37 -0500 Fix override warnings? -------------------------------------------------------------------------------- e099dce | David Lawrence Ramsey | 2024-07-03 20:46:51 -0500 Handle players with no eyes. Fix a few references that assume eyes (the see invisible mutation's long description, plus a Pan lord description). Also account for no eyes in Ru's eye sacrifices and Xom's eye-related pseudo-miscasts. -------------------------------------------------------------------------------- 3a50e4b | David Lawrence Ramsey | 2024-07-03 20:46:46 -0500 Indicate whether species/forms have eyes. In species, make a new species flag for it. The player species and forms that are immune to dazzling/blinding (vine stalkers, trees, and fungi) are now flagged as having no eyes, and that quality is now what gives them such immunity. The code assumes elsewhere that all species have eyes; this will be adjusted. -------------------------------------------------------------------------------- 2ac8d13 | David Lawrence Ramsey | 2024-07-03 20:46:36 -0500 Try to clean up dazzling/blindness checks. Move them to actor, and apply them consistently to both player and monster as much as possible: dazzling checks everywhere, except for atropa darts, which explicitly do blinding checks. On the player side, resistance to being dazzled is the same as resistance to being blinded, to keep dazzling/blinding as available to players as possible. This means that vine stalker players, as well as players in tree or fungus form, can no longer be dazzled/blinded, but all other players can. -------------------------------------------------------------------------------- c8384d3 | elliptic | 2024-07-03 20:34:53 -0400 Fix the wrong gem being placed in a D:15 vault (sosloow) -------------------------------------------------------------------------------- 195b16c | David Lawrence Ramsey | 2024-07-03 18:45:13 -0500 Add a few blank lines. To make the form_has_ functions stand out better. -------------------------------------------------------------------------------- d6cd30c | DracoOmega | 2024-07-03 20:39:55 -0230 Let Divine Shield block ioods and refactor a little -------------------------------------------------------------------------------- eaf127b | David Lawrence Ramsey | 2024-07-03 17:54:11 -0500 Fix death-form's never having bones (oops). It now has bones only if the original species does. Also, consistently refer to it as fossilised instead of bony, for those species without bones. -------------------------------------------------------------------------------- 483be50 | elliptic | 2024-07-03 18:03:53 -0400 Save compat to remove negative Divine Shield charges -------------------------------------------------------------------------------- a96e11e | elliptic | 2024-07-03 17:46:12 -0400 Fix characters getting a negative amount of divine shield charges (They got them even without worshipping TSO!) -------------------------------------------------------------------------------- e965ef1 | David Lawrence Ramsey | 2024-07-03 16:38:46 -0500 Fix bugs/inconsistencies for plant players. Since they don't actually get plant holiness, the player::can_be_dazzled() checks for such did nothing. Check for the species and forms directly instead. Also, make fungus form immune to torment, since it's supposed to have plant holiness, and tree form makes you immune to torment for the same reason. -------------------------------------------------------------------------------- 9bc2200 | Nikolai Lavsky | 2024-07-04 00:03:53 +0300 fix: remove duplicate "the" from RevPerry messages Fixes messages like "You knock the the +0 club out of the goblin's grip!" -------------------------------------------------------------------------------- b22d421 | DracoOmega | 2024-07-03 16:42:47 -0230 Make the Orb complain if any method moves it (ge0FF) It was possible to use hellfire mortar's temp lava to slowly shift the Orb of Zot all the way to the stairs before picking it up (by creating lava under it, causing it to be displaced by one tile). Other less practical methods of moving it include Tomb cards and Summon Forest. Since the Orb complains about apportation, it probably ought to complain about this as well. Now any terrain change that triggers a shift which moves the orb will have a similar effect as apportation being cast upon it. -------------------------------------------------------------------------------- b890d63 | DracoOmega | 2024-07-03 16:39:38 -0230 Actually print a message when Sign of Ruin blinds a monster (elliptic) -------------------------------------------------------------------------------- 0a67a26 | DracoOmega | 2024-07-03 16:39:27 -0230 Apply Sign of Ruin effect on either melee *or* brand damage (elliptic) Sign of Ruin had a mild lack of synergy with Kiku's pain brand gift (in that Pain weapons function even on 0 damage hits, but those hits still could not trigger Sign of Ruin). Now it triggers if either the main hit *or* brand does damage on a given attack. -------------------------------------------------------------------------------- 2031b86 | DracoOmega | 2024-07-03 16:31:43 -0230 Make Divine Shield actually block beams (elliptic) Not sure how I overlooked this.... -------------------------------------------------------------------------------- 329bce5 | DracoOmega | 2024-07-03 16:31:07 -0230 Don't expire Divine Shield with time (elliptic) When reworking this ability, I'd kept a small duration on top of the limited block charges with the aim to keep the scope of the ability to a single combat. But it's been pointed out that this makes it possible to end a fight with blocks remaining, walk over to a second, and have the effect expire right as you're about to get hit. Since there's a non-trivial piety cost to the ability, we shouldn't need to worry about pre-buffing, so now your block charges simply stay around indefinitely until used. (This converts DUR_DIVINE_SHIELD to now be the number of remaining block charges rather than aut, and removes the use of ATTR_DIVINE_SHIELD entirely) -------------------------------------------------------------------------------- 23c2863 | David Lawrence Ramsey | 2024-07-03 01:08:16 -0500 Avoid spurious blinding msgs from TSO's shield. Try to blind them first, and display the "struck blind" message only if it succeeds and they weren't blinded before. Since unblindable monsters can't be blinded, this will properly stop the "struck blind" message from displaying for them. -------------------------------------------------------------------------------- 54083d6 | David Lawrence Ramsey | 2024-07-02 22:31:13 -0500 Fix incorrect possessive in merfolk siren msg. (Why isn't there a warning for a non-boolean erroneously used as a boolean parameter?) -------------------------------------------------------------------------------- f62c45d | elliptic | 2024-07-02 13:53:14 -0400 Tweak Hedge Wizard start (acrobat) Hedge Wizard had one of the least reliable XL 1 starts in the game since their starting spell, Magic Dart, had extremely low damage at their 1 Conjurations skill spell power. power. So let's raise that to 2 starting Conj skill. In addition, let's give them 1 Necromancy skill for symmetry with Summoning and Translocations now that they have a L2 Necromancy spell in their starting book. This commit also removes Slow from their starting book - it wasn't very appealing to raise Hexes just for Slow spell power given how many other schools they might want to train, and it isn't a very good spell at very low power. This means that Slow now isn't in any starting spellbooks, so it seems reasonable to cut it as a player spell altogether - it isn't very fun gameplay anyway. I'll wait a bit on doing that though. -------------------------------------------------------------------------------- b4b85c6 | David Lawrence Ramsey | 2024-07-02 10:20:12 -0500 Move player_has_bones() into actor. Map the monster version to mons_skeleton(), which is the closest equivalent on that side. It's currently not used directly anywhere, but it might be useful at some point for an eventual spell that only affects living monsters with bones. Whether monsters have hair and/or feet doesn't seem to affect much on that side, so those functions are still player-specific. (Unless there are eventual spells to e.g. strangle monsters with their own hair, or knock their feet out from under them.) -------------------------------------------------------------------------------- 38ac799 | David Lawrence Ramsey | 2024-07-02 09:50:24 -0500 Update comment. Now that has_blood() exists, Xom could rip your magic out through it, too. -------------------------------------------------------------------------------- 4f4802e | David Lawrence Ramsey | 2024-07-02 09:44:19 -0500 Indicate whether species/forms have blood. In forms, move the quality from can_bleed to has_blood. Elsewhere, rename the function. In species, make a new species flag for it. Note that having certain holinesses no longer automatically implies not having blood. Species with no blood are explicitly flagged as having no blood instead. (The one exception to this is the check for is_lifeless_undead()'s being false, which is needed to account for the one odd case of not-currently-alive vampires.) -------------------------------------------------------------------------------- 611ce37 | David Lawrence Ramsey | 2024-07-01 18:26:45 -0500 Indicate whether species/forms have feet. And make player_has_feet() use it properly. Note that having certain intrinsic mutations no longer automatically implies not having feet. Species with such mutations are explicitly flagged as having no feet instead. -------------------------------------------------------------------------------- 23c4013 | David Lawrence Ramsey | 2024-07-01 17:28:34 -0500 Indicate whether forms have bones. And make the various bones checks use it properly. -------------------------------------------------------------------------------- ab78b9c | David Lawrence Ramsey | 2024-07-01 17:07:26 -0500 Rename function to match associated variable. Use form_changes_physiology() instead of form_changed_physiology(). -------------------------------------------------------------------------------- 61c9020 | David Lawrence Ramsey | 2024-07-01 17:02:53 -0500 Indicate whether forms have hair. And make player_has_hair() use it properly. -------------------------------------------------------------------------------- 5f993c3 | David Lawrence Ramsey | 2024-07-01 13:17:33 -0500 Fix desc of death-form arms for boneless species. Use "fossilised" instead of "bony" for them. Maybe there's a better option, but it's all I could think of at the moment. -------------------------------------------------------------------------------- c0d58c9 | David Lawrence Ramsey | 2024-07-01 09:59:29 -0500 Properly check if the player has hair. Account for forms as well as species (as best we can), and have Xom's hair-related pseudo-miscasts use this check. -------------------------------------------------------------------------------- cffdeba | DracoOmega | 2024-07-01 02:31:44 -0230 Buff Arachne yet more Even after the last buff, she's still been lagging behind; venom bolt and poison arrow just don't scale that aggressively compared to other uniques she shares her depth range with now. This gives her some more HD for extra spell damage, nudges up her conjuration cast rate just a smidge, and replaces Blink with Blink Range. -------------------------------------------------------------------------------- 3df90f6 | DracoOmega | 2024-07-01 01:52:01 -0230 Make the number of Elemental Force summons a little more consistent It used to summon between 1 and 'Invocations - 1' elementals, resulting in an extremely wide variance, especially at higher invocations. It's already generally outshone by direct damage options at high invo, so it probably doesn't also need a chance to roll just a single elemental. -------------------------------------------------------------------------------- 3e911be | DracoOmega | 2024-07-01 01:30:41 -0230 Slightly clarify message for trying to invent a gizmo with full inventory At least some players didn't seem to understand that this was referring to their inventory, as opposed to some other problem. -------------------------------------------------------------------------------- e3ac9d4 | DracoOmega | 2024-07-01 01:30:09 -0230 Make Planerend summons last a bit longer. Abjuration degree 1 is just a very short length of time for hostile summons to last. (Forceful Invitation can stay at 1, due to the context in which it is usually encountered.) -------------------------------------------------------------------------------- 6d7365d | DracoOmega | 2024-07-01 01:28:40 -0230 Don't let Orb of Mayhem's effect target the thing that just died. This produced a very confusing series of messages (and also wasted the effect on a monster who was in the process of dying at the time.) I kind of think that monster_near_iterator by default just shouldn't include the monster whose perspective it is from, as the vast majority of time this specific check is then added manually (or forgotten!). -------------------------------------------------------------------------------- 17a6108 | DracoOmega | 2024-07-01 00:37:55 -0230 Tweak message for trying to use draconian breath that is exhausted This was written for an old draft that restored charges when you entered new floors, but apparently was never changed when it became xp-based instead. -------------------------------------------------------------------------------- 712046f | DracoOmega | 2024-07-01 00:37:07 -0230 Fix a visual bug with green draconian breath tracer At XL too low to have the breath spread beyond the central line, it was nonetheless showing that it might affect an area adjacent to any monsters hit by the central line (due to shared code with Combustion Breath). -------------------------------------------------------------------------------- 80f043c | DracoOmega | 2024-07-01 00:35:44 -0230 Prompt and warn if green draconian breath could leave a cloud on an ally -------------------------------------------------------------------------------- 8640a3f | DracoOmega | 2024-06-30 22:02:30 -0230 Hopefully fix some webtiles flash alpha problems more properly screen_cell_t.flash_alpha and cell_t.flash_colour weren't initialized upon construction. While draw_cell() would set these to appropriate defaults before using them for most purposes, TilesFramework::_send_cell specifically only wrote these values to json if they differed from the previous frame. This allowed a brief window upon loading a screen (and maybe other times?) where it was possible the uninitialized number would equal the 'real' number we wanted to write there, and because there was 'no change', it would not get written to webtiles json at all. At the same time, this means that a flash_alpha of 0 should never cause a json write under most circumstances, even though this is used as a 'default alpha' for active flashes (often actually 100). So notice when they're trying to use an undefined alpha value javascript-side and assume it is zero instead. I'm not 100% convinced this will properly fix all of the bugs bandaged over by 6d3ed6f0afcef2dff2510c721f16ae45721817a5 but it seems like a good attempt. -------------------------------------------------------------------------------- d7d0690 | DracoOmega | 2024-06-30 22:02:30 -0230 Don't assert when aiming a lightning rod at LoS 0 It's not clear to me that this assert is needed in the first place (and regular beam targeters don't have a similar one). -------------------------------------------------------------------------------- b41b973 | DracoOmega | 2024-06-30 22:02:30 -0230 Don't let faint miasma linger indefinitely if the player stands on it -------------------------------------------------------------------------------- ddb5797 | DracoOmega | 2024-06-30 22:02:30 -0230 Preview EV/SH changes from wielding randart staves (pisaster) They should now display the same info block that randart weapons do, in this regard. -------------------------------------------------------------------------------- a2a0cb1 | DracoOmega | 2024-06-30 22:02:30 -0230 Fix Marionette targeter not counting draconian breaths (not_that_greg) In the demoninator, at least. This turns out to actually have been an issue with get_unique_spells(), which would ignore breaths if no spell filtering flags were set. This doesn't seem to have had wider consequences as other uses of this function specify at least one filter. (Though I think this function was accessible to client lua, so it may have also affected someone else at some point in time, somehow.) -------------------------------------------------------------------------------- 14bc459 | DracoOmega | 2024-06-30 22:02:30 -0230 Flag Fulsome Fusillade as chaotic The chance is low, but it *can* malmutate enemies caught in an unstable reaction, so this would be consistent with other mutating spells. Sorry, Zin worshippers. -------------------------------------------------------------------------------- bb5b619 | DracoOmega | 2024-06-30 22:02:30 -0230 Show Grave Claw charges in quiver line, while it's quivered (CarefulOdds) Seems like a small UI nicety. -------------------------------------------------------------------------------- 0bbe9e1 | David Lawrence Ramsey | 2024-06-30 14:46:07 -0500 Fix typo. -------------------------------------------------------------------------------- e1784ef | DracoOmega | 2024-06-30 17:02:21 -0230 Improve Step From Time's functionality Step From Time is a conceptually cool ability - let the level run for a few hundred turns without the player and see how much that improves your situation - but its reliability is deeply troubled in practice. It is very common for it to make no meaningful improvement in your situation - and worse, enemies get an immediate action so sometimes the player can even get blasted by monsters that weren't in sight before they used it! A fundamental problem with the ability working the way it does is that monster wandering behavior in Crawl - when there is no player to track nor noise to pursue - is very, very dumb. A monster can literally spend thousands of turns in a medium-sized room without figuring out how to exit it - a problem that gets even worse the more other monsters are in the room for it to bump into, as each time its movement is blocked, it will start moving in a different random direction instead, making it near-impossible for a cluster of monsters to exit a corridor. I spent a while investigating how this basic wandering behavior might be improved, but it's unclear that any changes which do not require a massive-scale refactoring of monster behavior code (which is a good idea in general, but very daunting) would actually be beneficial. The incidental property of 'monsters tend to stay inside enclosed major vaults unless the player is fighting nearby' is arguably good, more intelligent behavior could be much more computationally expensive, and what monsters do when the player is extremely far away from them mostly just isn't that important. Except for Step From Time. So instead, let's cheat. Rather than merely causing a large amount of time to pass and hoping the results incidentally make a good button to press, let's move some things behind the scenes to ensure that they do - while still staying true to some of the flavor and 'unpredictability' of the ability - but to a more acceptable degree. Step From Time now passes only 100 turns in the old way (enough to introduce some general randomness, and cause timed effects to wear off, summons expire, poison to kill things, etc.). And then it grabs a random 50-85% of nearby awake monsters and manually moves them some distance away from the player to simulate them wandering (if wandering actually worked any good at all). They will always end up somewhere out of the player's LoS that they could have walked under their own power (so it's definitively *not* a teleport). Then we roll an independent power-based chance to put awake creatures anywhere in the level to sleep. (A property Step From Time effectively had in the old days, and one that seems thematically appropriate without being too easy to exploit.) Finally, we steal just enough energy from monsters which remain in the player's LoS to ensure that they do not act before the player has seen them. In total, using this ability is a lot more likely to improve the player's situation (but is not guaranteed, still has a large degree of randomization, and still functions poorly in places the player could *expect* it to function poorly, like enclosed spaces with no exit.) I've nudged the piety cost up slightly at the same time, but it should feel like a much better button to push, regardless. -------------------------------------------------------------------------------- fadd82b | DracoOmega | 2024-06-30 17:02:21 -0230 Don't crash when shadow-throwing a large rock The game wasn't considering them throwable by player shadows, which led to other issues with code that assumed they could. Fixes #3899 -------------------------------------------------------------------------------- 0d330ff | David Lawrence Ramsey | 2024-06-30 00:05:21 -0500 Update Kiku powers description (jlwoodwa). Since torment has been replaced with the sign of ruin. Closes #3898. -------------------------------------------------------------------------------- 9325eb9 | David Lawrence Ramsey | 2024-06-29 21:33:42 -0500 Tweak a Xom divine lightning message. Since the effect produces multiple blasts now, instead of just one. -------------------------------------------------------------------------------- 79019f5 | David Lawrence Ramsey | 2024-06-29 20:51:52 -0500 Fix spacing. -------------------------------------------------------------------------------- 069b42e | David Lawrence Ramsey | 2024-06-29 20:42:38 -0500 Fix spelling. -------------------------------------------------------------------------------- bdf0b8b | regret-index | 2024-06-29 22:43:51 -0230 Scattered Xom buffs to both worship and wrath As mentioned back in a3c6b23, the various changes between dropping miscasts and adding heavy XL scaling have reduced the chances Xom will directly kill the player, which is good for making people actually stay with and appreciate Xom, but also lets chaos knights who abandon Xom early live more often. The latter is unideal- it goes against the spirit of chaos knight in the first place!- and so several bits of wrath are now a bit harsher, to invoke the prior state of tier-3 demons on D:2. * Xom's wrathful actions no longer can include harmless miscast messages or random noise, as these don't actually do anything much to a given sinner. * Hostile summons counts are doubled under boredom and tripled under wrath (alongside an upgraded increase in effective level). * Xom banishes deeper and earlier while wrathful. * Xom's bad mutation effect is guaranteed to have at least one bad mutation if you're under wrath. * Xom enemy buffs no longer include BEAM_AGILITY- it's just not much of a decent joke unless it's actually made to do something, anyway. As a bit more of a carrot to go with the stick, to reward those who stay with Xom, more positive actions are a bit more noticeable and less malevolent to the player, also: * Xom polymorph-to-shapeshifter effects now require being at least xl 5, unless under Xom wrath or boredom. * Xom's single-ally summons last an average of 320 aut (up from 170) before vanishing and now get a free regeneration buff, so one can actually keep them around for a reasonable while on their floor without making one's own resting awkward. * Xom's random spells-through-the-player cast list swaps out Summon Ice Beast (boring, old, starter book spell) with Martyr's Knell (exciting, new, unique in support capacities), and Metabolic Englaciation (redundant with several other haste and slow effects) with Animate Dead (since Death Channel is already present and useful). Tension now also contributes to spellpower alongside Xom interest and player XL. * Xom's divine lightning blast now also comes with several random lightning bolts occasionally aimed somewhat towards enemies, since some seem to miss the random firing of old black draconian breath and disc of storms. * Xom's Ignition-predecessor Mass Fireball now also sticky flames on hit. Since Xom won't catch worshippers in the fireball barrage, there's now a bit more of interest and agency in charging towards whatever one wants to keep alight, and it's also a bit closer to Xom's tones by highlightning status effects too. -------------------------------------------------------------------------------- 5538e63 | regret-index | 2024-06-29 22:37:57 -0230 New Xom action: living Force Lance fleet Divine foxfire swarms are clearly too weak to interest Xom. Xom's direct destruction effects (outside of the incredibly rare Fusilade and Chain of Chaos calls) are currently rather dull for a contemporary divine context- either blasting the worshipper directly with a lightning AOE or tossing around a few fireballs that might incidentally be fake. There's ripe space for additional effects and revisions that can at least look fancy and also let the god remotely catch up to the newer effects from Nemelex, Qazlal, Ru, and Ignis, as long as they're unaimed as always. This new effect only activates if there's more than one enemy visible. If it does, it first does non-damaging knockback in a small radius around the player, akin to the scroll of butterflies, and then fills the space around the player with living spells that cast Force Lance. Force Lance in particular is chosen for its capacity to wildly push enemies around if they aren't immediately killed (and even repeatedly knock enemies out of sight only for them to walk back in and get pushed out again), which provides a more positive contrast to the position-swapping Xom action that's already been around for a while. The effect itself scales both spawns and damage heavily to the player's XL and is reasonably weaker during Xom wrath. It tends to mostly wound but not directly kill from full health random bands appropriate for their XL while rapidly crushing uniques without bands or summons, which is fine since Xom's random irresistable debuffs will already do the same anyway. -------------------------------------------------------------------------------- 9b0b472 | regret-index | 2024-06-29 22:37:57 -0230 New Xom action: brain drain Other new joke directions: doing the active opposite of divine abilities. In this case, Channel Magic and Draw Out Power. Since Xom's already covering statdrain, active draining, and torment, we might as well complete the number of ways Xom can affect the player's stats and points with something a bit more dramatic. (They did always find Brain Feed amusing, for whatever reason.) This Xom bad action drains 3/4ths of a worshipper's current mp (if and only if they have any) and transforms such into hostile (rarely neutral with severity) brain worms, mana vipers, and / or quicksilver elementals, scaling heavily to that worshipper's level. If Xom's bored or wrathful, this instead drains all mp, has no neutrality chance, and scales one's XL up further. It's a bit more violent of a prank than usual for Xom, but is that really that much different than their old predilection for explosions? -------------------------------------------------------------------------------- beb539b | David Lawrence Ramsey | 2024-06-29 18:57:12 -0500 Tweak Xom gizmo pseudo-miscast msg. To make it overlap less with the dragon armour pseudo-miscast msg. -------------------------------------------------------------------------------- c6c5c12 | David Lawrence Ramsey | 2024-06-29 18:25:00 -0500 Add Xom pseudo-miscasts for gloves/boots slots. There are grammar oddities for a few unrands with plural names (e.g. the Mad Mage's Maulers, which are not described as a pair of maulers), but they have the same oddities when in the player's inventory. -------------------------------------------------------------------------------- f4a1136 | David Lawrence Ramsey | 2024-06-29 17:50:37 -0500 Clarify comment. Gods can change unrands, as shown by Yred and "Brilliance". Xom could change unrands for chaos branding, but doesn't. -------------------------------------------------------------------------------- 6f9366b | David Lawrence Ramsey | 2024-06-29 17:48:19 -0500 Improve display of Xom ring slot miscasts. The ring names should start with "your" even if they're artefacts, like the other slot miscast messages. -------------------------------------------------------------------------------- f6d08cc | David Lawrence Ramsey | 2024-06-29 17:41:54 -0500 Add a Xom pseudo-miscast for ring slots. -------------------------------------------------------------------------------- 1c16d33 | David Lawrence Ramsey | 2024-06-29 16:13:55 -0500 Add a Xom pseudo-miscast for the gizmo slot. -------------------------------------------------------------------------------- 6061a74 | David Lawrence Ramsey | 2024-06-29 13:37:09 -0500 Add another pattern to the colour database. -------------------------------------------------------------------------------- f4827b8 | David Lawrence Ramsey | 2024-06-28 21:23:18 -0500 Add a few more Kiku Donald/player ghost lines. To reflect the flavour change from pain and torment to ruin and despair. The player ghost line referencing pain and torment is still there, but the way it's worded, it could apply to the ghost instead of the player, and who knows how Kiku punishes worshippers who fail them by dying? -------------------------------------------------------------------------------- a8b34eb | DracoOmega | 2024-06-28 18:27:35 -0230 Fix a possible Xom mass-paralysis crash -------------------------------------------------------------------------------- eaafe8a | David Lawrence Ramsey | 2024-06-28 15:18:34 -0500 Fix spelling. -------------------------------------------------------------------------------- b744659 | David Lawrence Ramsey | 2024-06-28 15:17:20 -0500 Update Necromancer background desc (jlwoodwa). Since the Necrotise spell has been replaced with Soul Splinter. -------------------------------------------------------------------------------- 7b7531d | David Lawrence Ramsey | 2024-06-28 14:27:08 -0500 Add another Xom dry fountain message. -------------------------------------------------------------------------------- 798c8b9 | gammafunk | 2024-06-28 10:23:09 -0500 fix: Use the correct number of altars in a temple (nicolae,Namsan) For mainiacjoe_temple_bowtie_tessellation, this map actually has 19 altars, so tag it correctly as such. -------------------------------------------------------------------------------- 3f2e493 | DracoOmega | 2024-06-28 12:11:06 -0230 Change/improve how Aphotic Marionette works somewhat. Targeting this ability now calculates how many spells each visible monster could cast *at the present moment*. This accounts for whether other enemies are in range of their conjurations (and not immune to them), whether the player is able to be buffed by any buffs they may have (accounting for stasis or already having these buffs), and several other things. This should make the ability feel more reliable, as it should always be able to cast as many spells as it claims it can. The ability also no longer requires an audience if the monster has spells that would function without one (ie: you can have a monster Haste you without needing some random bystander in sight.) This also means that since Marionette should *always* do something, it no longer needs the weird piety cost system where most of the cost was deducted only *after* a monster did a thing (but would be partially-refunded otherwise.) I remain concerned at how wildly effective this version is against certain enemies, like Zenata. Requiring another enemy around diluted her Sheza's Dance casts with Resonance Strikes (and often meant she had her own weapons for distractions against your weapons). I am not currently sure how to dilute the strength of Marionette in its best cases without making it too unappealing in more average ones (nor how to cost it based on how much it *did* via any sane formula.) However, players were regularly confused by facets of the old method and this should be a lot clearer by default, so let's go with this for now. -------------------------------------------------------------------------------- 1ec7147 | DracoOmega | 2024-06-28 12:11:06 -0230 Make summons gained via Marionette appear around the player Instead of around their nominal summoner. This is intended in part to make it less trivial to immediately kill a summoner with their own summons (though I am unsure how much it helps, since the player could be near them in the first place.) -------------------------------------------------------------------------------- a5e027c | DracoOmega | 2024-06-28 12:11:06 -0230 Fix Marionettes not appearing to have the right alignment to some spells mons_aligned() worked properly, but wont_attack() did not. Spells are entirely inconsistent as to which they use, so some spells would not consider the marionette to be on the proper team. -------------------------------------------------------------------------------- a5c9273 | DracoOmega | 2024-06-28 12:11:06 -0230 Fix spells cast by Marionettes caring about their own health (ie: they would be reluctant to cast attack spells in ways that could also hurt them, when they were explicitly intended to be indifferent to this fact.) -------------------------------------------------------------------------------- f1b019f | DracoOmega | 2024-06-28 12:11:06 -0230 Fix monster Eruption cast message always claiming it's aimed at the player -------------------------------------------------------------------------------- a3775c4 | DracoOmega | 2024-06-28 12:11:06 -0230 Fix being able to aim Grave Claw at yourself (Which would immediately crash) -------------------------------------------------------------------------------- 8e808ea | DracoOmega | 2024-06-28 12:11:06 -0230 Fix capitalisation in Grave Claw spell description -------------------------------------------------------------------------------- 94106ed | DracoOmega | 2024-06-28 12:11:06 -0230 Fix missing break statements (Waxwing) Was requiring Grave Claw to be recharged for Starburst to be castable. -------------------------------------------------------------------------------- a9aa173 | regret-index | 2024-06-27 22:43:35 -0230 Silently clear player tile clouds when Xom stops time Since there's not much counterplay to Xom's mass-paralysis otherwise, and also since there's not too many other ways to actually take much damage when everything on screen's paralyzed. (Aside from lethal poison? Well, when worshipping Xom, one probably should have been a little more cautious enough to cure such quickly when other possible actions like divine lightning or hostile summons could have been called instead.) -------------------------------------------------------------------------------- ca161ac | regret-index | 2024-06-27 22:43:35 -0230 Loose odds and ends vault review Not too much of note, but still noted down amongst other tweaks: * Fixed up evilmike_haunted_forest having living tree tiles amongst the the dead trees. * No longer make the serial_ice vaults place inexplicably harmless enemies in D:12-15 or Vaults:1-4. * Marginally increased the weight of non-encompass Depths entry vaults that are themed vaults with Depths entry configurations; we should embrace more of D:15 being notable with more vaults in the same sort of arrangement, honestly. -------------------------------------------------------------------------------- 0121280 | regret-index | 2024-06-27 22:43:34 -0230 Fiery and icy Swamp end vault fusion I've never been much of a proponent of leaning on threats not based on a branch for branch ends when said branch ends are supposed to be the dramatic finishing point of the branch in question. It dilutes the branch identity and threats already present in a branch to swerve over into a different direction with only the loosest of collective theme justifications, and frequently doesn't even try to connect them back to the monsters present. If we need more branch end variety, plenty can be done while still trying to connect to what's present and with new layouts. Sometimes this guests-work has been retroactively made to make more sense (like pharoah ants in Spider for the death scarab end), but I'd like to continue to keep a stern eye on such spaces regardless. One of the most obvious manifestations of this is in Swamp, which despite getting notable enemy updates in 0.14 and 0.26, has had a historical obvious emphasis on looking elsewhere for more threats (due to design patterns built up from a decade and a half ago prior to either update). I've pared this back down a little over time for other concerns, and will continue it here by merging two other troublesome vaults- swamp_fiery and swamp_icy. These two have had issues for a while- the former's unrestrained clouds fry most of what's inside before being fought (and for a long while was at the bottom of threat level due to using, like, steam dragons and fire crabs for a rune vault), while the latter relies heavily on slow melee monsters and has extremely little connection to Swamp itself beyond modified hydras. This merger emphasizes a few different points: * Having both themes provides enough variety to still work with both the old iconic monsters and regular Swamp spawn. The half of present monsters that aren't hydra simulacra are instead branch spawns that still work with simulacra, like swamp dragons and will-o-the-wisps. * The clouds and walls have been reworked to make the former more organized and the latter thicker, enough to reduce the likelihood monsters will wake up and wander into damaging internal flaming clouds before actually approaching the vault. It also makes the external freezing clouds mildly easier to move past, to focus more on other internal threats. * In an experimental difference from other swamp layouts, combining both layouts is meant to emphasize several large open chambers rather than dense singular cave-boxes or a long corridor of spawns. Let's see how such revisions work out. The old two vault layouts might get used eventually for more elemental game-long vaults later on, but the vault's sort of combining the two shapes together, so it's fine for now. -------------------------------------------------------------------------------- 88ce094 | David Lawrence Ramsey | 2024-06-27 20:10:26 -0500 Actually remove Pakellas altars for version > 34. Formerly, it was moved upward for that case, but not removed as it was everywhere else. -------------------------------------------------------------------------------- ef57fef | DracoOmega | 2024-06-27 19:38:18 -0230 Don't allow casting Soul Splinter with Oka (elliptic) Just an oversight. -------------------------------------------------------------------------------- 1c6beb5 | DracoOmega | 2024-06-27 19:38:18 -0230 Change how Grave Claw recharges There were numerous concerns raised that the original recharge behavior of Grave Claw (a single use which was restored after 2-3 kills) was troubled. It could place too much emphasis on the order that fights were encoutered or prompt retreating from threatening fights to go recharge a shot elsewhere first. I don't want the spell to feel tedious, but I *do* want to emphasize the 'harvesting death' flavor of it while presenting a unique consumable-ish mechanical identity. After some discussion, it was decided to try this instead: The player can now stockpile up to 3 charges of Grave Claw at once. Each of these charges takes a random 4-6 living deaths to recharge. To avoid showing a status light at all times for the state of a spell the player will eventually stop caring about, the number of remaining charges is listed in other ways: -When you are aiming the spell, the targeter line says how many charges are remaining. -When the spell is examined, it will say how many charges remain. -When the player is out of charges completely, there is still a -GClaw status light. -When the player expends their last charge upon casting it, there is a message printed. Hopefully these are comprehensive enough while being inobtrusive. When the player first memorises the spell, they gain one charge of it immediately (to prevent starting necromancers from learning a spell and then being unable to use it at all for several battles). Save files being upgraded from an older version will also gain one charge if they already had the spell. Let's see how this feels. -------------------------------------------------------------------------------- 25ed1c7 | Nicholas Feinberg | 2024-06-27 15:04:47 -0700 Fix another bug -------------------------------------------------------------------------------- 29f3d31 | Nicholas Feinberg | 2024-06-27 15:02:52 -0700 Silence a warning -------------------------------------------------------------------------------- e2cddfa | Nicholas Feinberg | 2024-06-27 15:00:58 -0700 Fix: not every attack should eviscerate (Epsilon) C++ is a good language. -------------------------------------------------------------------------------- 76dddd7 | David Lawrence Ramsey | 2024-06-27 12:10:28 -0500 Add a few more glowing_adj entries to colours. -------------------------------------------------------------------------------- fdff619 | DracoOmega | 2024-06-27 03:06:29 -0230 Don't let your shadow cast Shadow Puppet out of combat (Acrobat) Being the only shadow spell that didn't require a target, it was possible to repeatedly cast summon spells outside of combat to fish for shadow puppets - especially since low level summon spells could still produce strong allies this way if the player's xl was reasonably high. Worse, because the shadow triggers <25% of the time, you could be encouraged to keep rerolling until you got lucky enough to get several in a row before running out of MP. Let's curtail this possibility by only allowing the spell to be cast in combat (like other shadow spells effectively already were). -------------------------------------------------------------------------------- f798c56 | DracoOmega | 2024-06-27 03:03:04 -0230 Give Dithmenos melee shadows better sleep stabs A common situation with Dithmenos stabbers is that their opening attack kills a sleeping monster and their shadow immediately attacks another sleeping monster which the player *could* have dispatched the following turn, and merely wakes it up without much damage done. This feels bad. But forbidding shadows from attacking sleeping outright enemies would feel bad in so many other situations. Instead, let's try to make this feel less bad by letting the shadow just stab the sleeping monster themselves. Monsters already get a large damage multiplier when attacking a sleeping target, but they can always roll low. Good player stabbing weapons get some guaranteed damage, so let's give that to shadows also: if and only if they are attacking with a short blade or felid claws. (I am unsure whether to include the Hood of the Assassin in this condition. Shadows normally don't care about anything the player is wearing beyond their weapon, so it would be inconsistent with that. But not doing so may cause a similar feelsbad situation - just a rarer one. I could be pursued otherwise.) -------------------------------------------------------------------------------- 8a0c661 | DracoOmega | 2024-06-27 02:54:02 -0230 Make slept monsters unable to wake before the player's next turn There have been recurring bugs over the years of various methods of putting monsters to sleep being immediately broken (ie: a monster being woken up by the very thing that put them to sleep), and sometimes-brittle code trying to patch over specific instances of this. This is an attempt at a more general solution. Monsters which are put to sleep via (hopefully) any method are now immune to being woken up by (hopefully) any means until the player's next turn. This automatically addresses special cases added to handle Creeping Shadow procs from Ensorcelled Hibernation, should fix chaos weapons waking up monsters that they just put to sleep, and possibly other things. This does have the effect where player allies can attack a sleeping enemy for bonus damage without waking it up - theoretically multiple times in a row. In practice, I doubt this will be a real problem. Most enchanter types are not using allies to any real effect at the same time they are sleeping things (and would have just one-shot the sleeping enemy with their next attack anyway). It may come up a little more often with chaos weapons and Dithmenos, but that seems fine if it does. (It also has the positive side-effect of removing feelsbad situations where a monster that the player put to sleep is woken up by some immediate incidental damage they did not anticipate.) One may note the 'hopefully's up there. Monster behavior code is a tangled beast and I am not at all fully confident there isn't some way to accidentally wake a monster up despite this. We shall see. -------------------------------------------------------------------------------- f7cbc37 | DracoOmega | 2024-06-27 01:03:34 -0230 Allow Vehumet's range bonus to apply to the player's Spellforged Servitor The servitor is explicitly casting the player's own spells (and is the one summon that Vehumet explicitly supports), so it seems fair to me that it shares the player's own range with them as well. -------------------------------------------------------------------------------- 1ed0126 | DracoOmega | 2024-06-27 01:03:34 -0230 Allow Vehumet range bonus to affect a few more spells IMB, Flame Wave, and some other player-centered AoE already benefited from an effective radius extension via Vehumet. This expands that to include Hailstorm, Frozen Ramparts, and Eringya's Toxic Bog, which had previously been excluded. This seems fairly harmless, arguably more consistent, and importantly probably more fun. -------------------------------------------------------------------------------- 602a2ca | DracoOmega | 2024-06-27 01:03:34 -0230 Make Vehumet's 2nd gift be level 2-3 instead of 1-2 (elliptic) There's already a fair bit of randomness in when the player can be offered Veh gifts (compounded by randomness in when one finds Veh altars in the first place), and getting a level 1 spell for your second gift is almost universally sad - even if worshipped fairly early. Let's be a little more generous. -------------------------------------------------------------------------------- 6009e8e | DracoOmega | 2024-06-27 01:03:34 -0230 Greatly boost the effectiveness of heal-from-kills at low piety While the ability to heal HP/MP from suitable kills was nominally given at 1* for worshippers of Mahkleb, Vehumet, and TSO, the chance of it actually happening on a suitable kill at that point was less than 1%. It basically didn't *really* exist until a decent bit more piety was gained. Since the amount of healing itself was already based on the HD of what was killed (making it naturally weaker in the earlygame anyway), it doesn't need to be practically useless at first. At the same time, it meaningfully scaled at piety values above 6* and there's been some efforts over the years to make piety-based things actually max at the highest level the player can see. This commit rescales the trigger chance to be 30% at 1*, maxing at 80% at 6*. This is slightly below the old theoretical max (85% at 200 piety), but a combination of piety decay and diminishing returns on piety gain and actually *spending* piety on things meant that one wasn't likely to ever stay at 200, and so this is hopefully - at most - a tiny reduction in practice. (This may be slightly less true for Vehumet, who doesn't have any way to spend piety, but I still doubt it's significant. If so, these can be decoupled from each other.) -------------------------------------------------------------------------------- 3d6ac61 | David Lawrence Ramsey | 2024-06-26 18:16:25 -0500 Reorder spells in Trismegistus Codex. This fixes a test failure caused by Cigotuvi's Putrefaction's now being level 4. -------------------------------------------------------------------------------- 3c34056 | David Lawrence Ramsey | 2024-06-26 18:08:48 -0500 Fix spelling. -------------------------------------------------------------------------------- 3947c7c | David Lawrence Ramsey | 2024-06-26 18:08:20 -0500 Fix punctuation. -------------------------------------------------------------------------------- cefdf76 | David Lawrence Ramsey | 2024-06-26 18:08:16 -0500 Fix naming of #ifdef'ed-out enum. -------------------------------------------------------------------------------- b2846a8 | DracoOmega | 2024-06-26 20:35:50 -0230 Fix Bestow Arms animation being visible out of LoS (regret-index) -------------------------------------------------------------------------------- d6a4db0 | DracoOmega | 2024-06-26 20:35:50 -0230 Fix tag upgrade build -------------------------------------------------------------------------------- 69d1a47 | regret-index | 2024-06-26 20:26:31 -0230 New Xom action: haste / slow / para _everything_, including you Other gods Xom can reasonably easily make jokes about: Chei. This categorized-as-a-bad action has Xom give the same duration (give or take time slices and base delay) of haste, slow, or paralysis to both the player and everything else in sight. Because of this symmetry, it's less terrible than it seems, yet still serves a seperate purpose from just affecting the player / individual monsters: it changes the usefulness of subsequent summoning or necromancy from either side, it lets other monsters wandering in be more or less noteworthy, and it lets damage-over-time effects still tick down on the paralyzed. Should be fine as another simple Xom action, and gets to bring up the divine dramatics of e.g. bending time into knots. (This does occasionally screw over formicids with mass haste, but they also get the benefits of mass slow and mass paralysis. Xom's summon and banishment rescaling already made formicid chaos knights far less troubled, anyway.) Note: I opted not to absolutely flood the message log with every single last enemy in sight being affected. If other devs feel like this should be done for consistency's sake or to make it be more obvious in the message log, they may go ahead and change this. -------------------------------------------------------------------------------- afaae9a | regret-index | 2024-06-26 20:16:48 -0230 Add Ambrosia to Xom's potion list Xom loves confusion and provides both healing and magic potions, so it seems entirely appropriate. It gets half weight to match with the other double-sided potions like attraction and berserk, though it'll probably be less bad than those nonetheless. -------------------------------------------------------------------------------- c695c3f | regret-index | 2024-06-26 20:16:47 -0230 Let Xom decorate with more than just altars While Xom being vain is good for characterization and jokes alike, we've got a variety of other options at this point that reasonably allow for some other jokes. Xom can now rarely randomly place caches of fruit, caches of meat, open or closed doors, and entrances to the Abyss, on open floor in the same fashion they place altars to Xom. The caches are entirely decorative, the doors provide a weird occasional LOS manipulation tactical benefit but are rarely relevant for cutting off monsters so they instead get to look nicely absurd, and the entrances to the Abyss probably won't matter too much versus Xom being able to banish directly or getting to the normal Depths entrance but does allow for a little bit of a dramatic yet entirely harmless effect on the nearby environs. With there being more terrain changes besides altars, this also lowers the chance of Xom summoning friendly butterflies a bit to show those off, since the other summon effects can now also include butterflies. -------------------------------------------------------------------------------- a3c6b23 | regret-index | 2024-06-26 20:16:47 -0230 New Xom action: surround with toadstools / demonic plants Xom hasn't gotten new effects in eight years, and has in fact mostly lost effects due to the miscast simplification in 3e08ee0. With Xom being a little less likely to directly kill the player earlier on after db1107a and b92a340, there's a fair bit more space to try and actually introduce more upsides and more downsides to effects compared to prior. It's a bit difficult to make too many jokes that don't feel too meta, but angling for some of what many other gods have, since they've changed a lot more than Xom has in the past eight years, is a reasonably easy angle to work with. This new effect makes a ring of toadstools or demonic plants with a radius between two to four, biasing towards the plants and radius 4 with XL. We've still kept around toadstools around despite not using them much (maybe they should go in more Sewers?), but they serve fine enough as uniquely frail firewood, and demonic plants are entirely in the spirit of Xom's still-somewhat-demonic focus. Mechanically, this effect may block off player retreats, or it might prevent large groups of enemies from properly surrounding the player as they fight / try to teleport away. Reasonable enough for one of many upcoming bits of spice, and allows a few lines riffing off of Fedhas (alongside some other silly joke lines). -------------------------------------------------------------------------------- 5113bae | regret-index | 2024-06-26 20:16:47 -0230 Give Sif Muna's Channel Energy back its success message This was lost in 942ac9c, and I feel like it's better for consistency's sake to make gaining all buffs actually provide a message in the message log; by the time one can make it much reliable, it's only one message across five or six turns of spellcasting anyway. -------------------------------------------------------------------------------- 6dbd6f5 | DracoOmega | 2024-06-26 20:15:36 -0230 Fixup a renamed enum that got missed when squashing -------------------------------------------------------------------------------- c9b6202 | DracoOmega | 2024-06-26 20:04:41 -0230 Fix rings of wizardry and amulets of regenMP having a stash tag of {buggy} -------------------------------------------------------------------------------- 2c54b8f | DracoOmega | 2024-06-26 20:04:41 -0230 Cigotuvi's Dreadful Rot -> Cigotuvi's Putrefaction (level 4 Necro/Air) Cigotuvi's Dreadful Rot was a spell in an awkward place. It could be used to open up small gaps against enemies in corridors in the earlygame, but it was found only on the background which already had Call Imp and Blink, both of which can do this more flexibly (and actually be a primary kill tool, in the case of Call Imp). You could sometimes use Mephitic Cloud to confuse enemies into it, but it was unclear how much help you needed against an enemy that was already confuse-locked. So let's try a different and higher-level take on making miasma clouds. Cigotuvi's Putrefaction is a smite-targeted level 4 Necromancy/Air spell which must be cast on a living monster that is at least 'heavily wounded'. Repurposing the old cloud spreader code (last used about 10 years ago, but never removed) it causes miasma clouds to billow out from this monster over the next several turns. These clouds start as harmless 'faint miasma' that exists to give the player a better idea of the area of effect before turning into proper miasma the next turn. Faint miasma will never turn harmful so long as the player themselves is standing there (so no matter what terrain you create the clouds on, they won't hurt you - though it's still possible to surround yourself!) The spell has a fairly significant draining cost, but this cost itself is heavily reduced by spellpower. (Increasing number of clouds and cloud duration via spellpower felt like it ran the risk of sometimes making the spell harder to use instead of strictly better.) Let's see if Corpse Rot the Fifth (Sixth?) feels in a better place. -------------------------------------------------------------------------------- bfa4c90 | DracoOmega | 2024-06-26 20:04:41 -0230 Don't absolutely forbid monsters from stepping into miasma Unlike essentially every other harmful cloud in the game, no monster that could be affected by miasma would *ever* step into it. Even mindless monsters who explicitly will walk into any other type of cloud, no matter how injured they are, would stop dead in their tracks in front of miasma. This made using some miasma-related effects as a player somewhat awkward. Either it was too hard to convince anything to stand in it or it could be used as a weirdly reliable obstacle even to endgame monsters that would barely be harmed by it. Let's try just making the logic use the same hp-based check it does for other damaging clouds in general. -------------------------------------------------------------------------------- c0b93f2 | DracoOmega | 2024-06-26 20:04:41 -0230 Buff / unbreak miasma cloud effects versus monsters Due to a seemingly innocent change in 3abaafb9f6336d86ed529b034a35b75a16c8f4ec that tweaked the formula for slow duration from BEAM_SLOW versus monsters, miasma clouds went from slowing monsters for ~10+ turns to exactly 1 turn. (This is because the fake beam miasma used to apply slow had an ench_power of 0, which previously gave a slow duration of 0 and now gives a slow duration of 1. Except 0 is special-cased to use the 'default' duration of an enchantment as specified in mon-ench.cc, which was actually something like 10 times longer...) This gives miasma slowing an explicit duration again (bypassing any beam nonsense), as well as applying additional impact damage to monsters. (Unlike against players, miasma clouds applied identical poison and nearly identical base damage to monsters as regular poison clouds. Since monster poison stacking is weird, rather than try to poison them harder (which would barely matter) apply additional impact damage if they fail their rPois check as a proxy for how much scarier they are supposed to be than poison clouds). -------------------------------------------------------------------------------- 3d5deab | DracoOmega | 2024-06-26 20:04:41 -0230 Make necromancers start with a dagger Now that their level 1 spell will often involve them also meleeing the target before killing it. -------------------------------------------------------------------------------- 2685a3d | DracoOmega | 2024-06-26 20:04:41 -0230 Add Grave Claw (level 2 Necromancy spell) This is partially intended to make Vampiric Draining no longer the singular damage tool a necromancer relies on before Animate Dead comes online, and also as a relevant replacement for Cigotuvi's Dreadful Rot in the Hedge Wizard book, where I think it may also play interestingly. Grave Claw is a smite-targeted direct damage spell that does physical damage and inflicts a very short-term Bind effect on a monster. It can be fired while on the other side of your allies (allowing it to play well with Soul Wisp - and sometimes help it get an extra hit on a monster if the wisp spawns on the other side of it), can damage rN-immune targets, and even does more upfront damage than Vampiric Draining (though checks AC). With one important stipulation: it cannot be recast until you have killed 2-3 living/zombifiable monsters. This makes it a situational tool that can help equalize otherwise difficult fights, but can never be the main way you deal with anything. I think a spell directly relating to harvesting deaths is good flavor for early necromancers to have, especially now that their level 1 spell no longer does this. It helps with hostile undead (while not preventing them from being an overall bad matchup) and I think it presents some interesting decisions. It does overlap with Vampiric Draining in several ways, but I think there are enough distinctions that this will improve the gamefeel of their kit as a whole. (Hedge Wizards can also benefit from a more impactful spell in their necromancy slot, and they too have an ally to synergize with it.) -------------------------------------------------------------------------------- c2cd7fe | DracoOmega | 2024-06-26 20:04:41 -0230 Replace Necrotise with Soul Splinter Necrotise is a perfectly functional damage spell for early floors, but the skeleton often feels like an afterthought; there's frequently nothing around for it to hit and it will usually be gone by the start of any subsequent battle. By the time this is less true, its damage is already starting to fall off. (Also: neither it nor Vampiric Draining can do anything to rN+ monsters, some of which are quite threatening to a background that is already considered a weaker mage start). There has been some desire for necromancer to have a more reliable 'ally' spell before reaching Animate Dead, but one that still clearly falls off past earlygame. Derived undead have some issues in that regard, with how they naturally scale with the monsters they are made from, so this is an attempt at accomplishing this goal with a new fixed ally. Soul Splinter is a will-resisted enchantment that breaks off a tiny fragment of a monster's soul into a Soul Wisp: a short-lived ally that will fixate on the monster it was extracted from (much like Haunt summons do at higher levels) though can stick around a short while afterward. A wisp can be created from any spectralisable monster and will spawn adjacent to it, also inflicting weakness on the monster for more or less as long as a part of its soul is out of it. Higher HD monsters will produce wisps with somewhat stronger attacks, but its health is always low. The beam-based targeting and unique monster placement should make it feel distinct from existing level 1-2 summons while remaining necromantic. It notably helps necromancer's bad matchup against ufetubi. The fact that it can spawn on the opposite side of a monster in a corridor to let the necromancer team up on someone is also relevant. Let's give it a try! -------------------------------------------------------------------------------- 4561910 | David Lawrence Ramsey | 2024-06-26 17:30:03 -0500 Use && instead of and. The latter is valid, but is harder to search for. -------------------------------------------------------------------------------- 6b5e21a | Nicholas Feinberg | 2024-06-26 15:13:30 -0700 Fix missing space (SallyRoses) Minor oversight in 325916669285695f42df15ebe3e2019d2ac322ea. -------------------------------------------------------------------------------- 811786a | David Lawrence Ramsey | 2024-06-26 08:00:33 -0500 Add a few more glowing colour messages for Xom. One matches the one already used for singular items, and the other uses the newly revived glowing_adj. -------------------------------------------------------------------------------- 97836dd | David Lawrence Ramsey | 2024-06-25 23:17:07 -0500 Tweak orc priests' description of Beogh. New Beogh seems to have enough mercy to balance out their cruelty. -------------------------------------------------------------------------------- ec53afd | David Lawrence Ramsey | 2024-06-25 22:10:56 -0500 Fix typo. -------------------------------------------------------------------------------- dcf5b86 | David Lawrence Ramsey | 2024-06-25 21:30:03 -0500 Use @the_monster_possessive@ in one more place. -------------------------------------------------------------------------------- b399a4f | David Lawrence Ramsey | 2024-06-25 21:20:29 -0500 Add another glowing_adj to the colour database. -------------------------------------------------------------------------------- f9429a1 | David Lawrence Ramsey | 2024-06-25 21:17:44 -0500 Fix comment typo. -------------------------------------------------------------------------------- 4b1f165 | David Lawrence Ramsey | 2024-06-25 21:15:44 -0500 Add another monster alchemy miscast message. Based on the similar unseen alchemy miscast. -------------------------------------------------------------------------------- 57f3d0c | David Lawrence Ramsey | 2024-06-25 21:13:03 -0500 Simplify glowing dust miscast messages. -------------------------------------------------------------------------------- 2796a0d | David Lawrence Ramsey | 2024-06-25 21:09:50 -0500 Fix incorrect weight in monster miscast message. -------------------------------------------------------------------------------- 6d36d06 | David Lawrence Ramsey | 2024-06-25 21:03:47 -0500 Use @the_monster_possessive@ in more places. I missed these in the last update. -------------------------------------------------------------------------------- 0e839f5 | David Lawrence Ramsey | 2024-06-25 21:00:25 -0500 Add glowing colours to the color database. Pulled from the old scrolls of random uselessness. This partially reverts commit 00efbec225e6347ddd28a58c3dd2184177f46084. -------------------------------------------------------------------------------- 13f425c | DracoOmega | 2024-06-25 22:47:19 -0230 Fix a weird infinite loop with ally retreat orders (robotcentaur) Due to an oversight, after ally retreat behavior was refactored by 6316ba047ae8947d194a466133b87ee628c4d497 it didn't actually properly end once they'd reached their destination. Their behavior and patrol points would be set properly to end it, and then handle_behavior would silently reset their behavior back. I am frankly astounded that no one else reported this problem before now. But even worse: because it would set their patrol point to (0, 0) WITHOUT actually changing their behavior to not seek it out, anything that reached the end of where it was going would immediately attempt to travel to (0, 0). And apparently if you were on a level where the ally in question could get near to the level boundary (eg: Shoals), this would cause an infinite loop. I am not sure the specific cause of this, since it went away when the first bug was fixed; I assume it was because handle_behavior kept getting called to give the monster somewhere valid to move and it kept on insisting it should move to (0, 0). Anyway, it seems to work properly now. -------------------------------------------------------------------------------- bc0a3b0 | David Lawrence Ramsey | 2024-06-25 14:39:34 -0500 Add another Donald Dithmenos line. -------------------------------------------------------------------------------- be422a7 | David Lawrence Ramsey | 2024-06-25 12:51:01 -0500 Don't apostrophise grunting crab melee attacks. The monster name isn't used in those messages at that point, and getting the apostrophisation in that case is complex enough that it currently isn't worth the effort, and likely will be wrong because it involves fake language support anyway. -------------------------------------------------------------------------------- 3259166 | David Lawrence Ramsey | 2024-06-25 12:32:15 -0500 Make simple god and monster msgs apostrophise. By adding an extra parameter to the functions, so that "'s" isn't hardcoded everywhere the possessive is needed. The only instances of a hardcoded "'s" left are ones in string replacements that will likely break if changed (or if apostrophise()'s current logic is changed); the vast majority are now properly passed through apostrophise(). -------------------------------------------------------------------------------- e3f4e31 | David Lawrence Ramsey | 2024-06-25 09:29:39 -0500 Reflavour Terence. He's now a veteran of a war with the armataurs. Much of his dialogue has been rewritten to reflect this. -------------------------------------------------------------------------------- 5e8508d | RypoFalem | 2024-06-25 09:21:52 -0500 Update search help text for shops (PJRamaglia) ! is used to toggle between travel and view in the search window. ? seems to do nothing. -------------------------------------------------------------------------------- 4ceacca | DracoOmega | 2024-06-25 04:17:50 -0230 Fix a possible crash with Sign of Ruin (Dhd) -------------------------------------------------------------------------------- b4869f8 | David Lawrence Ramsey | 2024-06-24 01:27:40 -0500 Fix spacing. -------------------------------------------------------------------------------- 5c60499 | Nicholas Feinberg | 2024-06-23 22:39:25 -0700 Fix azure jelly xv display (Flugkiller) Any monster with two or more identical melee attacks *followed* by more melee attacks of a different type would fail to display the latter attacks. Oops. -------------------------------------------------------------------------------- 0fb811b | regret-index | 2024-06-24 02:21:51 -0230 Bump up Xom chaos upgrades and Xom-through-player spells * Make chaos branding a monster's weapon give a stronger range: +2 to +4, instead of +0 to +4. This should make it a bit more tempting to use chaos brands as Xom indirectly offers by consistently offering more enchantment on the weapons dropped afterwards, which continues to be in the proper spirit of Xom. * Give Xom Fulsome Fusillade at the near-top end of player spells they can cast through the player. While the presented list is mostly trying to avoid direct damage higher than OTR, it's also a random elements spell that inflicts random debuffs in random areas, which is extremely chaotic in a nice dramatic fashion similar to Chain of Chaos staying just above it. While there's a bit of jank in it running out immediately if one has next to no MP, that also works well as a joke Xom can pull on the player, and it takes so long to get to the point one can get enough tension to see the spell even non-spellcasters should have enough MP to work with anyway. * Give Xom's spells-cast-through-the-player a small amount of flat additional spellpower scaling to one's XL. Currently, such effects use a weird spellpower range based on how far one is away from the centre of piety, which makes Chain of Chaos and the various hexes options regularly fail to do almost anything against enemies for a later chunk of the game; the player's XL contributing to this should help with Xom feeling more noticeable later on as they currently struggle with. Since Xom is rarely a reliable god at the best of times and all of the spells are scaled directly to tension anyway, this shouldn't much worrisome a buff. -------------------------------------------------------------------------------- db1107a | regret-index | 2024-06-24 01:40:30 -0230 Scale Xom's summons to XL, introduce a lot more options For a god of chaos that has little restraint in choice or power, Xom is kind of dull in their choice of servants. Demons tiers 3 through 5 and some random shadow creatures both binds singularly demons too heavily to chaos and leaves out a variety of more fun and weirder options than what one will see plenty of in Orc or the branch they're already within. Alongside the old demon summons (and a few more demon summons at higher tiers), this adds a fairly large amount of various living and undead monsters themed around various themes Xom already focuses upon: relocation, confusion, mutation, variable summoners, chaotic natures, and so on and so forth. There's also a sparse amount of additional demons meant to preserve and extend the old demonic flavour, mostly aimed at demons not more obviously used by Makhleb or Nemelex. To help make it more plausible to parse such, there's also a decent chance to make given choices appear in pairs. Also, shadow creatures calls themselves will always get one of these manifold chaos options (and are slightly less common), to both make it a little less plain and because it's a little funny to see a given demon look lost in a swarm of Vaults humans and troll / taurs. This also adjusts the scaling of monsters chosen and placed: it is now impossible to meet any tier-3s on D:1 without Xom being bored or abandoned, while one will stop seeing tier-3s past lair branches. There is also a lot less of a chance to see over 6 or so monsters, outside of a couple of banding-designated monsters such as laughing skulls or dream sheep, since the overall pool is a lot more dangerous / strong later on than it used to be. This should mostly make it so Xom is much less likely to directly kill on the first few floors, but is always providing some degree of potential threat later on instead of hitting a tier-3 wall or solely relying on shadow creatures. While summoned allies are also scaled to be notably strong later on, getting more than one comes with quite a short duration by default, so it's just a per-fight uncontrollable perk. TODO: This is still somewhat rather limited in decent options for lategame and extended characters, in trying to not overlap too hard with Lugonu, Makhleb, Jiyva, or using holies. Maybe Xom briefly summoning a distorted bound soul of a slain unique as an ally could pass as a joke at Yred's expense? Maybe we just need a few more Depths, Zot, and Pan enemies. -------------------------------------------------------------------------------- 73ecd75 | Nicholas Feinberg | 2024-06-23 17:52:59 -0700 Remove unused god passive messages These were added in 5f1ddaaadb3 (2015) and last seriously touched in fc596c4910b (2017). They are a grand and noble project which no one has taken up, and which has caused a great deal of dev confusion as a result. (E.g. people changing these messages, which do nothing, instead of the real ones.) They're also a bit rotten, I suspect. Let's cut them for now. We can re-add them whenever someone has the steam to take this on again. -------------------------------------------------------------------------------- 6d26cd8 | Nicholas Feinberg | 2024-06-23 17:46:48 -0700 Fix thresholds for kill god passives Match messaging in religion.cc, etc. -------------------------------------------------------------------------------- bf6a2ca | Nicholas Feinberg | 2024-06-23 17:45:35 -0700 Revert "Make Veh MP restore better at low piety (DracoOmega)" We're going to make a better version of this change later. This reverts commit c39d94d1f1a73ce59934977991b5215bdd183d79. -------------------------------------------------------------------------------- c39d94d | Nicholas Feinberg | 2024-06-23 17:34:18 -0700 Make Veh MP restore better at low piety (DracoOmega) There's some feeling that this is too unimpactful early on. -------------------------------------------------------------------------------- 950dbd3 | Nicholas Feinberg | 2024-06-23 10:15:01 -0700 Maybe fix gem mimic bugs Don't let gem mimics block real gems from breaking. Also, always show shattering messages for *on-map* gems, even if more_gem_info is false. That setting is only supposed to hide it when gems shatter *while in your inventory*. -------------------------------------------------------------------------------- 6ea4a1c | regret-index | 2024-06-23 00:45:33 -0230 Further additional monster spell icons With over 60 monster spell tiles done for 0.32, we're roughly at about 27 monster spells lacking distinct icons. Ideally, that latter number would be 0, but it's taken plenty enough to get to this point. Sources: * Chain of Chaos: Sastreii's Manifold Assault and snw-0's Mass Confusion. * Chaos Breath: snw-0's Freezing Cloud's icon. * Conjure Living Spells: snw-0's Recite icon and hellmonk's recolouring of ontoclasm's living spell icon. * Doom Howl: snw-0's summoning ring and roctavian's Shadow Fiend tile. * Flaming Cloud: snw-0's standard cloud icon. * Flay: Denzi's flayed ghosts. * Funeral Dirge: snw-0's Might icon, Ultraviolent4's Swiftness icon, CanofWorms's Fugue of the Fallen icon, and flodiebold's adjustment of the degeneration potion icon. * Harpoon Shot: roctavian's Stone Arrow and PleasingFungus's Lesser Beckoning. * Holy Flames: roctavian's Ring of Flames and snw-0's Swiftness. * Spit Lava: Denzi's Spit Poison and roctavian's Stone Arrow. Also, mirrored the various dragon / draconian breath / spit tiles to face right rather than left, to more closely match the direction the majority of other conjuration icons are oriented. -------------------------------------------------------------------------------- 6d3ed6f | DracoOmega | 2024-06-22 04:53:11 -0230 Quick stopgap measure to fix webtiles flashes sometimes being fully opaque For unclear reasons that I have been completely unable to reproduce, flashes for some players in webtiles sometimes become completely opaque instead of transparent. Even worse, since this applies to the constant screen effect from berserk, it can make the player completely unable to see the battlefield for the entire duration of the effect. This behavior is inconsistent, and seems to sometimes go away on reloading, but given that we can't expect players to know or do this, I've attempted to disable the only place I can see that allows for variable alpha transparency in flashes (ie: any value other than hard-coded 100/150). This will result in the screen effect for blind being a bit overly loud, but hopefully this is just a short-term measure until someone can figure out what the real problem is. (I mean, hopefully it even works - it's hard to test a fix to a problem I cannot reproduce...) -------------------------------------------------------------------------------- b5a8b84 | Aliscans | 2024-06-22 01:44:54 -0230 Mark transporter destinations as known on entering a fully_mapped level This lets the player use travel commands to reach an altar in hellmonk_temple_divided_pantheon (where there are transporters between the stairs and most of the altars) without first visiting the transporters manually. brflag::fully_map now also prevents transporters from appearing in the level overview. On other levels this happens until the transporter is used. -------------------------------------------------------------------------------- c13c8a0 | NormalPerson7 | 2024-06-22 01:16:36 -0230 Use redefinable yellow for poison in hp-bar (mumra) This brings poison in line with all other HP/MP-bar colours. -------------------------------------------------------------------------------- 2bc2bbe | NormalPerson7 | 2024-06-22 01:16:36 -0230 Allow using black as a menu_colour for Webtiles inventory UI Previously, using black as a menu_colour option was never useful, because black text is always invisible on the black game background. However, we can now redefine the colour black, as of d719f66, opening up a 16th possible text colour to use with menu_colour. Upon trying to do exactly this myself, I discovered the Webtiles inventory UI implicitly, and apparently unintentionally, replaces black text with lightgray, regardless of what black may have been rebound to. Let's fix this, so we really can have a 16th colour. -------------------------------------------------------------------------------- d165621 | DracoOmega | 2024-06-22 00:51:52 -0230 Fix another invisible monster leak with Gavotte (Don't leak whether a visible monster will take damage only because it *hits* an invisible one.) -------------------------------------------------------------------------------- 9ce1d27 | NormalPerson7 | 2024-06-22 00:51:52 -0230 Don't leak invisible monsters when casting Gell's Gavotte (#3836) Fix the targeter revealing the locations of invisible monsters in line of sight when they would be hurt by the spell. Resolves #3836 -------------------------------------------------------------------------------- a7e19f9 | DracoOmega | 2024-06-21 17:50:32 -0230 Cut an extremely niche and mostly-pointless monster behavior If holies walked over a good god altar, or branch natives of orc, elf, or spider (but no other branches!) walked over the entrance/exit to their branch (only the entrance, in Spider's case) while wandering, they had a chance to set that location to their patrol point and stick near it. Did you know that? Of course you didn't. (Realistically, this mattered slightly more when monsters could spawn on top of stairs over time, and this could cause these monsters to cluster up around the place they came out of. But that behavior is itself long gone, so this can join it.) -------------------------------------------------------------------------------- 02cc6ff | DracoOmega | 2024-06-21 17:46:31 -0230 Remove a couple vestiges of armataur curl status -------------------------------------------------------------------------------- 2ec1b19 | DracoOmega | 2024-06-21 17:45:57 -0230 Fix all statuses coloring SH blue in webtiles After removing Divine Shield's effect on SH, this left SH-boosters with an empty string (even when there is no defined "sh" member at all...) which matches all other strings and made all statuses color your SH. I could reorder checks so that it never looks for "sh" here, but then it might surprise someone in future that tries to put another in and it doesn't work. This is still dumb, though. -------------------------------------------------------------------------------- cb7df17 | DracoOmega | 2024-06-21 16:52:48 -0230 Don't crash on reusing a shadow mimic with a non-ranged weapon If a player created a shadow mimic while wielding a non-launcher, then switched to a launcher and triggered a shadow shot, the code would assume it could reuse the existing shadow mimic and attempt to fire from whatever it was wielding (which crashed). Now we simply don't reuse a shadow mimic for shadow shoot unless it's wielding a launcher. -------------------------------------------------------------------------------- 8499d7e | DracoOmega | 2024-06-21 16:51:15 -0230 Prevent casting Starburst with LoS 0 (elliptic) Due to how the beams are handled, this would try to fire all 8 of them directly at the player instead (though at least it prompted you not to). It already was incapable of firing *beyond* your LoS. -------------------------------------------------------------------------------- 2ed6c15 | DracoOmega | 2024-06-21 16:50:25 -0230 Prevent Polar Vortex from affecting things beyond the player's sight range The fact that Polar Vortex could damage enemies beyond sight range was most obvious in combination with Primordial Nightfall, but was already attainable just by being a kobold (and especially one who also had a scarf of shadows). Now we simply cap the max vortex radius each turn by your current vision range. -------------------------------------------------------------------------------- 9a3e478 | DracoOmega | 2024-06-21 13:24:02 -0230 (Maybe) fix LoS range being semi-permanently reduced by Nightfall Or rather, it seemed like it may have been possible for Nightfall to end while the player's LoS was still less than normal, and then nothing would trigger a LoS range update to reset it properly. (It's not altogether clear to me how, but might involve low invo and high delay actions.) Now, simply call update_vision_range whenever Nightfall wears off, which should fix any similar problem. -------------------------------------------------------------------------------- b304cf6 | David Lawrence Ramsey | 2024-06-21 10:47:46 -0500 Tweak wording of Ruin status description. -------------------------------------------------------------------------------- 0ea0d47 | DracoOmega | 2024-06-21 13:02:35 -0230 Fix Dazzling Flash player tracer not working properly (dilly) Looking at the code I edited here, I wonder if mons_aligned should just be renamed to actors_aligned or something, to make it more obvious that it works just fine for players, too. -------------------------------------------------------------------------------- de231d1 | DracoOmega | 2024-06-21 13:00:48 -0230 Don't crash when dropping items into lava -------------------------------------------------------------------------------- 21e9c0a | DracoOmega | 2024-06-21 13:00:33 -0230 Add missing status description for Sign of Ruin -------------------------------------------------------------------------------- 6630b05 | DracoOmega | 2024-06-21 01:22:50 -0230 Remove some unused arguments -------------------------------------------------------------------------------- afa2d2b | DracoOmega | 2024-06-21 01:22:17 -0230 Fix a possible crash -------------------------------------------------------------------------------- 99379c9 | DracoOmega | 2024-06-21 00:28:40 -0230 Don't block Deathly Blight from slowing stationary monsters -------------------------------------------------------------------------------- 1438d3d | DracoOmega | 2024-06-21 00:28:40 -0230 Replace Kiku's Torment power with Sign of Ruin Kiku's Torment ability was widely considered a very niche aspect of their kit. While its effect could be situationally powerful, it was unpredictably dangerous to the player *and* duplicated a scroll effect. There were often already enough scrolls of torment in a game for the number of times one really wanted to use torment (unless the player was undead) resulting in it just not being a button people were very excited to have. So let's experiment with something else. The revamped Sign of Ruin was done with this possibility in mind; Soul Scholars were always Kiku worshippers, after all. By debuffing a group of enemies with something that scales directly off receiving melee attacks (and has no friendly-fire), it plays well with having lots of minions in play, but importantly does not actually *require* them. (An earlier draft used the old ally-buff version of Black Mark, but if Kiku hadn't deigned to give you actual ally creation spells you could use with Wretches, it was very sad). Kiku has the highest abandonment rate of any god besides Ignis (part of why their wrath was buffed significantly a short while ago). Maybe a little carrot to go with that stick? (The numbers are still pretty fuzzy, but I'll adjust them based on feedback if the net effect of having this ability feels good.) -------------------------------------------------------------------------------- 65f7e67 | DracoOmega | 2024-06-21 00:28:40 -0230 Split Black Mark (the spell) away from Black Mark (the mutation) Black Mark was the signature spell of the now Demonspawn Soul Scholars, but was usually unimpactful in practice and symmetry with the player demonspawn mutation of the same name limited its ability to be buffed without confusing people (and had historically resulted in its most significant effect being outright removed). An always-on player passive and a signature short-term status used only in extended have such different balance considerations that I think it better if they just be two entirely different effects. The DS mutation remains named Black Mark (and is unchanged). The Soul Scholar spell has been renamed to Sign of Ruin and its functionality changed (though with the same core mechanical thrust). The spell now places a debuff on a 5x5 area of enemies that will trigger each time those enemies are hit with a melee attack, applying heavy draining and then one of either slow, weak, or blind. This is basically an inverted (and more powerful) version of their old effect, with the antimagic removed (Warmongers in the same zone already have the anti-magic end of things as a focus). As a debuff, it can follow the player through an extended battle, but there are additional lines of counterplay if things get rough enough (ie: !cancellation works on it). It also works better with the subject of the immediately following commit. -------------------------------------------------------------------------------- c06f563 | DracoOmega | 2024-06-21 00:28:40 -0230 Make Divine Shield (hopefully!) more interesting TSO's Divine Shield ability was reasonably useful, but extremely plain. It gave you some more SH for a little while and... that was it. (It also arguably suffered a bit with the change to max-blocks-per-turn, where even tacking on a large SH number to a buckler still only let you block once per turn). Let's try something that might feel a little more exciting. Instead of giving you SH over a medium period of time, Divine Shield now causes you to have a 100% block chance for the next X attacks (for relatively small values of X without lots of invo). Ranged attacks will be reflected and melee attackers have a 50% chance to be briefly blinded. (The fun thing is that since TSO prevents stabbing entirely, blindness is actually purely defensive for once, instead of also offensive.) Guaranteed [block X times] has some potentially interesting ramifications in that it's much worse against rapid numbers of small hits and much better against slow singular attackers. (It's worth noting that shield blocks always happen *before* the player rolls to dodge, so many of those blocks might get eaten up by attacks that would have missed you anyway, making the raw number look potentially stronger than it actually is.) The blindness gives a potentially longer-term benefit even if the blocks get eaten immediately, but it does matter where you are standing when you activate it. In any event, the hope is that this makes earlier TSO a little more exciting and feels fun to use. -------------------------------------------------------------------------------- c1a0a21 | DracoOmega | 2024-06-21 00:28:40 -0230 Don't let TSO halos make allies easier to hit TSO offers some obvious support to a general summoner: halo makes summons more accurate and TSO's blessings will heal and extend the duration of summons. It feels slightly awkward in this context that it will *also* make all of your non-divine summons more likely to *be* hit. Let's lean a little more into generalist summoner support by making this not be the case. -------------------------------------------------------------------------------- 24f1105 | DracoOmega | 2024-06-21 00:28:40 -0230 Player blindness tweaks Move the min and max duration rolls from chaos/light beam blindness closer together, add a status description for webtiles, and let wizmode super healing remove blindness. -------------------------------------------------------------------------------- 7051e9d | DracoOmega | 2024-06-21 00:27:21 -0230 Simplify player Blindness formula, bugfix Increase of directly interacting with to-hit rolls relative to a target's EV (which make the status itself doubly ineffective against non-evasive targets and was more complex to describe), being Blind now causes the player to have a flat chance to miss with any attack or dodgeable spell - multiplicative with your baseline accuracy. At distance 1, this is a 30% miss chance, increasing by 15% with each tile of distance and capping at 90%. 90% is very high, of course, but for a temporary status effect that already has several forms of counterplay, it *should* feel tactically dubious to just punch through it at its worst. (This also fixes a bug with the previous implementation where *all* beams aimed at monsters would suffer blindness penalties relative to the player's location while the player was blinded - even if the player was not the one firing them!) -------------------------------------------------------------------------------- 33b0d0b | mumra | 2024-06-21 00:27:21 -0230 Revised formula for player blindness The old formula produced weird cliffs where chance dropped rapdily to 2% at an arbitrary distance, because we were scaling to_hit to *below* the target's ev where it is no longer possible to hit them. The new formula treats target ev as a "minimum" to-hit and scales to near that point instead, using a simple inverse formula to produce a curve. This provides a much smoother and more predictable change over distance while still meeting the basic requirements of "noticable in melee, but extreme at LOS range". The malus is move to pre_roll rather than post_roll as this adjustment *has* to be made before the roll when we still know the margin. Another surprise: it escaped my attention before that ev is applied wildly different in beam accuracy vs regular combat; for beams, the ev is randomised so the effective useful to-hit is 0 instead of the targets ev. So the old formula was already behaving quite reasonably for beams, but the new formula didn't: so now beams pretend that ev is 0 for the purpose of the blindness malus. Other minor changes: - Tweaked language to be less ambiguous - Removed blindness preventing you read scrolls - Don't specifically wake player up on blinding (the cause of the blinding will probably wake them anyway) - Slightly shuffle messaging and other side effects so they don't trigger if blindness didn't increase - Cleaned up an unused key and some unneccessary consts - Fixed some Lua interface comments - Split out the description function from the calculation so the same rendering can be used for beam targetting -------------------------------------------------------------------------------- 8b871bd | mumra | 2024-06-21 00:27:21 -0230 Blindness visual: fix missing function call -------------------------------------------------------------------------------- 624a869 | mumra | 2024-06-21 00:27:21 -0230 Monster version of Dazzling Flash Now we can blind the player in an interesting way, dazzling flash can be unlocked for player ghosts. The resist mechanism (chance depending on player XL vs spell power) is perhaps not great and should be reviewed. I gave the spell to Moon Trolls slightly arbitrarily as I was testing with them and it felt thematic so I left it in (it's a very rare encounter anyway). -------------------------------------------------------------------------------- 21430ed | mumra | 2024-06-21 00:27:21 -0230 Gozag wrath can distract players We now have an effect quite close to disraction, we can blind the player when they see the glint of gold. -------------------------------------------------------------------------------- 99f3dc8 | mumra | 2024-06-21 00:27:20 -0230 Use blindness for Zin wrath Zin recite can blind monsters so it seems reasonable to do the same to the player. -------------------------------------------------------------------------------- f578f06 | mumra | 2024-06-21 00:27:20 -0230 Add blinding to klown pie effects -------------------------------------------------------------------------------- 224f11b | mumra | 2024-06-21 00:27:20 -0230 Add blinding to possible chaos effects -------------------------------------------------------------------------------- f154754 | mumra | 2024-06-21 00:27:19 -0230 Add visual effect for blindness A flash overlay with opacity increasing with distance from player -------------------------------------------------------------------------------- 748e439 | mumra | 2024-06-21 00:27:19 -0230 Add an alpha channel to screen flashes Makes it possibly to specify a custom alpha level per tile for a screen flash. Not actually used anywhere in this commit, it's for blindness effect in forthcoming commit. -------------------------------------------------------------------------------- 99b0e4a | mumra | 2024-06-21 00:27:19 -0230 Make flashes consistent in webtiles Webtiles only had a full-screen flash but in desktop it was per-tile (with an optional hitfunc). The colour was already available on screen_cell_t so it was easy to just send this value in the cell json only if it changed, and this even saves redraws as we don't need to invalidate the entire map on a flash, only the changed tiles. And it's much easier on the eyes to boot. -------------------------------------------------------------------------------- 369c5d7 | mumra | 2024-06-21 00:27:19 -0230 Blindness: player accuracy debuff Monster blindness has been available in various forms for some time, but there was no equivalent player effect and obvious sources of blindness just Confused the player if anything. The new Blind status can be inflicted on the player with a wand of light and with atropa darts. While affected, your accuracy is reduced; by more the further away the target is. Mechanically your "to hit" roll is reduced by 10% for every tile distance (starting at your own tile) so maximum 80% for a normal race or 90% for Barachi. It affects melee and ranged, and also those spells that care about accuracy, so this has most effect on ranged combat. -------------------------------------------------------------------------------- be225da | mumra | 2024-06-21 00:27:18 -0230 Make "to-hit" display more accurate and consistent A number of improvements to the % displayed while targetting and also on monster information screens. The existing state of things was not ideal, and not made clearer by a lot of duplication of logic. In some places "to hit" was shown while in other places "to evade", meaning the player has to invert their mental arithmetic arbitrarily. This was supposedly intended to convey that some calculations did not take shield blocking into account but others did; however even this logic was not always applied and some cases of "to hit" were still pre-shield, and regardless there was no way for the average player to understand this distinction. (It also doesn't help that in code language, "to hit" is always the roll *before* accuracy penalties and shields take place). The calculations were also not done at all for thrown projectiles, and I uncovered a bug where due to a double negative, Umbra was actually *increasing* accuracy (but the % display got used the *correct* formula so nobody ever noticed). And different paths implemented different logic for displaying the % (melee vs throwing vs ranged vs spells). This commit fixes all of that; shields are now taken into account in all estimations, the language is changed to consistently "to hit", all forms of to-hit display are calling the same logic, and Umbra is actually penalising accuracy as intended. -------------------------------------------------------------------------------- a50e958 | DracoOmega | 2024-06-21 00:27:04 -0230 Finally give Bind a proper status icon (regret-index) Reusing the constrict icon was misleading since not only could monsters not escape from it under their own power, but it didn't inflict any damage or EV reduction. I don't know how it took me this long. -------------------------------------------------------------------------------- f8b37b1 | DracoOmega | 2024-06-21 00:27:04 -0230 Place monster non-adjacent to player at start of Duel (elliptic) It could be extremely advantageous to melee characters to always start in melee range of the target they picked (while simultaneously being worse for ranged characters, which Okawaru also explicitly supports). Now instead the duel target will be placed in a random spot in the arena, 3-5 tiles away from the player. The smallest arena wasn't actually large enough to do this if the player started at its centre, so we now randomize your arrival location to one of the corners there instead. I added a small bit of similar randomization to the second-smallest. The larger arenas remain unchanged. -------------------------------------------------------------------------------- d717340 | DracoOmega | 2024-06-21 00:27:03 -0230 Don't give the player an extra turn in a Duel if the target kills itself -------------------------------------------------------------------------------- 1b3ecf1 | regret-index | 2024-06-20 22:24:11 -0230 Adjust Kiku titles and the corresponding Ds enemy There's not been much adjustment of piety rank titles in the past decade unless the gods in question were adjusted, which has some silly and rather strange overlaps in contrast with one another as more and more titles are racked up between them. Kiku's is one of the strangest; we've got a 1* "Scholar of Death" as a stepping stone to greater power in contrast to Sif's 4* "Scholar", a 2* "Merchant of Misery" who has no connection to Gozag or any selling in Crawl, a 3* "Artisan of Death" who doubles up on the word death just in case one missed the theme of the god, a 4* "Dealer of Despair" unrelated to Nemelex, and a 6* "Lord of Darkness" unrelated to Dith. Most jarring is the occult symbol title at 5* that even beyond its unfortunate modern associations breaks the naming schema in nearly every way: neither "X of Y" nor a pairing of concrete job and suffering. This adjusts some (if not all) of Kiku's piety titles to focus a little harder on a particularly academic angle of necromancy (helping further distinguish from Yred's more ferverent faith angle), as well as deal with a variety of the prior mentioned matters. This naturally also comes with renaming (and retiling) the Demonspawn enemy that explicitly invokes Kiku and mirrors one of the available titles. These new demonspawn soul scholars are a little less dramatic in their new names, but add a bit more texture to all the intimidation and bluster attached to other unholy matters throughout Crawl (see also Nergalle and Xak'krixis)- it's also no more bland than the current corrupters. They could honestly do with a pretty significant buff on their signature spell anyway (which struggles immensely against extended player defenses), which would coincide well with this rename. -------------------------------------------------------------------------------- dbccd66 | DracoOmega | 2024-06-18 19:46:52 -0230 Fix Dith shadow mimic and Yred reaping chance not maxing at 6* The former seems to have been uncapped entirely, while the latter falsely believe piety_breakpoint(6) was 6* and not... 255 piety?? (I swear, I am just going to make that mistake in perpetuity) -------------------------------------------------------------------------------- ca6d56b | DracoOmega | 2024-06-18 19:46:11 -0230 Fix/adjust Blorkula the Orcula Being able to kill all of Blorkula's bats before he could reform was probably just a little bit too unlikely, and success was overly binary: if you couldn't kill all of them, there was no benefit to killing *any* of them. Instead, Blorkula will reform with HP missing for each bat lost below 4 (since he splits randomly into 4 or 5) - recovering with only 2/7th HP if only one bat remains. At the same time, the fact that Blorkula had a long cooldown before being able to split into bats a second time was a bit too opaque, and even some players who had killed him repeatedly did not realize. I have added it to the description and now also utilise the 'catching his breath' status to display the cooldown in the status line. I hope this makes it more intuitive. Since it should be a fair bit easier to kill Blorkula in a single fight now, I've minorly nudged up the stats of the bats themselves. (I expect he's still less dangerous overall.) Finally, this fixes a pair of bugs that could sometimes clone Blorkula. Due to erroneous bracketing, if Blorkula 'died' while out of the player's line of sight (or while invisible), bats would be created without removing the humanoid Blorkula (or even injuring it from the deathblow). The bats would eventually form into another Blorkula, resulting in two alive at once. This was exacerbated by timeout_enchantments causing Blorkula to blink randomly at the moment of death, if he was confused when he died (thus increasing the chance of dying out of the player's LoS). This should hopefully be working properly now. -------------------------------------------------------------------------------- f261964 | DracoOmega | 2024-06-18 19:34:16 -0230 Fix a crash with generating wizard apostles at very low power Their secondary spell could have power so low there was no valid spell to go in that slot, resulting in an infinite loop of rerolling. -------------------------------------------------------------------------------- f429392 | David Lawrence Ramsey | 2024-06-18 14:26:54 -0500 Add another ancestor name. -------------------------------------------------------------------------------- 9260dd1 | Isaac Clancy | 2024-06-18 10:56:04 -0500 Improve picking up part of a stack with the mouse -------------------------------------------------------------------------------- 8a41b72 | advil | 2024-06-18 08:41:50 -0400 fix: quiet some clang warnings clang now gives warnings on set-but-unused variables (including incremented ones that are never accessed). This commit addresses the ones it found. -------------------------------------------------------------------------------- 023c873 | David Lawrence Ramsey | 2024-06-18 02:16:18 -0500 Re-separate priestly god overrides (oops). So they don't fall through to non-priestly monsters. -------------------------------------------------------------------------------- e2b7767 | David Lawrence Ramsey | 2024-06-18 02:12:02 -0500 Simplify god override logic a bit. -------------------------------------------------------------------------------- 523ca51 | NormalPerson7 | 2024-06-17 21:32:16 -0500 Rebalance wanderer good staves skill, remove decent staves skill For a while now, staves skill has been completely unbalanced for wanderers, as the wanderer background treated a +0 quarterstaff as if it was equivalent to a +0 falchion/hand axe/mace/short sword, when it is considerably better. This commit makes a +0 quarterstaff the good quality reward for staves skill (instead of a +2 quarterstaff). I have spent some time considering a suitable replacement for decent staves skill, including a random magical staff, a magical staff matching possible magic skills, or simply a -2 quarterstaff. But magical staves are probably a little too niche, and I consider that it might feel bad to start with a -2 unbranded weapon, even if in reality it's okay. So I've just decided to remove decent staves skill as a possibility. After all, there is no staves option for the backgrounds that get a choice of a decent weapon (Mo/Be/CA/CK/Wr/Re), so why should there be for wanderer? [Some data: from a sample of 1,000,000 HuWns, good staves skill occurs about 4.2% of the time, and decent staves skill occurred before this commit about 4.8% of the time. After this commit, other decent weapon and magic skills are each picked about 5.1% of the time.] -------------------------------------------------------------------------------- 0b7e420 | NormalPerson7 | 2024-06-17 21:32:16 -0500 Slightly improve wanderer stat assignment This is all very theoretical, and wanderer stat assignment is ultimately overwhelmingly random. Make polearms and staves always give an increased chance for strength (instead of coinflip str/dex) and make evocations give an increased chance for a random stat (because all three stats are entirely irrelevant to evocations). This leaves all weapon skills benefitting their damage-increasing stat except throwing and UC (which I feel thematically have much better claims at being random str/dex). Fighting and shapeshifting appropriately give random str/dex. From a sample of 1,000,000 both before and after this commit, this changes the average str/int/dex assigned by the background for HuWn from 3.55/3.75/4.69 to 3.75/3.89/4.35. The objective is very much not to reach 4/4/4 as species tend to give more str and backgrounds tend to give more dex on average. But this seems acceptable to me. -------------------------------------------------------------------------------- 4b47c47 | NormalPerson7 | 2024-06-17 21:32:16 -0500 Force wanderers to get three unique skills, reorder skill adjustments Put the adjustments to wanderer's skills earlier in the wanderer process, so that skills are rerolled instead of being assigned to SK_NONE whenever incompatible (shield + 2-h weapon) or duplicate skills are chosen. This allows wanderer stat assignment to use the reassigned skills, and it forces wanderer to actually choose three unique skills, instead of just abandoning one of them if a duplicate was picked and replacing it with random skill levels and a decent consumable. I have retained the behaviour that you can't get two pieces of armour, and that the second skill out of armour, dodging and decent stealth gives a decent consumable instead, but now assign the skill levels normally instead of ditching the decent skill altogether. -------------------------------------------------------------------------------- 47c2c9e | David Lawrence Ramsey | 2024-06-17 20:28:14 -0500 Update documentation for monster god YAML. -------------------------------------------------------------------------------- c5d1add | David Lawrence Ramsey | 2024-06-17 12:09:03 -0500 Set monster gods in YAML. _place_monster_set_god() is now place_monster_maybe_override_god(). It can override the YAML-set god (orc Beogh-worshippers and unbelievers, Xom-adopted holies in the Abyss), and gives any priestly monsters with no god set the nameless god, just like the old code, except without the explicit genus checks. The explicit genus checks were redundant anyway, since they all fell through to the default case. The old code included a comment that all (non-priestly) angels and daevas worship TSO, except for Mennas. However, the actual code made all (non-priestly) holies worship TSO except for Mennas and apises (Elyvilon worshippers); seraphim were explicitly set as TSO worshippers. I've made the new code give angels and daevas who normally worship TSO a chance to worship Xom in the Abyss; doing that for all holy beings who worship TSO would override seraphim. Also, make orc apostles explicitly worship Beogh, instead of leaving it as a 6-out-of-7 chance for the non-priestly ones. It doesn't make sense for the latter to be unbelievers. -------------------------------------------------------------------------------- be31ae4 | David Lawrence Ramsey | 2024-06-17 11:22:21 -0500 Fix comment typo. -------------------------------------------------------------------------------- 7f99e5b | David Lawrence Ramsey | 2024-06-17 08:29:50 -0500 Set the god wrath avatar's god properly. It should have the god whose wrath it represents. -------------------------------------------------------------------------------- 753a682 | David Lawrence Ramsey | 2024-06-16 08:42:51 -0500 Change apostrophe usage back in one case (wheals) Since "lotus" is not a proper name. (Although its apostrophe usage could technically go either way; the rules are not consistent.) -------------------------------------------------------------------------------- bbce87d | David Lawrence Ramsey | 2024-06-16 08:31:24 -0500 Fix spacing. -------------------------------------------------------------------------------- abf264a | David Lawrence Ramsey | 2024-06-15 16:44:51 -0500 Add another fruit name to artefacts. -------------------------------------------------------------------------------- 748c535 | David Lawrence Ramsey | 2024-06-15 16:27:28 -0500 Add another Xom lava message. -------------------------------------------------------------------------------- 12c7e32 | David Lawrence Ramsey | 2024-06-15 16:09:28 -0500 Fix more apostrophe usage. -------------------------------------------------------------------------------- 2324582 | David Lawrence Ramsey | 2024-06-15 15:24:54 -0500 Construct proper possessive monster names. Apostrophise them properly, and use e.g. "@The_monster_possessive@" and @The_something_possessive@ instead of "@The_monster@'s" and "@The_something@'s". -------------------------------------------------------------------------------- a62346c | David Lawrence Ramsey | 2024-06-15 15:21:51 -0500 Construct proper possessive player names. Apostrophise them properly, and use "@player_name_possessive@" instead of "@player_name@'s". -------------------------------------------------------------------------------- 1b1507a | David Lawrence Ramsey | 2024-06-15 15:21:47 -0500 Construct proper possessive god names. Apostrophise them properly, and use "@god_name_possessive@" instead of "@god_name@'s". -------------------------------------------------------------------------------- 3d6a2ce | David Lawrence Ramsey | 2024-06-15 15:18:26 -0500 Use @Subjective@ in Zenata speech. Accordingly, make subjective and objective pronouns get capitalised properly dependent on the case of the tag, so that they aren't always lowercase when in the middle of a line, as in Zenata's dialogue. -------------------------------------------------------------------------------- d5ad798 | David Lawrence Ramsey | 2024-06-15 14:31:53 -0500 Fix typo. -------------------------------------------------------------------------------- d2a126e | David Lawrence Ramsey | 2024-06-15 13:54:26 -0500 Replace duplicate word in Crazy Yiuf speech. Use "knee" instead of "hand" a second time. -------------------------------------------------------------------------------- b736c20 | David Lawrence Ramsey | 2024-06-15 13:46:59 -0500 Fix capitalisation. -------------------------------------------------------------------------------- e40d03d | David Lawrence Ramsey | 2024-06-15 12:47:26 -0500 Fix apostrophe usage. -------------------------------------------------------------------------------- 823a3ec | David Lawrence Ramsey | 2024-06-15 12:42:15 -0500 Fix punctuation. -------------------------------------------------------------------------------- 088a3bc | DracoOmega | 2024-06-14 14:34:20 -0230 Fix a crash with xv-ing Nessos -------------------------------------------------------------------------------- 4b4f0a9 | NormalPerson7 | 2024-06-14 14:34:20 -0230 Add x-v row showing primary melee damage/flavour for ranged monsters Except for Nessos, monsters never apply an attack flavour to their ranged attacks. Previously, x-v would pretend that monsters' ranged weapon attacks additionally applied their primary melee attack's flavour - this most notably applied to salamanders. Fix this. So that the player can always see the attack flavour of a monster's primary melee attack, add an additional row to the attacks table for monsters that wield a ranged weapon to show the base melee damage and flavour of the monster's primary melee attack. Ideally, we would show the damage of the monster's alternate weapon (if they have one) if and only if the player has already seen them wield it. However, this information is currently not tracked by the game, and would require a disproportionate amount of work to implement for what is a very minor improvement. [Note: while I believe a monster cannot dual-wield or dual-fire ranged weapons at present, the code does not assume this, in case it becomes possible in the future.] -------------------------------------------------------------------------------- 2c2fcc1 | NormalPerson7 | 2024-06-14 14:34:20 -0230 Split up and clean up _monster_attacks_description _monster_attacks_description was becoming a monster, and, without this commit, the changes in the following commit would have grown it even further. Split it up into several helper functions, and tidy up some unnecessary code (e.g. we don't need to check weapons for ARTP_SLAYING). -------------------------------------------------------------------------------- 02f1baf | NormalPerson7 | 2024-06-14 14:34:20 -0230 Treat ghost/pan lord brands like other brands on x-v There seems to me to be no reason to treat these differently now that normal weapons have their maximum brand damage shown together with their normal damage numbers. Ghosts will now have their attacks shown as "Hit: weapon of " and pan lords as "Hit: touch". I admit that this is ultimately a loss of information on the x-v screen, but it also makes x-v more universally consistent. Also, properly include might/berserk/weak effects for the calculation of max brand damage. Perhaps we could add weapon brands to ?/ at some point to improve the transparency of what each brand actually does. -------------------------------------------------------------------------------- c23e653 | NormalPerson7 | 2024-06-14 14:34:20 -0230 Don't imply melee-only buffs affect ranged weapon damage on x-v Applies to might, berserk, idealised (not that there's currently any way to get a ranged ancestor anyway) and weak. -------------------------------------------------------------------------------- e41de2b | dependabot[bot] | 2024-06-14 14:10:25 -0230 Bump tornado from 6.4 to 6.4.1 in /crawl-ref/source/webserver/requirements (#3857) Bumps [tornado](https://github.com/tornadoweb/tornado) from 6.4 to 6.4.1.
Changelog

Sourced from torna do's changelog.

Release notes

.. toctree:: :maxdepth: 2

releases/v6.4.1 releases/v6.4.0 releases/v6.3.3 releases/v6.3.2 releases/v6.3.1 releases/v6.3.0 releases/v6.2.0 releases/v6.1.0 releases/v6.0.4 releases/v6.0.3 releases/v6.0.2 releases/v6.0.1 releases/v6.0.0 releases/v5.1.1 releases/v5.1.0 releases/v5.0.2 releases/v5.0.1 releases/v5.0.0 releases/v4.5.3 releases/v4.5.2 releases/v4.5.1 releases/v4.5.0 releases/v4.4.3 releases/v4.4.2 releases/v4.4.1 releases/v4.4.0 releases/v4.3.0 releases/v4.2.1 releases/v4.2.0 releases/v4.1.0 releases/v4.0.2 releases/v4.0.1 releases/v4.0.0 releases/v3.2.2 releases/v3.2.1 releases/v3.2.0 releases/v3.1.1 releases/v3.1.0 releases/v3.0.2 releases/v3.0.1 releases/v3.0.0 releases/v2.4.1 releases/v2.4.0 releases/v2.3.0

... (truncated)

Commits
  • 2a0e1d1 Merge pull request #3388 from bdarnell/release-641
  • b7af4e8 Release notes and version bump for version 6.4.1
  • d65f6e7 Merge pull request #3387 from bdarnell/chunked-parsing
  • 8d721a8 httputil: Only strip tabs and spaces from header values
  • 7786f09 Merge pull request #3386 from bdarnell/curl-crlf
  • fb119c7 http1connection: Stricter handling of transfer-encoding
  • b0ffc58 curl_httpclient,http1connection: Prohibit CR and LF in headers
  • 0efa9a4 Merge pull request #3385 from bdarnell/update-black
  • 2757c6e Merge pull request #3384 from tornadoweb/dependabot/pip/requests-2.32.2
  • 291d1b6 *: Update black
  • Additional commits viewable in compare view

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?depend ency-name=tornado&package-manager=pip&previous-version=6.4&new-version=6.4.1)](h ttps://docs.github.com/en/github/managing-security-vulnerabilities/about-dependa bot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/crawl/crawl/network/alerts).
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> -------------------------------------------------------------------------------- e0739fc | DracoOmega | 2024-06-14 14:04:49 -0230 Improve stumbling into unknown walls with LoS 0 (elliptic) Instead of printing no message at all, instead print a message about feeling something solid and map the tile the player bumped into so they can remember this. -------------------------------------------------------------------------------- 9aaa1af | DracoOmega | 2024-06-14 14:03:39 -0230 Don't warn that Permafrost Eruption might hit cold-immune allies Since it will never be aimed at them directly, the only collatoral damage it can ever do is cold. Closes #3863 -------------------------------------------------------------------------------- eb6dff9 | DracoOmega | 2024-06-14 03:16:15 -0230 Fix Charming breaking immediately (Undo) Broken by e42ff28ed44e11e251d firing ME_ANNOY after the enchantment effect instead of before. I opted to solve this by just not considering BEAM_CHARM to be nasty to a monster you're aligned with, which seems to work well enough. -------------------------------------------------------------------------------- a2480ef | David Lawrence Ramsey | 2024-06-13 23:19:19 -0500 Update mut_species.lua test for current species. The species list in it now includes all current species except for demonspawn, whose mutations are tested separately from the others. -------------------------------------------------------------------------------- 23b81e5 | DracoOmega | 2024-06-14 01:31:36 -0230 Fix a possible crash -------------------------------------------------------------------------------- 6e0f240 | DracoOmega | 2024-06-14 00:35:14 -0230 Let ranged bump attack work with sight range 0 (elliptic) Currently, if the player has a sight range of 0 (ie: during the first turns of Primordial Nightfall), trying to move into a monster will say "You can't see that place." and consume your turn without doing anything. For more consistency with melee attacks, this aims to let you try to shoot whatever you bump into in this case. Since ranged attacks use beams to create their ranged_attack (and beams can't be aimed out of your LoS like this), this short-circuits that part if your vision radius is 0 and makes the ranged_attack directly. I am not really happy with this implementation and would like to come up with something a little nicer (though I'm not sure how plausible this is), but it seems to produce the desired functionality at present. -------------------------------------------------------------------------------- cabffc2 | DracoOmega | 2024-06-14 00:35:14 -0230 Remove beam code left over from lamps of fire -------------------------------------------------------------------------------- 5079886 | DracoOmega | 2024-06-14 00:35:14 -0230 Make coglin shadow mimics wield weapons in random hands Compared to players, this *almost* never matters, since monsters can't stab and their weapons are always unbranded. But technically if a player was wielding an axe and a non-cleaving weapon, it would be optimal to have the axe in the main hand so the shadow could always cleave even if the main target died. -------------------------------------------------------------------------------- ec5035c | DracoOmega | 2024-06-14 00:35:14 -0230 Give Coglin ranged mimics a shot with their offhand weapon -------------------------------------------------------------------------------- 74f68ee | DracoOmega | 2024-06-14 00:35:14 -0230 Let coglin melee shadows attack with both weapons Shadow mimics of coglin players get a second attack, wielding a shadow copy of their offhand weapon (if they have one). This probably doesn't play nice with shadow positioning if the player is wielding a polearm and a non-reaching weapon at the same time, but hopefully that is a niche enough situation not to worry about it for now. -------------------------------------------------------------------------------- e42ff28 | DracoOmega | 2024-06-14 00:35:13 -0230 Alert monsters hit by enchantments *after* the enchantment effect This is aimed primarily to avoid the relatively-common situation of casting Ensorcelled Hibernation on a wandering monster that is unaware of you, and this causing it to shout and wake up other monsters immediately, even when the spell successfully puts it to sleep. Now (like non-enchantment beams), the monster is alerted only *after* the effect happens - and being asleep will stop them from shouting. This technically buffs a similar situation with paralysis wands and maybe a few others, but that seems fine. I am slightly concerned this might have unforseen consequences (since it's not obvious if there was a *reason* behavior events were fired early in this function), but I guess we'll see them if we see them. -------------------------------------------------------------------------------- a58bd73 | DracoOmega | 2024-06-14 00:35:13 -0230 Change Piledriver damage formula Piledriver asks some unique positioning questions of the player and can do very solid damage for a low-level spell when the player lines up a max distance shot with it. However, because it was tied to the default collision damage formula, distance could only scale the dice *size*, meaning that even a high power Piledriver would often wiff. This is not unusual for spells in Crawl, but for Piledriver it was especially bad. Lining up a good shot often takes multiple turns of setup and cannot simply be repeated immediately (or perhaps at all), *and* often asked the player to lunge into a more dangerous position in the process. Especially as a starting spell of a weaker background, the payoff needs to feel more reliable for people to invest the necessary skill points (and also do what the spell asks of them). To that end, instead of 2d(X-Y) damage, Piledriver now does (3-9)dX damage. (Average damage should remain similar, and the ratio between min and max distance shots also remains similar (4 tiles was ~3x as strong as 1 tile). High rolls may be a little less common, but making it far less likely not to get *a* relevant amount of damage may hopefully make it feel better to use. -------------------------------------------------------------------------------- 8603136 | DracoOmega | 2024-06-14 00:35:13 -0230 Refactor collision damage and adjust several things about it. Previously, all knockbacks/collisions which could inflict damage did so via a fixed formula contained in actor::collide (though the power supplied to this formula varied greatly based on source). This made it slightly inflexible for things which wanted to do more specific things with how they applied collision damage (ie: Gavotte or Piledriver caring about the distance a monster has travelled before the collision). actor:collide now instead takes a pre-AC damage number that it will apply to the colliding actors, if applicable. This is in anticipation of a future adjustment to Piledriver's damage, but is more flexible in general. This commit also makes several other changes in the process: -Primal Wave and Mud Breath no longer inflict collision damage. This happened fairly rarely for Primal Wave, due to low knockback distance and being most common in very open areas, but could inflict up to 2d25 additional damage when it happened (which wasn't indicated by xv!). I nudged the spell damage up slightly in exchange for no longer causing nasty surprises if the beam angle lines up just so. (Mud Breath, due to way in which collison damage was calculated, only did 2d3 by XL 27...) -Force Lance knockback distance and chance no longer scale with spellpower (all current casters are pretty similar anyway) -Wind Blast and Force Lance collision damage should be indicated by xv -Brom's Barrelling Boulder inflicts no collision damage when it cannot displace an actor (it was only ever 2d2 anyway) -Force Lance (the weapon) has a higher minimum collision damage it can inflict (now that such things are easy to add) and overall does more collision damage in general. (It's one of the fun points about the weapon that nudges you to use it differently, and I've never heard anyone say it was especially strong) Unless stated otherwise, damage from other effects should not have changed. -------------------------------------------------------------------------------- e112003 | DracoOmega | 2024-06-14 00:35:13 -0230 Let Harpoon Shot pull monsters This seems to have never functioned, even though the code for it clearly assumed things other than the player *could* be pulled (eg: there was code to check if the player could see the actor being pulled). There doesn't seem to be any particular reason to prevent monsters from being pulled by this (and in fact, warrior apostles can come with Harpoon Shot because I assumed it could do something!). -------------------------------------------------------------------------------- d50b3fb | David Lawrence Ramsey | 2024-06-12 21:12:43 -0500 Checkwhite -------------------------------------------------------------------------------- 65f5bb9 | David Lawrence Ramsey | 2024-06-12 21:11:42 -0500 Fix spelling and tweak wording. -------------------------------------------------------------------------------- a602a13 | regret-index | 2024-06-12 23:35:48 -0230 Changelog updates to be6e7be4eb9 Mostly just describing the new Dithmenos overhaul. -------------------------------------------------------------------------------- d8fb119 | regret-index | 2024-06-12 23:35:48 -0230 Vault review + Snake decor odds increasing Of note: * Took the no_tele_into out of some Zot and Vaults entry vaults. There's not really any obvious reason to avoid dangerous teleports in specific entry vaults but not most others. * Since we've got about 27x2 decorative vaults exclusive to Snake after 181dc37 and a couple of decorative features options in particular that help them stand out relative to other branches, I've given Snake:3-4 the same 33% extra chance to place decorative vaults that Zot:1-4 got in f5be29c. The branch has difficulties with standing out versus other Lair branches each brandishing obvious terrain feature differences, so this should help it out a little more on its identity front versus D itself. In exchange, a couple of luniq_ and uniq_ tags were thrown around in and out of snake.des to not completely submerge Snake levels in water, lava, or coloured glass. -------------------------------------------------------------------------------- bced643 | David Lawrence Ramsey | 2024-06-12 15:58:02 -0500 Remove obsolete glowing mutation description. -------------------------------------------------------------------------------- b53bcb1 | DracoOmega | 2024-06-12 17:36:05 -0230 Fix misnamed shadow spell (Necromancer22) (This also meant its description was missing) -------------------------------------------------------------------------------- 882d200 | Nicholas Feinberg | 2024-06-12 16:31:55 -0230 Probably fix webtiles offhand weapon display -------------------------------------------------------------------------------- 3a74b83 | DracoOmega | 2024-06-12 16:16:52 -0230 *Actually* remove the Noise Suppression mutation from the game I dummied it out, but missed setting the weight to zero, so it could still be gotten by players (but would do nothing). (Also remove a stray description) -------------------------------------------------------------------------------- 34fece2 | DracoOmega | 2024-06-12 16:16:52 -0230 Don't shift players arriving on stairs with no_tele_into (grumposus) I'd thought this logic was a fallback only used if the position the player was arriving on was unsafe, but in fact it was call every time regardless. This meant we would shift the player merely because they were in a no_tele_into zone, even if where they were standing was perfectly safe. Now we should probably only care about no_tele_into if we have to move the player at all. -------------------------------------------------------------------------------- 9b860b2 | David Lawrence Ramsey | 2024-06-12 13:01:34 -0500 Add desc for unrand scarf of invisibility. Since there's one for the unrand amulet. -------------------------------------------------------------------------------- 9407733 | David Lawrence Ramsey | 2024-06-12 11:37:53 -0500 Add quote aliases for acrobat/reflection amulets. These are all sorted, except for the amulet of nothing at the end. -------------------------------------------------------------------------------- 98076e6 | David Lawrence Ramsey | 2024-06-12 11:27:32 -0500 Properly rename ring of willpower tile. It's now i-willpower.png instead of i-r-magic.png, since the term magic resistance is no longer used. -------------------------------------------------------------------------------- c9bec69 | David Lawrence Ramsey | 2024-06-12 11:24:08 -0500 Rings of life protection enum -> positive energy. This matches the in-game naming of the item, and makes the ring quotes actually sorted. Rename the associated tile accordingly. -------------------------------------------------------------------------------- ea9a0ae | David Lawrence Ramsey | 2024-06-12 11:12:03 -0500 Add quote alias for ring of stealth. -------------------------------------------------------------------------------- 7c37e35 | David Lawrence Ramsey | 2024-06-12 11:11:11 -0500 Sort quotes for rings. These are now in alphabetical order (mostly). -------------------------------------------------------------------------------- 5c610d4 | David Lawrence Ramsey | 2024-06-12 11:01:28 -0500 Move wand of mindburst's quote alias. It's now in alphabetical order like the other wands, instead of in the same position it was in when it was called the wand of disintegration. -------------------------------------------------------------------------------- 6cc9baf | David Lawrence Ramsey | 2024-06-12 11:00:49 -0500 Add missing quote aliases for other wands. All of them should be covered now. -------------------------------------------------------------------------------- d6a05a1 | David Lawrence Ramsey | 2024-06-11 23:13:32 -0500 Add quote alias for wand of warping. -------------------------------------------------------------------------------- 4bbee2e | David Lawrence Ramsey | 2024-06-11 23:04:24 -0500 Fix punctuation in quote citations. -------------------------------------------------------------------------------- d4d5bcc | DracoOmega | 2024-06-11 21:33:53 -0230 Allow Cloak of the Thief to stack with Dith 1* power It may not have been obvious that it did not, and it seems like an unrand probably shouldn't just do nothing for Dith worshippers like this. -------------------------------------------------------------------------------- e82873c | DracoOmega | 2024-06-11 21:20:49 -0230 Don't return from the Abyss into inaccessible areas If a character with temporary flight was banished over lava or deep water, upon departing the Abyss, they would be placed on the nearest safe tile they could occupy - but this displacement did not respect no_tele_into and could sometimes result in them landing in places the player was never supposed to be able to enter (and possibly trapping them there). This does mean we will sometimes push the player further than necessary (if they got banished in this way from a ghost vault somehow), but that seems more harmless than the behavior it's replacing. (This scenario also applies to Duel, by the way) -------------------------------------------------------------------------------- d887a3b | DracoOmega | 2024-06-11 21:15:58 -0230 Include apostle short descriptions in Beoghite character dumps Since one's apostles are really a significant part of a Beogh worshipper's power and worth recording/listing. (This uses the same format of description as seen on the Extra religion screen) -------------------------------------------------------------------------------- cafd96f | DracoOmega | 2024-06-11 18:55:08 -0230 Rework Okawaru's Duel ability somewhat Duel was an ability with great flavor that, in practice, was usually best used in ways that went against that flavor - by duelling relatively harmless enemies so that the player could stall to heal up. Using it against genuinely scary enemies often meant trapping the player in a fight against them with no escape options and limited reward for doing so. This aims to improve that situation by tweaking a few things about how Duel works. When you start a duel, the player will now instantly heal for half of their missing health. But when the duel ends, your hp/mp will be reset to whatever they were when the duel *started*. This means simultaneously that there is no benefit to stalling to heal (you'll just lose that health when the duel ends), but also that you sometimes stand to benefit greatly from taking a risk (getting a large heal when at low hp, or undoing any battle damage from one scary monster before you fight others) Duels also now end instantly once the main target is dead. All items on the floor are automatically gathered up and deposited at the player's feet, where they exit. (In the rare case of the player standing over deep water or lava, an Okawaru altar will be made at their feet to ensure the items are not lost.) Finally, the piety of cost of duel is also significantly reduced, such that it is equivalent to Finesse. -------------------------------------------------------------------------------- c8ab930 | advil | 2024-06-11 15:07:37 -0400 fix: handle some webtiles race conditions Most of this was found while debugging cao behavior when out of disk space. A number of extremely strange race conditions could happen when game startup fails in unusual ways, as well as in a subsequent attempt to shutdown the server. This commit tries to handle these a bit better. Unfortunately, the best solution I found for the big one (a race condition after fork, but before execvpe overwrites python) is simply to delay so that execvpe takes hold; fork + asyncio is not well behaved. See: https://github.com/python/cpython/issues/66197 As far as I can tell, the promised solutions of safely closing the event loop in a child never materialized. -------------------------------------------------------------------------------- 01dcfa0 | DracoOmega | 2024-06-11 13:57:22 -0230 Fix Beogh ally-heal-on-damage not being active until 4* When the UI claims 3*. (I never seem to remember that piety_breakpoint(3) is actually 4* because why the heck would it be? >.>) (Note: it didn't even check your piety level at all until a couple days ago, but it seemed better to have it match up with the UI's claims. It wasn't really a balance adjustment, since it shows up as soon as you can get apostles in the first place.) -------------------------------------------------------------------------------- 18c097c | DracoOmega | 2024-06-11 13:05:51 -0230 Fix an obvious typo (ge0FF) -------------------------------------------------------------------------------- 14a633c | DracoOmega | 2024-06-11 13:00:03 -0230 Fix marionette spell markers being visible outside monster lookup (ge0FF) They were still showing up next to spells in books the player was examining. -------------------------------------------------------------------------------- 9bcd2ff | David Lawrence Ramsey | 2024-06-11 00:21:15 -0500 Remove doubled word in Primordial Nightfall desc. -------------------------------------------------------------------------------- 2b8cd2b | David Lawrence Ramsey | 2024-06-10 17:26:53 -0500 Fix spelling. -------------------------------------------------------------------------------- fa1790a | David Lawrence Ramsey | 2024-06-10 16:39:57 -0500 Add another Screaming Sword line. -------------------------------------------------------------------------------- 77ad410 | DracoOmega | 2024-06-10 16:54:01 -0230 Fix * next to some spell names for non-Dith worshippers (ge0FF) This was meant to indicate an interaction with Aphotic Marionette. The full description of what the * was indicating was properly hidden for non-Dith worshippers, but a logic error meant that the asterisk itself was still visible for everyone (confusingly). -------------------------------------------------------------------------------- aeb9cdf | DracoOmega | 2024-06-10 15:05:04 -0230 Remove some restrictions on where apostle challenges can happen (various) A variety of concerns have been expressed about the gameplay dynamics of blocking apostle challenges on rune floors, and their hidden nature. I still have some significant reservations of my own about changing it (particularly as concerns V:$), but with the HP threshold for challenges being a small bit more generous, we can give it a try to removing these for now. (I left Zot:5 vetoed for now, but the rest of Zot has also become eligible.) -------------------------------------------------------------------------------- 2d49874 | DracoOmega | 2024-06-10 14:47:00 -0230 Change Nightfall stealth bonus (elliptic) While the bonus was fairly sizeable, it still didn't do enough to counter the major penalties from heavy armour characters (thus defeating one of the purposes of the bonus - making Nightfall feel more consistent). Instead of giving you 100 stealth, it now caps your minimum stealth at 100. This might technically be a nerf to very stealthy characters using it, but I doubt it's one they could even notice. -------------------------------------------------------------------------------- 1b2b8ba | DracoOmega | 2024-06-10 14:39:37 -0230 Add 'Nightshade' as a Dithmenos title for Vine Stalkers (Flugkiller) -------------------------------------------------------------------------------- 9f789a9 | DracoOmega | 2024-06-09 21:49:05 -0230 Tweak Dithmenos wrath Instead of summoning demons and undead to harass the player, Dithmenos can now summon multiple shadow puppets (whose damage scales with the player's level) with a chance to slow the player at the same time, or animate the player's shadow against them as an active hostile monster. The hostile player shadow can know a single shadow spell drawn at random from the schools of spells the player knows. A handful of these don't really work when cast by an independent shadow and so are excluded for the moment. I'd still like to do something with the Dith wrath option that puts you to sleep, but this at least excises the 'arbitrarily evil' part of the wrath. -------------------------------------------------------------------------------- 443a00b | DracoOmega | 2024-06-09 21:49:05 -0230 Add a targeter to indicate which enemies will be misled by Shadowslip I've seen a little uncertainty sometimes why some monsters were or were not affected by this effect (possibly because the monsters weren't targeting the player at the time), so now it hilights all such monsters before cast. I'm a bit concerned now that it might be misleading in a different way for hilighting something different than 'where the player will move' but I hope at least that part is unambiguous enough with experience to not require it? -------------------------------------------------------------------------------- c9175b0 | DracoOmega | 2024-06-09 21:49:05 -0230 Fix a few breaks in mons_cast that should be returns Breaks in the giant switch statement led to a default behavior of firing the beam which is always passed into this function, after whatever the spell's own effect was. In almost all cases, there should be a return statement after the spell's code block instead (although at least two cases do this break intentionally...) Mostly, the effect of this seems to be invisible, though it caused Marionette to crash when casting Summon Scorpions due to firing a beam with no source position specified. I'm actually not sure why normal casting of this spell *doesn't* crash, since setup_mons_cast() doesn't fill that info in for the spell either (since it's not supposed to be *using* that beam), but I will just assume something somewhere else along the way of the normal cast path superfluously fills in this information. f -------------------------------------------------------------------------------- 58e5f1b | DracoOmega | 2024-06-09 21:49:05 -0230 Don't let monsters perform reach attack from out of sight When using Primordial Nightfall -------------------------------------------------------------------------------- 82c5906 | DracoOmega | 2024-06-09 21:49:05 -0230 Make Primordial Nightfall give a stealth bonus while active The ability could sometimes be less effective than expected if the player's base stealth was very low (with a few corner cases where that could even be exploited, such as attacking orbs of fire with LoS 0 and 0 Stealth and having them refuse to wander away) This should hopefully make cheese less practical while making it feel a little better in other cases. -------------------------------------------------------------------------------- 38f5e13 | DracoOmega | 2024-06-09 21:49:05 -0230 Make shadow mimic play less poorly with Ensorcelled Hibernation Due to its schools, casting EH can trigger either Shadow Torpor or Creeping Shadow, both of which are capable of immediately waking up what you just put to sleep, which is extremely bad playfeel for Enchanters - an archetype Dith specifically wants to support. Shadow Torpor now in general doesn't wake sleeping monsters (it seems harmless to slow a sleeping monster). I think it would be more problematic if Creeping Shadow *also* didn't wake sleeping monsters in general (or we might get people spamming Ozo's Armour at the end of LoS to take out sleeping bands...) but the current gameplay is so bad that I'm making it 'cheat' a little and not wake up sleeping monsters that have specifically been put to sleep via Hibernation. -------------------------------------------------------------------------------- 7207012 | DracoOmega | 2024-06-09 21:49:05 -0230 Adjust Dithmenos flavor They are no longer an evil god who focuses on corruption-via-darkness, but rather a neutral god of night and of things half-seen in the dark. In keeping with this, Dithmenos now operates on exploration piety instead of kills - they want you to venture into the dark hidden places of the dungeon, as one might wander the night, and discover what lurks there. Since Dith's entire ability context is already changing, upending piety rate ought to be doable without any greater concern than the god rework as a whole has. This commit also replaces all existing titles. One reference umbra (which Dith no longer uses), another referenced 'Endless' night (when you now have a Nightfall ability that explicitly ends and whose description talks about how night always gives way to day), and more references a hatred of fire that is also long-gone. So it felt like a chance to do them over from scratch. -------------------------------------------------------------------------------- 393c3b8 | DracoOmega | 2024-06-09 21:49:05 -0230 Aphotic Marionette (new Dithmenos 4* ability) An activated ability that allows the player to grab hold of an enemy through their shadow and force them to unleash a barrage of spells as if it were the player casting them. In a single action, the enemy will run through their known spells (in random order), attempting to cast each on random targets hostile to the player, and repeating spells only once all valid spells have been cast once. Creatures they summon this way will belong to the player and many beneficial effects that they would apply to themselves will be applied to you instead (such as Might or Invisibility). You are also fully protected from any damage they would cause (ie: if you force Nikola to repeatedly cast Chain Lightning). A handful of spells are not eligible to be cast this way (either because they would be useless, harmful, or are currently broken in some fashion), but these are all clearly indicated with an ‘!’ when examining an enemy. Can only ever be used successfully on given enemy a single time, period. (In some cases, such as an enemy having a single spell that is theoretically valid but which no enemy is in range of, using Marionette may have no useful effect. In those situations, most of the piety cost is refunded and you will able to try again another turn). By default, attempts to cast 3 spells by the targeted enemy, though at very high levels of invocations, this number can be raised as high as 6. ---- The implementation of this is fairly complicated, but I have mostly tried to avoid doing anything *inside* the code of existing spells (with just a couple small exceptions). However, wonky as it is in some ways, I think the net effect feels really cool and meaningfully different than charming, and rounds out Dith's kit as abilities that never directly damage or summon anything but manipulate existing monsters and their ability to act against you through trickery. (I do plan to do a little more refactoring to this later, but it should largely function as-is. Somewhat unclear about what the piety cost should be, since it varies from fairly disappointing to extremely powerful depending on what is around to use it on, but that's some of what experimental branches are for) -------------------------------------------------------------------------------- d9fb448 | DracoOmega | 2024-06-09 21:49:04 -0230 Implement new Dithmenos spell shadow mimic Old spell mimic was a very fickle thing, working properly with fewer and fewer spells over the years as more of them stopped being simple targeted effects (and even those which were often needed special-case logic to prevent, say, immediately cancelling Teleport Other on a monster or immediately destroying your own boulder with a shadow shard). However, the idea of god passive that works differently based on what magic the player themselves is using is a good one, so I have attempted to make a consistent version of this. Whenever you cast any spell, there is a chance for your shadow to cast a 'shadow spell' corresponding to the school of the spell you cast (chosen at random for multi-school spells). These spells mimic something of the *style* of that school of magic, but not the substance - doing non-elemental damage or otherwise being irresistable. The shadow spell list is: Fire: Shadowball (like Fireball, but irresistible.) Ice: Creeping Shadow (like Creeping Frost, except irresistible and with a somewhat smaller range.) Earth: Shadow Shard (single target, high damage projectile.) Air: Shadow Tempest (smite-targeted (but dodgeable) damage that strikes between 30-50% of all visible enemies + 1) Alchemy: Shadow Prism (make a shadow prism that works like a fulminant prism, but is somewhat harder to hit and deals no damage to allies) Conjurations: Shadow Beam (a penetrating damaging beam) Necromancy: Shadow Draining (3x3 damaging burst centered on the shadow which ignores enemy AC.) Summoning: Shadow Puppet (minor ally with swoop/flank/constricting attacks whose base damage scales with spellpower. Summon cap of 3.) Hexes: Shadow Torpor (penetrating beam that applies low-duration Slow to enemies. Ignores Will and always succeeds, though the duration is reduced by enemy HD versus spellpower.) Translocations: Shadow Bind (short-duration Bind (ie: no movement) effect to a random number of enemies in LoS. Spellpower make it affect more enemies at once.) The spellpower of your shadow is based on a function of your XL and the level of the spell which triggered it. (Each spell level is worth 4 Xls) All shadow spells are silent and inflict no damage to the player or their allies. This resist-ignoring boost provides a different vector of supporting spellcasters than current spellcasting gods. You aren't given new spells or the ability to cast them any better, but you *do* get built-in versatility and bonus damage in a way that should feel different depending on what sort of caster you're playing) (Credit to regret-index for the shadow puppet tile and most of the spell icons) -------------------------------------------------------------------------------- 357ea48 | DracoOmega | 2024-06-09 21:49:04 -0230 Refactor Creeping Frost Simplifies some of the code a little, while also allowing future effects to perform the same 'burst from walls' effect with a smaller radius and different beam properties. There should (hopefully) be no meaningful functional change to the spell. -------------------------------------------------------------------------------- db99905 | DracoOmega | 2024-06-09 21:49:04 -0230 Add a special mid to simulate being a player shadow For tracers where the shadow does not yet exist, but where we wish to trace from the perspective of a potential one. -------------------------------------------------------------------------------- 5a209e1 | DracoOmega | 2024-06-09 21:49:04 -0230 Allow beam tracers to work without an agent This is specifically for shadow mimic spell tracers here, where the shadow monster may not yet exist (yet we need to trace from the shadow's perspective to account for being able to shoot through the player). -------------------------------------------------------------------------------- ff88027 | DracoOmega | 2024-06-09 21:49:04 -0230 Force summons created by player shadows to count the player as summoner Instead of the shadow itself, which often will not even last a turn, causing the summons to immediately poof. -------------------------------------------------------------------------------- 7a8788e | DracoOmega | 2024-06-09 21:49:04 -0230 New Dith 5* ability: Primordial Nightfall Immediately reduces the player's sight radius to 0 and then slowly restores it to normal over the duration of the effect. Cannot be reapplied until it has fully worn off (so the player cannot spam it to remain nearly-invulnerable). Fills a little of the role of Shadow Form being a defensive panic button, without nearly so many different properties and up/downsides baked into it, and hopefully feels reasonably unique as well. One quirk that might not be immediately apparent is that enemies can still attack you when your sight radius is 0 because 'moving into a space' always counts as an attack if something is there. You do get the invisibility bonus to avoid their attacks because they still can't 'see' you, however. -------------------------------------------------------------------------------- d377fa9 | DracoOmega | 2024-06-09 21:49:04 -0230 Remove unused Dith ability descriptions from translations -------------------------------------------------------------------------------- 57e9c22 | DracoOmega | 2024-06-09 21:48:59 -0230 Add noise dampening as Dith 1* ability Intended to fill some of the same role as umbra once did, but in a way that has more potentially interesting ramifications for blasters as well. -------------------------------------------------------------------------------- 63ec5cf | DracoOmega | 2024-06-09 21:41:40 -0230 Remove the Noise Suppression mutation (In preparation for it being baked in as Dithmenos's first passive) -------------------------------------------------------------------------------- 848d387 | DracoOmega | 2024-06-09 21:41:40 -0230 Slightly improve spacing in god-passive.h for clarity Grouping each god's abilities together, as is done in several other files. -------------------------------------------------------------------------------- ebaddcd | DracoOmega | 2024-06-09 21:41:40 -0230 Replace Shadow Step with Shadowslip (new Dith 3* ability) Usable only while your shadow is out, Shadowslip swaps your position with it at instant speed and then misleads all visible enemies into thinking that your shadow *is* you. Enemies mislead this way will focus their attention solely on your shadow for several turns (or until the shadow dies), allowing you to slip away or stab them in the back. It costs a relatively modest amount of piety, but also some HP (as Shadow Step itself did). -------------------------------------------------------------------------------- df2a5d8 | DracoOmega | 2024-06-09 21:41:39 -0230 Overhaul Dithmenos shadow mimic (for attacks) Instead of briefly placing an invisible monster at the player's location (which tries very hard to convince the code in several places that it really *is* the player - a source of multiple bugs in past), player shadows are now proper monsters that show up on a nearby tile when they trigger. (They do not act independently, so they can be somewhat compared to a spectral weapon that lingers around for a few turns after activating to potentially distract monsters, and will interact with a future ability.) Melee attacks that trigger mimic will attempt to place it on the opposite side of the creature you're attacking and then swing at it, where this is possible, but can place on any tile up to 3 tiles away, and select any valid enemy in this range if it is not. (ie: they will always try to hit something, if they can). Ranged mimics will simply place somewhere nearby, but otherwise follow similar rules. The player and their shadow can freely fire through each other. As before, your shadow wields an unbranded +0 copy of your weapon's base type, though its own base damage now scales with your XL so that it should have more impact and remain more useful across the length of the game. (The logic for spell mimic will be added in a future commit) -------------------------------------------------------------------------------- f6379e1 | DracoOmega | 2024-06-09 21:41:39 -0230 Remove Dith's passive umbra, simplify umbra stealth bonus With umbra having become a core Yred mechanic, Dith is going to be swapping it out for a different method of making the player harder to notice (see d5141423a9 ) Also, rather than handling divine umbras and item umbras differently (which I think was not obvious to almost anyone), just standardize them at +50% stealth regardless of piety. -------------------------------------------------------------------------------- a7885c0 | DracoOmega | 2024-06-09 21:41:39 -0230 Rename shadows (the undead monster) to shadowghasts To reduce some confusion/ambiguity between player shadows (which are non-living) and the common monster (which is undead) - especially now that player shadows are a visible thing a Dith worshipper can see (and will likely be eventually used in wrath effects) -------------------------------------------------------------------------------- 8171723 | DracoOmega | 2024-06-09 21:41:39 -0230 Separate the dummy monster used for god wrath from player shadows This has caused bugs in past, and now that player shadows themselves are also no longer going to be weird hidden monsters standing on the player's tile, let's properly give wrath avatars their own monster type. There should be no functional change from this commit. -------------------------------------------------------------------------------- fa19ac7 | DracoOmega | 2024-06-09 21:41:39 -0230 Remove Dithmenos's Shadow Form ability and associated form Shadow Form was a moderately useful defensive tool, but it came with an extremely long list of assorted bonuses and penalties (several of which were highly specific). As part of the pending revamp, it is slated to be replaced with a different ability that aims to achieve a similar function of 'powerful defensive cooldown that makes you supernaturally hard to be seen' in a more streamlined manner. (See 7444593a7a ) -------------------------------------------------------------------------------- 0d7b496 | DracoOmega | 2024-06-09 21:34:15 -0230 Remove Dith's bleed smoke passive This rarely triggered until high piety, and even then was widely thought to be more of a drawback than it was an upside (due to blocking ?blinking at random and interfering with targeting.) Dith's revamp will be doing other things instead. -------------------------------------------------------------------------------- 45bd999 | DracoOmega | 2024-06-09 16:16:57 -0230 Remove default argument from SpellLibraryMenu When I wrote this, I'd intended for the default argument to be memorise (and then typoed it). But since this is only constructed in 3 places, and each one uses a different argument now anyway, might as well remove this. -------------------------------------------------------------------------------- af954ef | DracoOmega | 2024-06-09 16:16:57 -0230 Make apostle challenges a little more generous about the player's HP Instead of merely needing the player to be over 50% hp to issue a challenge (which is often still dangerously low early on), use a sliding scale based on the player's xl. (>80% at xl 0 to >50% by xl 27) -------------------------------------------------------------------------------- fdec4ed | DracoOmega | 2024-06-09 16:16:57 -0230 Fix pathfinding issues with apostle challenges / Blood for Blood Pathfinding without a proper monster agent always considered closed doors (and deep water and lava) to be untraversible, resulting in the code for apostle challenges and BfB considering areas behind closed doors unreachable. This could happen very frequently in Vaults. Since apostle challenges that cannot be issued are merely delayed, and the player will open doors as they explore the level, this may not have been immediately obvious to most players, but it nonetheless shouldn't be possible to avoid a challenge just by sitting in a room with the door closed. BfB had a similar issue due to how it places continuous reinforcements just out of sight and has them move towards the player. It now should no longer be flummoxed by doors. (Friendly monsters normally cannot actually open doors, but I have made an exception in this case, since it feels appropriate for the gameplay that BfB creates.) -------------------------------------------------------------------------------- e5cf5f0 | DracoOmega | 2024-06-09 16:16:57 -0230 Make Erica always spawn with a ring instead of sometimes an amulet This was always the intention anyway, as I understand it. -------------------------------------------------------------------------------- 5a71cb2 | DracoOmega | 2024-06-09 16:16:57 -0230 Don't let wizard apostles learn the same secondary spell twice This did actually double their cast rate of it, but confused people by showing up twice in the apostle info blub (and was rather opaque anyway). -------------------------------------------------------------------------------- 1a24481 | DracoOmega | 2024-06-09 16:16:57 -0230 Add Permafrost Eruption and Hellfire Mortar to the wizard apostle list -------------------------------------------------------------------------------- e83a209 | DracoOmega | 2024-06-09 16:16:57 -0230 Make Beogh ally healing via damage stronger (and tweak wording) I think the pseudo ally-vampirism effect Beogh granted was already decently relevant, but seemed to have gone overlooked by a bunch of people. Since Beogh doesn't seem in danger of being *too* good (and anything which requires the player to put themselves in harm's way is already the 'less strong' side of Beogh anyway), let's try buffing the effect a noticable amount and see if people notice it more. -------------------------------------------------------------------------------- f893faa | DracoOmega | 2024-06-09 16:16:56 -0230 Prevent apostle challenges before D:6 Early apostle challenges can be enormously dangerous, and this made early faded Beogh altars and/or monks often more bad than good. This attempts to address the worst cases by simply banning all apostle challenges before D:6. That is still fairly early, but ideally a more manageable level of early. (Progress towards the next challenge will still accumulate even before this point, so the early piety bonus will still result in more rapidly getting a full roster, but hopefully not before the player has a reasonable chance of managing it.) -------------------------------------------------------------------------------- e97a2a3 | DracoOmega | 2024-06-09 16:16:56 -0230 Fix Regenerate Other being usable on self, add Mass Regeneration Despite the name, priest apostles could use Regenerate Other on themselves. Now it really does require they cast it on someone else, but a high-level version that applies regeneration to *all* allies has been added as a rarer priest spell, in partial compensation. -------------------------------------------------------------------------------- 1335958 | DracoOmega | 2024-06-09 16:16:56 -0230 Improve Noxious Breath targeting behavior Targeting will no longer default to aiming at the player, even when susceptible enemies are in range. Also, it will properly display the chance for the noxious clouds to confuse enemies instead of a misleading 'hit chance' (it can't miss in the first place) This fixes #3831 -------------------------------------------------------------------------------- ea5a38d | elliptic | 2024-06-09 14:03:25 -0400 Mark the god.worship milestone only after setting initial piety Previously if you had Invocations as your top skill it recorded the penance title for your new god. -------------------------------------------------------------------------------- 0555720 | elliptic | 2024-06-09 02:06:19 -0400 Fix not being able to memorize spells not currently castable (johngfound) Piledriver and Sublimation were two examples of spells that had issues. -------------------------------------------------------------------------------- dcd31b5 | DracoOmega | 2024-06-08 22:54:03 -0230 Mention in spell descriptions whether they are servitorable (elliptic) If the player knows Spellforged Servitor, there will be a line appended to full spell descriptions letting the player know whether this is a spell that servitor could cast. -------------------------------------------------------------------------------- 790598c | David Lawrence Ramsey | 2024-06-08 18:55:49 -0500 Fix typo. -------------------------------------------------------------------------------- 4a138bd | DracoOmega | 2024-06-08 20:34:37 -0230 Let players choose which spell their Spellforged Servitor casts (elliptic) Spellforged Servitor is a fun and popular spell, but it relies on a hidden priority list of spells it can cast which isn't documented anywhere in game. This is somewhat opaque to inexperienced players, and even for experienced ones, can lead to unfortunate situations of wanting to avoid memorizing a spell that the player would like to use, but which they would rather their servitor not. In an attempt to improve this situation a little, the player now has an Imbue Servitor ability while Spellforged Servitor is known, which will allow them to specify which eligable spell the player would like them to cast. This ability dismisses the servitor and takes 5 turns to complete, so is not intended as a quick swap in combat. If the player never uses it, the servitor defaults to its current behavior (to prevent people who forget or do not realize from having a bad time). If the imbued spell somehow becomes ineligable (either due to ?amnesia or the player no longer being able to cast it well enough), the servitor will also fall back to the old default behavior. (It was suggested that it might be nice if the UI would also list spells in the player's library which *could* be eligable if the player memorized them or trained more, but that seems significantly more complicated to implement. I wouldn't object if someone else tried, though.) -------------------------------------------------------------------------------- b41d2f8 | DracoOmega | 2024-06-08 20:34:37 -0230 Remove -MP from Cloak of the Thief (elliptic) The cloak having a downside at all, after its effect was changed, was partially for historical reasons, and it seems plausible it doesn't need one at all (it's already +0). Since -MP seems to still be stopping some of the characters it could be interesting on from using it, let's try getting rid of it entirely. -------------------------------------------------------------------------------- 8bd0f57 | David Lawrence Ramsey | 2024-06-08 16:43:18 -0500 Clarify changelog entry for DS foul shadow. -------------------------------------------------------------------------------- d719f66 | DracoOmega | 2024-06-08 15:12:09 -0230 Add option to redefine colours in Tiles/Webtiles custom_text_colours lets you change the RGB value of any of the 16 basic terminal colours used by Crawl and much of its interface. These are specified as arbitrary pairs of colour name and hex code (eg: lightmagenta:#fd59fa ) and can be remapped individually. Thanks a ton to mumra for outlining how to get any of this kind of functionality working in Webtiles. I've never touched options code or webtiles rendering before (or web code in general...), so I am still a *little* nervous I've done something wrong, but it seems to work properly in testing. -------------------------------------------------------------------------------- 1404227 | David Lawrence Ramsey | 2024-06-08 09:21:31 -0500 Tweak goblin sharper dialogue. Separate the list of cards from the deck of oddities and the list of cards from non-Nemelex decks, so that the latter can be adjusted more easily. -------------------------------------------------------------------------------- 6e78a6c | elliptic | 2024-06-07 22:04:37 -0400 Fix changelog error -------------------------------------------------------------------------------- 7c0229b | DracoOmega | 2024-06-07 23:23:57 -0230 Make blocks of ice (and hoarfrost cannons) amphibious The former in particular had some awkward interactions with being unable to sculpt simulacra of merfolk while over deep water. The merfolk simulacra would be able to swim, but the blocks of ice could not. Since blocks of ice are pretty well known for floating in the ocean in reality, I don't think it would be too weird if they did so here. And let's let hoarfrost cannons do it too while we're at it, because why not? -------------------------------------------------------------------------------- ecdbb5f | DracoOmega | 2024-06-07 23:09:50 -0230 Tweak AF_VAMPIRIC message (Namsan) Instead of saying they draw 'strength' from your injuries (which might be confused for them gaining Might or some other form of power boost, say they draw 'vitality' instead. -------------------------------------------------------------------------------- 7842008 | DracoOmega | 2024-06-07 23:07:07 -0230 Don't claim hellfire mortars 'flop about on dry land' (elliptic) While I found it very hard to cause this in testing, it appears to relate to being constricted in place for long enough that the lava path disappears beneath it. The main answer to this is to make the mortar too large to constrict, but in the rare situation where it may be otherwise possible to replace the lava beneath it with some other terrain, I have also suppressed the message in general. -------------------------------------------------------------------------------- e1e3299 | DracoOmega | 2024-06-07 23:05:09 -0230 Remove hellfire mortars upon leaving a level -------------------------------------------------------------------------------- 9f51f14 | DracoOmega | 2024-06-07 23:04:18 -0230 Let hoarfrost cannons be affected by LRD Since they're clearly made of ice. -------------------------------------------------------------------------------- a2d40b9 | DracoOmega | 2024-06-07 23:03:52 -0230 Buff Undying Armouries a little They have an interesting set of abilities, but feel perhaps a little undertuned for a rarer lategame enemy. Make the dancing weapon created by Flashing Balestra spawn with Might and increase the duration of Bestow Arms (and make ranged weapons a little more likely to be given by it). Also increase their spawn weight in the Vaults OOD table by a modest amount (since it's the only place in the game they naturally spawn), trimming a sliver of weight from storm and shadow dragons in the process. -------------------------------------------------------------------------------- 49f9abe | DracoOmega | 2024-06-07 21:11:29 -0230 Preserve the auras of bound souls At the moment, that basically just means torpor snails and glowing orange brains, neither of which are ideal bound souls in the first place, but it seems harmless and maybe ocassionally useful. -------------------------------------------------------------------------------- eb34fb9 | DracoOmega | 2024-06-07 21:10:13 -0230 Fix being unable to use Bind Soul on monsters without attacks The logic was inverted since %bf13549d7c2a334ff38fb0051bddd08410055114 letting you make spectrals with no attacks via Death Channel, but preventing you from using Bind Soul on such monsters, even if they knew spells. -------------------------------------------------------------------------------- 1cf930e | DracoOmega | 2024-06-07 21:08:32 -0230 Fix Yred always saying they were 'Noncommittal' no matter your piety The logic didn't get updated after Yred returned to a normal piety system. -------------------------------------------------------------------------------- b780b6b | David Lawrence Ramsey | 2024-06-07 13:52:01 -0500 Unbrace -------------------------------------------------------------------------------- fe1d291 | elliptic | 2024-06-07 14:41:24 -0400 Simplify weapon acquirement The goals here are similar to that of armour acquirement simplification - remove weird bits of logic that could be exploited by a spoiled player (e.g. raising Necromancy skill from 0 to 2 made non-artefact weapon gifts twice as likely to be pain) and make the code simpler in general, while still trying to give the player useful or interesting items. The way in which weapon acquirement chose a weapon skill to use (via a weighted random choice with weights based on the player's skill levels) is unchanged by this commit. There are two main changes beyond that though: First, weapon subtype (war axe vs broad axe vs battleaxe, etc) was previously chosen with weights determined in a very complicated way that took the player's highest weapon skill (even if not the one being gifted) and their shield skill into account (and had breakpoints when comparing them) and also (for non-Trog acq) looked at the cube of the weapon's base damage divided by the weapon's base delay. This was all on top of acquire_weight numbers in item-prop.cc. That has been drastically simplified - now we mainly just use the acquire_weight numbers. They are modified slightly based on Shields skill (to prefer 1-handers with higher Shields skill) and also unseen subtypes have 5 times the weight (unchanged from before). When coming up with the new acquire_weight numbers, I didn't try to work out what all the effective weights with the old system were (again, they took weapon stats into account in a complicated way) but instead aimed for consistency across weapon skills. For each weapon skill, I aimed for about 50% of the weight to be split among "top-tier" weapons (anything not very clearly worse than other weapons for endgame characters, so e.g. for axes these are broad axe and executioner's axe) and also gave 0 weight to weapons in the set of weaker starting weapon. I also tried to keep things roughly evenly divided between 1-handers and 2-handers at base (though raising Shields skill will make 1-handers somewhat more common). The second major change was to rework brand weighting for non-artefact weapon acquirement. Instead of weights ranging from 1 to 6 for different brands with no apparent logic, I've changed it so there is a single list of "boring" brands that are rerolled 2/3 of the time (effectively meaning their weights in the brand tables in item-prop.cc are divided by 3): flaming, freezing, draining, heavy, venom, protection, and electrocution. It seems reasonable to try to make non-artefact weapon acquirements somewhat more exotic like this. In addition, scroll acquirements no longer generate artefact weapons with negative enchantment (non-Xom god gifts already had this protection). In general I'm unsure how big these changes will be in practice (probably some weapon types are impacted more than others), though things looked fairly reasonable in my testing. It should be much easier to tweak things in the future though. -------------------------------------------------------------------------------- f6fde8a | elliptic | 2024-06-07 14:41:24 -0400 Fix items in starting inventory not being marked as seen This meant that if a fighter starting with a war axe found acquirement before finding a second war axe (or dropping their starting one), they would have the unseen bonus increasing the chance of getting offered another war axe from acquirement. -------------------------------------------------------------------------------- 181dc37 | patrick | 2024-06-07 11:42:09 -0400 Add some sinuous, squamous decor vaults to the Snake Pit Also use some more decorative conduits in places, mostly just copying the code that regret-index put in elsewhere in Snake, for thematic consistency. -------------------------------------------------------------------------------- ac80d7c | elliptic | 2024-06-07 11:25:35 -0400 Fix typo in tower shield acq weight -------------------------------------------------------------------------------- 5039c03 | elliptic | 2024-06-07 10:58:27 -0400 Simplify armour acquirement These changes had two goals: to make armour acquirement logic relatively unmanipulable by the player while still being likely to provide useful or interesting items, and to simplify armour acquirement logic. After this commit, the player's skills only affect armour acquirement in two ways: higher Shields skill makes tower shield more likely and bucklers and orbs less likely, and higher Armour skill makes higher AC body armour more likely and lower AC body armour less likely. Both of these effects are relatively weak and don't have any special breakpoints. In particular, body armour acq no longer depends in strange and complicated ways on Dodging and Spellcasting skill. In general it should be much easier to tweak body armour acq in the future, since the weights used are just the acq_weights defined in item-prop.cc (which I have changed to focus more on better/more interesting types) modified by a simple function of Armour skill and AC of the armour. In addition, the logic for making artefacts and items in "unseen" slots more common has been drastically simplified, though hopefully things are still fairly similar. In general it should be fairly hard to notice these changes in practice - probably the biggest changes are to body armour, which I suspect is better in practice on most characters now, and which I've also made somewhat more common. -------------------------------------------------------------------------------- 5c500c4 | elliptic | 2024-06-07 10:09:22 -0400 Make demons summoned by obsidian axe always friendly (Ge0ff) Removing the ~4% chance of hostiles - it wasn't documented and wasn't very impactful aside from giving a very tiny chance of getting mutated by a hostile neqoxec before killing it with the axe. This is even consistent with Makhleb Lesser Servant having 0 hostiles after ~8 invo skill. Obsidian axe has a much more dangerous and interesting drawback already. -------------------------------------------------------------------------------- 925b980 | DracoOmega | 2024-06-07 01:13:29 -0230 Give Wiglaf's hat a proper tile (regret-index) So now you can look properly stylish (instead of it mostly looking like a wizard hat). (I was sorely tempted to name the file hat_stupid.png, just so everyone's aware, but elected for clarity instead.) -------------------------------------------------------------------------------- 95f95fa | DracoOmega | 2024-06-07 00:39:03 -0230 Tweak how piety costs are described in ability descriptions Due to how rounding was performed, and the fact that '1% of your maximum piety' was the lowest piety cost ability descriptions could display, the game claimed Makhleb's Major Destruction and Lesser Servant cost the same amount of piety, when in fact Major Destruction costs 1/6th what Lesser Servant does. (It would be quite a bad ability if it actually did cost just as much!) Piety costs now round up instead, meaning that Lesser Servant will say it costs 2%, while Major Destruction says 'less than 1%', which is a lot closer to accurate. (It's possible this rounding change makes something slightly less accurate somewhere else, but I'm not aware of two abilities belonging to the same god where it was nearly so misleading.) -------------------------------------------------------------------------------- 2b8f59d | DracoOmega | 2024-06-07 00:25:14 -0230 Fix monster Bind Soul tracer including the caster as an eligible target (Even though it never works on the caster). This could cause monsters to cast the spell to no effect. -------------------------------------------------------------------------------- d392c7b | DracoOmega | 2024-06-07 00:25:06 -0230 Fix a couple monster spells using 'true' attitudes instead of current ones Because of using mons_atts_aligned instead of mons_aligned, a charmed monster would still consider their 'real' allies to be allies and not cast these spells against them. (In fact, they might actually use these effects against 'allies' of the same alignment they had been charmed to be. -------------------------------------------------------------------------------- 088aa39 | DracoOmega | 2024-06-07 00:24:59 -0230 Rescale Drain status light colors The thresholds currently used seem to have been derived directly from the numbers used when drain affected skill levels instead of HP and are oddly spaced (changing severity at >0%/5%/10%/25%/50% max HP lost), as well as (in my opinion) giving a false impression of the severity of the effect at low levels of draining. (At least I was surprised that red 'heavily drained' starts at only 10% hp loss, which doesn't seem alarming enough to warrant that label). This commit respaces that to >0%/10%/20%/30%/50%. I'm interested in a few more adjustments to draining formulas, but for now this allows a better visible threshold for when Midnight Pantomime turns off. -------------------------------------------------------------------------------- 38bec8a | DracoOmega | 2024-06-07 00:24:51 -0230 Don't show a warning for moving while confused near ancestors ...and other allies you couldn't hurt even if you stumbled into them. -------------------------------------------------------------------------------- 995e409 | DracoOmega | 2024-06-07 00:24:39 -0230 Adjust some Webtiles text colors Magenta text in webtiles was conspicuously dark, making multiple status indicators unnecessarily difficult to read against the game's black background. (Lightmagenta was also extremely desaturated, and neither looked particularly like their equivalents in local tiles). This commit adjusts these to improve contrast and readability, and also does this to a lesser degree to blues and dark red. (Side note: not a great fan of how many things in this css seem to want to reference a common color specifically, but only do so by copy-pasting it with a name in comments. I've done my best to be careful and keep everything in sync.) -------------------------------------------------------------------------------- 58043dd | DracoOmega | 2024-06-07 00:24:31 -0230 Differentiate Magenta and Lightmagenta a little better in local tiles These two colors were so similar that in practice one couldn't really tell them apart. I've made Magenta slightly darker to help with this (though hopefully not by so much that it impacts readability.) -------------------------------------------------------------------------------- be264ac | elliptic | 2024-06-06 12:43:12 -0400 Let Vehumet support Rimeblight It makes damaging explosions. -------------------------------------------------------------------------------- a65b6e8 | elliptic | 2024-06-06 12:40:57 -0400 Fix fluxform glow description on A screen It doesn't make the player easier to hit. -------------------------------------------------------------------------------- bc65bc1 | NormalPerson7 | 2024-06-05 11:00:46 -0700 Fix ^ screen for Jiyva and Ignis (#3851) Apparently Webtiles uses regular expressions to parse the ^ screen, and it really doesn't like the use of parentheses in strings describing god powers. There is a way around this, but it puts the resistance in the cost column on Webtiles (in the same way as Cheibriados' stat boost), which is unacceptable. Also change "injuring" to "harming" when referring to jellies, for better flavour. -------------------------------------------------------------------------------- c82b5af | David Lawrence Ramsey | 2024-06-04 13:18:34 -0500 Improve speech regarding random classes of gods. A chaotic, evil, and/or good god can now be randomly chosen via the @random_god_chaotic@, @random_god_evil@, and @random_god_good@ entries. The Zin angel's speeches are now updated to use these; for the last, they now preach about the goodness of random good gods. This way, the lists of chaotic/evil/whatever gods no longer have to be manually updated in the monster speech database when a god's class changes in the code (e.g. Nemelex Xobeh's becoming chaotic). As a side effect, if Jiyva is dead, the Zin angel will now no longer preach about "the lawlessness of Jiyva." -------------------------------------------------------------------------------- b2d4fd1 | David Lawrence Ramsey | 2024-06-04 10:59:54 -0500 Fix Grunn speech typo (DevastatorOne). Closes #3854. -------------------------------------------------------------------------------- 795e84f | mumra | 2024-06-04 01:19:13 +0100 Add some Xom dance moves -------------------------------------------------------------------------------- eaf9e87 | David Lawrence Ramsey | 2024-06-03 11:55:21 -0500 Add Xom translucent wall/empty hands messages. -------------------------------------------------------------------------------- 5e68aa8 | NormalPerson7 | 2024-06-02 14:16:02 -0500 Make various small improvements to ability summary on ^ screen - Beogh: add lines for Beogh sending challenges as you gain piety, and explain that they can be recruited if you defeat them; improve various other inconsistencies around ^ for new Beogh - Ignis: explain that Rising Flame is one-use-only - Lugonu: show passive banishment on other gods' wrath - Yredelemnul: explain that light the torch gives allies at 1* - Jiyva: show jellies being peaceful, eating items, and being protected from player damage, and show the Slime Pits unlock at 6* Also move a number of passive abilities with hardcoded descriptions describe-god.cc to the table of god powers in religion.cc. The only abilities left in describe-god.cc are those that have unusual criteria (e.g. Hep frailty), or those whose text changes as you gain piety (e.g. lifesaving, umbra). There remain several minor passives (e.g. Trog's ally protection and berserk extension, Elyvilon's ally lifesaving) which are too minor to appear on ^. [Committer's notes: Squashed. Fixed spacing. Fixed reversed logic that wrongly coloured the convert_orc passive. Fixed piety breakpoint for colouring orc apostle recruitment: it's not 3*, but 0*. Also put all logic that colours passives in the same order.] -------------------------------------------------------------------------------- 251a44d | DracoOmega | 2024-06-02 09:34:41 -0230 Don't give XP for killing hellfire mortars -------------------------------------------------------------------------------- c7fbda7 | DracoOmega | 2024-06-02 09:34:27 -0230 Try to avoid an infinite handle_monsters loop with Hellfire Mortar In some circumstances, it was possible for the mortar to be unable to move, yet not die either, in which case it never consumed energy on its turn and would cause an infinite handle_monsters() loop. While some of the individual causes of this warrant being addressed directly, for now put in general protection so that these should not crash (but simply have the mortar pass its turn harmlessly and expire at the end of the lava effect at the latest). -------------------------------------------------------------------------------- 432df90 | NormalPerson7 | 2024-06-01 13:44:33 -0500 Tweak wanderer good-throwing/good-weapon items Previously, the good set of throwing items for wanderer was 1-4 curare-tipped darts and a +2 dagger. Neither of these scale well with throwing skill, which is likely to be your highest skill. This could also be extremely disappointing if you got 1 curare dart and it mulched immediately. To encourage actually training throwing skill, replace the enchanted dagger with large rocks/javelins/boomerangs (depending on size), up to a total of 7 pieces of ammunition. (Note: this uses the same code as the gladiator background, so small species will get double the number of boomerangs.) Also, the good set of weapon items for all weapon skills had a 4/5 chance of giving a +2 enchantment to a decent-quality weapon (falchion, mace, etc), and a 1/5 chance of upgrading to a good-quality weapon (long sword, flail, etc). In practice this upgrade was rather rare, and starting with a +2 decent weapon is a little too frequent. So let's bump the upgrade chance to 1/3, for the sake of variety. [Committer's notes: Edited commit message.] -------------------------------------------------------------------------------- 78dad2f | David Lawrence Ramsey | 2024-06-01 11:46:13 -0500 Fix spelling. -------------------------------------------------------------------------------- cc7ef84 | David Lawrence Ramsey | 2024-06-01 11:38:06 -0500 Clarify Yred's Black Torch changelog entry. It only summons allies starting at 1*, even though you first get it at 0*. -------------------------------------------------------------------------------- 632b080 | David Lawrence Ramsey | 2024-05-31 16:02:10 -0500 Add a few more chaos manes to artefacts. -------------------------------------------------------------------------------- 426ccd8 | regret-index | 2024-05-31 02:22:46 -0230 Quick vault review Of note: * Replace shrikes in two heavily-themed Elf vaults with walking frostbound and earthen tomes each. They're strong thematic placements, don't get to fire too horribly-dangerously in the high-monster-density narrow corridors arrangements Elf uses, and there's reasonable enough chances to survive long enough to teleport if one's doing Elf earlier compared to those shrikes. * Add a slight pinch of additional variety to profane_halls. * Slightly more insults via newer items and artprops to tgw_lugonu_bribe. -------------------------------------------------------------------------------- bd61dd8 | David Lawrence Ramsey | 2024-05-29 13:37:02 -0500 Add a few more colour names to the database. -------------------------------------------------------------------------------- b82444e | David Lawrence Ramsey | 2024-05-28 19:04:07 -0500 Set proper console colours for conduits. So that all alchemical conduits are poison-coloured, all arcane conduits are Vehumet-coloured, all dimensional conduits are warp-coloured, all earthen conduits are earth-coloured, all fiery conduits are fire-coloured, all icy conduits are ice-coloured, all misfortune conduits are shimmer blue-coloured, all soul conduits are smoke-coloured, and all storm conduits are electricity-coloured. -------------------------------------------------------------------------------- 0e98aa1 | David Lawrence Ramsey | 2024-05-28 16:31:35 -0500 Set proper console colours for statues. So that all scintillating statues are mountain-coloured, all golden statues are yellow-coloured, and all silver statues are silver-coloured. -------------------------------------------------------------------------------- dbcf8a7 | David Lawrence Ramsey | 2024-05-28 00:30:49 -0500 Replace duplicate virtue name in artefacts. -------------------------------------------------------------------------------- d0d00ac | David Lawrence Ramsey | 2024-05-27 17:05:26 -0500 Add a few more Xom staircase messages. Also tweak the code to replace @staircase@. It's in more than one message now, so the optimisation for it is overkill. -------------------------------------------------------------------------------- e9e123d | David Lawrence Ramsey | 2024-05-27 11:24:50 -0500 Add fruit/meat lines for gargoyles/statues. -------------------------------------------------------------------------------- 2b70ce2 | David Lawrence Ramsey | 2024-05-27 09:24:57 -0500 Add another bird name to artefacts. -------------------------------------------------------------------------------- 198796a | David Lawrence Ramsey | 2024-05-26 17:30:21 -0500 Attribute death-spread rimeblight correctly. Closes #3833. -------------------------------------------------------------------------------- 275cc6b | David Lawrence Ramsey | 2024-05-25 19:22:58 -0500 Reenable Xom miscast substrings. Do them efficiently by only doing substring replacements on the message we end up displaying. Also, add substrings back into Xom eye messages. -------------------------------------------------------------------------------- 3085f02 | regret-index | 2024-05-25 21:35:38 -0230 A little more (placeholder?...) spell tile work, new(?) spells edition * Hoarfrost Cannon/ade now uses an extremely modified version of the kobold blastminer's cannon, rather than the diamond obelisk. Eventually, it'd be good to have a semi-crystalline appearance for the cannon, but this should also help with the prior Forceful Dismissal tile not being confused with its current Maxwell's Capacitive Coupling tile. * Bestow Arms uses the rough same icon base as Sheza's Dance, but without the musical notes or many noticeable chips in the main blade. * As future-proofing for other plans, and to help Alchemy's thematic cohesion a little bit more, the Fulminant Prism tile is now themed and coloured as soft fulminating gold, a material well known to western alchemy as both synthesize-able but also mostly highly explosive. (Of course, one can't make prisms of gold, but that's what magic is for.) While I've emphasized that it's 1: magic and 2: soft for it to not count as brittle for LRD purposes, I cannot stop other devs from possibly making it work with LRD anyway in the future if they so desire it. It's a severe tactical error to almost ever do such, considering the spread of different schools involved as well as doing more damage for less MP to just actually place multiple Prisms, so I'd personally prefer to prevent players from even trying to aim for false synergies. * Rename Prayer of Brilliance's tile to its new non-aura name. * Alphabetized the dc-spells.txt file a bit more. Possibly we should be organizing these by spell level and some documentation or UI's order for the spell schools? Not in a rush to figure that out, anyway. -------------------------------------------------------------------------------- 86927b1 | David Lawrence Ramsey | 2024-05-25 14:55:20 -0500 Fix Xom impromptu dance check. Properly use player_has_feet() instead of making assumptions regarding the ability to wear boots. -------------------------------------------------------------------------------- c506da6 | David Lawrence Ramsey | 2024-05-25 10:06:44 -0500 Tweak Xom substitutions. Do the lowercase ones first, as in do_mon_str_replacements(). -------------------------------------------------------------------------------- c2b7583 | David Lawrence Ramsey | 2024-05-25 10:04:45 -0500 Simplify Xom database strings a bit. Only check for empty ones if there's a chance of they're being empty (the feature and body armour ones, if nothing Xom can play with is available). Also, drop substring usage, so we aren't calling maybe_pick_random_substring() a bunch of times; the substitutions are enough. -------------------------------------------------------------------------------- 99e0a4b | Aliscans | 2024-05-25 09:16:04 -0500 mprf("string")/mprf("%s", string) -> mpr(string) Also wrap some long lines. [Committer's notes: Edited commit message.] -------------------------------------------------------------------------------- d3ef473 | David Lawrence Ramsey | 2024-05-24 21:39:11 -0500 Expand Xom hair messages beyond eyebrows. Now you can spontaneously grow facial hair, too. -------------------------------------------------------------------------------- 0fe9cc0 | David Lawrence Ramsey | 2024-05-24 12:52:03 -0500 Only do Xom dances if you can wear boots. It's simpler than the naga species/fishtail check, and the heel-clicking message only makes sense if you have heels to click; assume anyone who can wear boots has heels. -------------------------------------------------------------------------------- cf91537 | DracoOmega | 2024-05-24 14:02:02 -0230 Revert "Prevent enemies from summoning in Okawaru's Arena" There was more opposition to this change than I was expecting from previous discussions. It still feels like Duel could use a little something, but perhaps something else. This reverts commit 28453e28303c8ec3fca004e8f8115febf7e91e70. -------------------------------------------------------------------------------- ae95028 | DracoOmega | 2024-05-24 13:59:21 -0230 Revert "Make living spells count as 'conjured'" Not only did this make living spells remain after the tome they'd come out of was dead, but it caused them to ignore their summon cap. (Further evidence that the functionality of some of these flags could use consolidation and cleanup) This reverts commit 2d6ab54fa9add43c1c3fbb67585905fc1f3aa11b. -------------------------------------------------------------------------------- 157a173 | David Lawrence Ramsey | 2024-05-24 10:41:54 -0500 Add another dance name to Xom messages. -------------------------------------------------------------------------------- 45592c0 | David Lawrence Ramsey | 2024-05-24 10:29:39 -0500 Move Xom's divine lightning msgs to the database. And add two more messages to the original one. -------------------------------------------------------------------------------- c984cbb | David Lawrence Ramsey | 2024-05-24 10:20:37 -0500 Add another Xom shallow water option. It can already briefly boil; let it briefly freeze, too. -------------------------------------------------------------------------------- a78d4ba | David Lawrence Ramsey | 2024-05-23 22:22:12 -0500 Add a few more pattern names. -------------------------------------------------------------------------------- 9654fa5 | David Lawrence Ramsey | 2024-05-23 21:46:31 -0500 Add another Xom metal wall message. -------------------------------------------------------------------------------- a73736a | David Lawrence Ramsey | 2024-05-23 21:36:20 -0500 Expand Xom eye messages beyond monocles. Now Xom can give you eyepatches, too. -------------------------------------------------------------------------------- fdf316e | David Lawrence Ramsey | 2024-05-23 20:36:07 -0500 Simplify high degree corrode chances (mumra). -------------------------------------------------------------------------------- b7e3594 | Monkooky | 2024-05-23 20:34:53 -0500 fix corrosion chances for high degree likely broken in 7d2b172 not likely relevant since only ever applies to wu jian wrath -------------------------------------------------------------------------------- ad1f891 | Aliscans | 2024-05-23 20:26:18 -0500 Don't rest if you're dying in a sanctuary. Refuse to rest if suffering from fatal poison, sticky flames or emergency flight, even in a Zin sanctuary. Before, the game paused for a turn to let these cause damage before stopping. Also remove the word "standing" from "You're standing in..." (you may not have any feet) and split some long lines. -------------------------------------------------------------------------------- a704933 | David Lawrence Ramsey | 2024-05-23 19:43:29 -0500 Move Xom's armour messages to the database. Simplify things by no longer pluralising the message for a robe; it's the only message that uses pluralisation, and adding it for only the one case would be a lot of effort for little gain. -------------------------------------------------------------------------------- 3fb591a | David Lawrence Ramsey | 2024-05-23 15:48:48 -0500 Adjust Xom statue message. Make a statue spin in place instead of doing an impromptu dance, since we don't know what kind of statue it might be (or if it's been redefined). -------------------------------------------------------------------------------- 18e651e | David Lawrence Ramsey | 2024-05-23 15:26:10 -0500 Move Xom's heel-clicking message to the database. Simplify things by not having it require boots anymore, and adding it in the impromptu dance messages, since it could be seen as a dance move. One side effect of this is that you can't do it while airborne anymore, but otherwise it has all the same restrictions as Xom's impromptu dances. -------------------------------------------------------------------------------- 33a4c11 | David Lawrence Ramsey | 2024-05-23 15:11:48 -0500 Fix capitalisation of Xom slot messages. They should only be capitalised if they're at the beginning of the message. Just because all the current messages put them at the beginning doesn't mean that will always be the case. -------------------------------------------------------------------------------- cab03da | David Lawrence Ramsey | 2024-05-23 15:07:05 -0500 Add Xom offhand slot messages to the database. -------------------------------------------------------------------------------- 6b41a1c | David Lawrence Ramsey | 2024-05-23 14:59:18 -0500 Fix basenames for helmet and cloak messages. Using "your" and the basename, as was done before, makes the message shorter, and keeps the "your" part for artefacts. -------------------------------------------------------------------------------- 5f1ab2f | David Lawrence Ramsey | 2024-05-23 14:54:52 -0500 Fix check for having one hand available. Account not for just missing hands, but the offhand slot. -------------------------------------------------------------------------------- 5e7fbf1 | David Lawrence Ramsey | 2024-05-23 14:48:07 -0500 Add Xom helmet slot messages to the database. -------------------------------------------------------------------------------- e64a787 | David Lawrence Ramsey | 2024-05-23 14:41:07 -0500 Move Xom cloak slot messages to the database. To simplify things, use the billowing and head-wrapping messages for both; scarves can billow, and cloaks can wrap themselves around your head if twisted the right way. -------------------------------------------------------------------------------- d3dd8e2 | David Lawrence Ramsey | 2024-05-23 14:27:35 -0500 Move Xom unarmed messages to the database. Add a message referencing both hands for two-handed players. -------------------------------------------------------------------------------- 7f32bf6 | David Lawrence Ramsey | 2024-05-23 12:05:51 -0500 Add Xom's bandage messages to the database. -------------------------------------------------------------------------------- 7bd33a5 | David Lawrence Ramsey | 2024-05-23 11:55:28 -0500 Add proper empty string checks for Xom speech. For the entries that don't have it, just in case speech lookup fails. -------------------------------------------------------------------------------- 1594a75 | David Lawrence Ramsey | 2024-05-23 11:53:47 -0500 Add Xom monocle messages to the database. -------------------------------------------------------------------------------- d359847 | David Lawrence Ramsey | 2024-05-23 11:36:10 -0500 Add Xom eyebrow messages to the database. And do proper substring substitutions on both them and the impromptu dance messages, even though the latter currently has no substrings. -------------------------------------------------------------------------------- 0cf2ae4 | David Lawrence Ramsey | 2024-05-23 11:27:03 -0500 Add Xom impromptu dances to the database. Also add another dance option: the cha-cha. -------------------------------------------------------------------------------- d6ea513 | David Lawrence Ramsey | 2024-05-23 10:43:09 -0500 Add general underfoot messages for Xom. -------------------------------------------------------------------------------- 2164ef0 | David Lawrence Ramsey | 2024-05-23 10:40:29 -0500 Use a ternary operator in another place. -------------------------------------------------------------------------------- 6776932 | David Lawrence Ramsey | 2024-05-23 09:58:48 -0500 Use push_back() in some Xom messages. Instead of emplace_back(), for when we're pushing back a variable. -------------------------------------------------------------------------------- c2c3137 | David Lawrence Ramsey | 2024-05-23 09:32:39 -0500 Disallow Xom tapdances for players who can't act. Since the same restriction applies to players who click the heels of their boots together. -------------------------------------------------------------------------------- b12cf6e | David Lawrence Ramsey | 2024-05-23 09:14:14 -0500 Simplify naming of Xom inventory-related keys. -------------------------------------------------------------------------------- 4c70718 | David Lawrence Ramsey | 2024-05-23 09:09:43 -0500 Fix typo in Xom key (oops). -------------------------------------------------------------------------------- 64b13a4 | David Lawrence Ramsey | 2024-05-23 09:01:54 -0500 Adjust Xom monocle message for one-eyed players. If you've sacrificed an eye, it no longer specifies which eye gets the monocle. -------------------------------------------------------------------------------- 3bc4ff6 | David Lawrence Ramsey | 2024-05-23 08:28:29 -0500 Consolidate Xom inventory item messages. The ones that occur only if there's solid ground under the player and the ones that occur regardless now use the same lines when applicable, and the latter are now in the database. Also, inventory items can now glow random colours as well as flash or vibrate. -------------------------------------------------------------------------------- ddd6be7 | Nicholas Feinberg | 2024-05-22 20:48:40 -0700 Make Zin's altar twinkle I'm making this animation for my own purposes, and wanted to give it back to the source. -------------------------------------------------------------------------------- f31e860 | David Lawrence Ramsey | 2024-05-22 20:15:38 -0500 Move more Xom messages to the database. The item(s) jumping out of your backpack and then back in are now handled. -------------------------------------------------------------------------------- d686d43 | David Lawrence Ramsey | 2024-05-22 19:39:19 -0500 Consolidate two Xom messages. -------------------------------------------------------------------------------- de576c1 | David Lawrence Ramsey | 2024-05-22 19:31:27 -0500 Move more of Xom's messages to the database. This is now done for the messages regarding dungeon features underneath the player. -------------------------------------------------------------------------------- bb75d02 | David Lawrence Ramsey | 2024-05-22 15:17:25 -0500 Wrap overly-long line. -------------------------------------------------------------------------------- 4c66c2f | David Lawrence Ramsey | 2024-05-22 15:13:48 -0500 Tweak for loop condition. -------------------------------------------------------------------------------- d5c3120 | David Lawrence Ramsey | 2024-05-22 15:06:31 -0500 Move Xom's feature messages to the database. Note that this is currently only done for the messages regarding dungeon features surrounding the player. -------------------------------------------------------------------------------- e8832af | David Lawrence Ramsey | 2024-05-22 14:33:08 -0500 Rearrange Xom message checks a bit. -------------------------------------------------------------------------------- 98074d0 | David Lawrence Ramsey | 2024-05-22 14:06:38 -0500 Remove duplicate Xom blood fountain logic (oops). -------------------------------------------------------------------------------- d7423c1 | David Lawrence Ramsey | 2024-05-22 12:59:18 -0500 Add another Xom stone arch message. -------------------------------------------------------------------------------- 4e5cd39 | David Lawrence Ramsey | 2024-05-22 12:42:18 -0500 Add a few more Xom statue messages. Statues can now tapdance the same way the player can. (If the statue is of something with no feet... let's say that Xom finds a way.) -------------------------------------------------------------------------------- 4e96f1f | David Lawrence Ramsey | 2024-05-22 12:39:39 -0500 Fix indentation. -------------------------------------------------------------------------------- 29bc1f9 | David Lawrence Ramsey | 2024-05-22 12:20:00 -0500 Remove unneeded blank lines. -------------------------------------------------------------------------------- 60ba5cd | David Lawrence Ramsey | 2024-05-22 11:59:50 -0500 Make Xom messages account for redefined features. Also, consolidate a few messages. There are still a few oddities, such as "The gravestone turns to stare at you.", but the features are at least named correctly. Closes #3826. -------------------------------------------------------------------------------- a9ead07 | David Lawrence Ramsey | 2024-05-22 11:31:45 -0500 Add another dry fountain message for Xom. -------------------------------------------------------------------------------- f7e3935 | David Lawrence Ramsey | 2024-05-22 10:33:46 -0500 Fix punctuation. -------------------------------------------------------------------------------- 5cf9a61 | mumra | 2024-05-22 03:48:17 +0100 Remind monsters how to open doors A fairly old bug seemingly introduced in 323ad4e. Monsters would open doors under the simplest circumstances (standing right next to them, and/or with an otherwise unobstructed view to the player) but as soon as waypoint pathfinding kicked in, the is_habitable check was happening too early and they never got to check if they were able to traverse the door. Closed doors are not considered habitable (probably since 323ad4e). These checks were introduced to solve an issue with clinging but were not purged in 53d2a09 when clinging was removed. Both checks were duplicated in mons_can_traverse but in the correct sequence to also account for doors. -------------------------------------------------------------------------------- 87cd461 | David Lawrence Ramsey | 2024-05-21 17:31:47 -0500 Add Xom message for metal statues. And consolidate it with the one for granite statues, since they both do the same thing now. -------------------------------------------------------------------------------- 5ce18b4 | David Lawrence Ramsey | 2024-05-21 10:04:28 -0500 Add another pattern name. -------------------------------------------------------------------------------- 5f74a55 | David Lawrence Ramsey | 2024-05-20 23:46:59 -0500 Add another pattern name. -------------------------------------------------------------------------------- 5069440 | David Lawrence Ramsey | 2024-05-20 23:40:33 -0500 Add another Xom message with colour patterns. -------------------------------------------------------------------------------- ce46c55 | DracoOmega | 2024-05-20 21:08:52 -0230 Don't cover stairs with dead hoarfrost cannons (particleface) The puddles from them melting was intended primarily as a minor flavor thing and not something that should be so mechanically impactful as to block off a player's escape from a floor. They now use logic similar to primal wave and replace only plain floor. -------------------------------------------------------------------------------- 16219f1 | David Lawrence Ramsey | 2024-05-20 18:09:25 -0500 Fix typo in alchemy miscast message. -------------------------------------------------------------------------------- 30aeb72 | NormalPerson7 | 2024-05-20 20:18:56 -0230 Fix Hellfire Mortar power cap (#3820) (#3824) Spells implicitly take the lesser of their defined power cap and their corresponding zap's defined power cap when deciding what their real power cap should be. Since Hellfire Mortar is linked to ZAP_HELLFIRE_MORTAR_DIG, which had a cap of 100, Hellfire Mortar erroneously also had a cap of 100. Since it doesn't appear that power actually does anything for this zap, just raise the zap's cap to 200. -------------------------------------------------------------------------------- 08d867e | gammafunk | 2024-05-20 16:49:52 -0500 feat: Unarmed attack ego description for clua Via `you.unarmed_ego()`, which returns a string containing a description of the ego, if any. Takes an optional boolean argument to return a terse ego description, which defaults to false. -------------------------------------------------------------------------------- c81a1b2 | David Lawrence Ramsey | 2024-05-20 16:03:57 -0500 Add a few Xom messages referencing colour patterns. -------------------------------------------------------------------------------- c7163d4 | David Lawrence Ramsey | 2024-05-20 15:56:13 -0500 Tweak wording of necromancy miscast message. -------------------------------------------------------------------------------- 50be89a | David Lawrence Ramsey | 2024-05-20 15:56:13 -0500 Adjust unseen alchemy miscast messages. -------------------------------------------------------------------------------- 48138d7 | David Lawrence Ramsey | 2024-05-20 15:55:39 -0500 Fix spacing of a pattern name. -------------------------------------------------------------------------------- 2ab4ef4 | mumra | 2024-05-20 15:38:21 -0500 Some tweaks and additions to miscast messages * Added some colourful pattern names, which player and monster skin can turn into on alchemy miscasts * Removed some duplication in miscast messages by combining with [one|two] syntax (and removing an outright duplicate) * Change "sparks" message to "cinders" in Fire miscasts as it was already used in Conj * Necromany "shivers with cold" message sounded too much like an ice miscast, so I modified it to "walking over your grave" message * You feel off-balance for a moment: sounded more like translocation so I moved it there * A number of messages were repeated across several miscast types: - Strange energies run through your body: also used in death curses, almost the same as the malmutate message, and also rather similar to magic contamination "wild energies", so I just removed it to avoid being mistaken - Strange surge of energy: removed from Conjurations since it's also used in hexes alongside "magic surges out" - Air crackles with energy: sounds rather more like an electricity effect, but air *wasn't* a school that used it, so I moved it there instead * Added a few minor variations to things here and there -------------------------------------------------------------------------------- 9b32533 | mumra | 2024-05-20 15:37:21 -0500 Txt-ify miscast messages Moving these to their own txt file was reasonably straightforward and makes it now possible to translate them - as well as making it easier to make additional substitutions such as colour names or further randomisations (without having to invoke these lookups unneccesarily for cases that are not using them). This commit replicates the exact messages as they were without further modification. -------------------------------------------------------------------------------- d283c3b | gammafunk | 2024-05-20 11:51:31 -0500 feat: Add unarmed combat damage to clua Via `you.unarmed_damage_rating()`, which returns two values: the damage rating as a number, and the damage rating description as a string. Also add line breaks to l-you.cc to make reading easier. -------------------------------------------------------------------------------- ac1fde5 | David Lawrence Ramsey | 2024-05-20 00:32:13 -0500 Fix typos, spelling, and wording. -------------------------------------------------------------------------------- b66479f | David Lawrence Ramsey | 2024-05-19 22:32:26 -0500 Mention Fedhas' protecting friendly plants. -------------------------------------------------------------------------------- b12068d | David Lawrence Ramsey | 2024-05-19 21:53:01 -0500 Add correct 0.32 up-through version (oops). -------------------------------------------------------------------------------- 3a8b7b0 | David Lawrence Ramsey | 2024-05-19 20:48:56 -0500 Add sometimes-pasta-adjacent food to artefacts. -------------------------------------------------------------------------------- 14f4ba1 | David Lawrence Ramsey | 2024-05-19 20:07:56 -0500 Add 0.32 up-through version to changelog. -------------------------------------------------------------------------------- 1eea0c6 | David Lawrence Ramsey | 2024-05-19 19:58:49 -0500 Fix spelling: bedeviled -> bedevilled. -------------------------------------------------------------------------------- f56e53c | David Lawrence Ramsey | 2024-05-19 19:55:44 -0500 Colourise drag and swarm in monster bot. -------------------------------------------------------------------------------- 2ebb5e6 | David Lawrence Ramsey | 2024-05-19 19:55:32 -0500 Update monster bot for AF_SWARM. -------------------------------------------------------------------------------- d8addd5 | David Lawrence Ramsey | 2024-05-19 19:41:57 -0500 Fix description of DS foul flame mutation. -------------------------------------------------------------------------------- 48eddae | David Lawrence Ramsey | 2024-05-19 19:24:32 -0500 Clarify new Ijyb's description. -------------------------------------------------------------------------------- 2cd1f3e | David Lawrence Ramsey | 2024-05-19 19:23:42 -0500 Fix typos and spelling. -------------------------------------------------------------------------------- 8efb30d | regret-index | 2024-05-19 21:46:11 -0230 Fiddle with the changelog's future (various) Deep Elves getting an innate faster mp regen mutation has been discussed multiple times over 0.32's development, but hasn't actually been implemented yet. Sorry for the confusion. -------------------------------------------------------------------------------- d1fd033 | regret-index | 2024-05-19 21:21:30 -0230 Nudge around some listings and documentation Move Arachne and Wiglaf's sections in uniques.des to the right alphabetical and section positions, mention how we finally have a lava spell and a little more clarity for Air Magic's restrictions in spells.txt. -------------------------------------------------------------------------------- 9412f0f | regret-index | 2024-05-19 21:21:30 -0230 Changelog for 0.32 (up to 78dc6a7) Notes: * I'm probably 33% wordier than others who have written up the changelog before. Some of these overhauls or new spells are pretty complicated, so I think it's fine, but others can abbreviate and alter the changelog as they desire. * I've seen people also lament the loss of Hill Orcs from a flavour perspeective, so I ended up emphasizing "all species can become orcs" in the mentions of Mountain Dwarves thus replacing them multiple times. * We've been a little inconsistent across versions in using Artefact, Item, and Unrand headers. I'm opting for the first two, since that's the most recent changelog's approach. -------------------------------------------------------------------------------- f720f7f | patrick | 2024-05-19 19:38:24 -0400 Decor vaults for Crypt Special request from r-i, ages ago. Contains some that have good loot just lying around, to increase the loot in Crypt, to lure more hapless adventurers to their deaths. Not you, though. You'll be fine. Go in the Crypt. Go in there. Go in the Crypt. Go. Do it. It's fine. -------------------------------------------------------------------------------- 78dc6a7 | patrick | 2024-05-19 16:54:01 -0400 Fix up some shop vaults and add some more 1) Redo the inventory of the elemental shop, since the original theme is long-obsolete now that evokers are unique and in item sets. 2) Touch up the changing room inventory. 3) Tweak the rings in the One Of A Kind Rings now that the MP values for regular randarts have been tweaked upwards. Current values may be ridiculous, I will find out when I get yelled at about it-- 4) Added a generically magic-themed shop with some of the new magic-themed decoration features. 5) Added a multi-shop vault featuring antiques out the wazoo. -------------------------------------------------------------------------------- 91856e7 | DracoOmega | 2024-05-19 15:30:58 -0230 Buff / Fix Rimeblight After 799ce95f6cd29deaeda1c58a8f94fcd328702e82 is was intended that Rimeblight spread to adjacent creatures whenever an infected creature died, but in actuality, this only happened if they died due to the instakill threshold effect and left behind a pillar of rime. As it is extremely common for a monster to go from >20% hp to dead directly, the buff wasn't actually working as intended. I have fixed that now. I suspect this change alone does a very substantial amount to make the spell feel stronger, but in response to feedback, I have also let Rimeblight affect nonliving/undead monsters (with the caveat that they *don't* get the instakill pillar effect, as they have no lifeforce to empower the plague on the verge of their death), and nudged up the low end of its duration and DoT damage by a tiny smidge. Let's see if this finally feels appropriately strong in the proper situations. -------------------------------------------------------------------------------- bb3f4b5 | David Lawrence Ramsey | 2024-05-19 10:25:06 -0500 Checkwhite -------------------------------------------------------------------------------- ab2d129 | David Lawrence Ramsey | 2024-05-19 10:18:31 -0500 Add a message for when the player finds all gems. Use only the miscellaneous colours in it, to avoid duplicate colours as much as possible. Suggested by regret-index. -------------------------------------------------------------------------------- 540c3cb | David Lawrence Ramsey | 2024-05-19 10:02:34 -0500 Fix obsolete orb ego: channelling -> energy. -------------------------------------------------------------------------------- 6251899 | David Lawrence Ramsey | 2024-05-19 09:59:51 -0500 Fix spelling. -------------------------------------------------------------------------------- db9be81 | David Lawrence Ramsey | 2024-05-19 09:48:05 -0500 Remove unneeded blank line. -------------------------------------------------------------------------------- 69e7503 | David Lawrence Ramsey | 2024-05-19 08:42:10 -0500 Don't use mprf() when mpr() will do. -------------------------------------------------------------------------------- 5cb1961 | David Lawrence Ramsey | 2024-05-19 08:10:34 -0500 Add more minor alchemy miscast messages. -------------------------------------------------------------------------------- 732af37 | Nicholas Feinberg | 2024-05-18 23:17:30 -0700 Fix missing mons spell info (DeathSushi) The legend that explains how to read monster spell descriptions was missing. Probably broken since at least df0a5da549d686d (2022). -------------------------------------------------------------------------------- 101ff30 | David Lawrence Ramsey | 2024-05-19 00:25:43 -0500 Tweak wording of new alchemy miscast msgs. -------------------------------------------------------------------------------- 7eaa27f | David Lawrence Ramsey | 2024-05-19 00:04:40 -0500 Add alchemy miscast msgs w/new colours (mumra). Do colour name substitutions on miscast messages so that this works. -------------------------------------------------------------------------------- 5768f22 | David Lawrence Ramsey | 2024-05-18 21:53:39 -0500 Add a few Xom messages for blood fountains. Since there are Xom messages for all the other fountain types. -------------------------------------------------------------------------------- 5aad360 | David Lawrence Ramsey | 2024-05-18 21:37:56 -0500 Add a Xom resurrection line referencing colours. Everything turns monochromatic before Xom saves you. -------------------------------------------------------------------------------- 72dcce5 | David Lawrence Ramsey | 2024-05-18 21:14:19 -0500 Add a few Xom mutation lines referencing colours. Good mutations mention gouts of light, while random mutations mention flashes of light; neither use the monochromatic colours. -------------------------------------------------------------------------------- 3cc3825 | David Lawrence Ramsey | 2024-05-18 20:52:35 -0500 Add a few more Xom messages referencing colours. Water and water in fountains can now briefly flash colours. -------------------------------------------------------------------------------- ecc208a | David Lawrence Ramsey | 2024-05-18 19:33:59 -0500 Make a Xom message use the new colour database. In Xom's list of pseudo-miscasts, instead of making your offhand item flash a lurid colour, make it flash a lurid "randomly chosen colour". As suggested by regret-index. -------------------------------------------------------------------------------- 0db79e9 | David Lawrence Ramsey | 2024-05-18 18:54:38 -0500 Remove unneeded extra "%%%%". -------------------------------------------------------------------------------- f9f58d7 | David Lawrence Ramsey | 2024-05-18 17:49:03 -0500 Add another sky colour name to artefacts. -------------------------------------------------------------------------------- 64db273 | David Lawrence Ramsey | 2024-05-18 17:22:38 -0500 Move colour names into their own database entry. They're now in colourname.txt, and accessible to the speech database in general instead of just Blorkula's dialogue. "rainbow_colour" has the rainbow colours, "misc_colour" has the miscellaneous non-monochrome colours, "mono_colour" has the monochrome colours black, white, and grey, and "any_colour" has a mix of them all. Note that "mono_colour" and "any_colour" aren't used anywhere yet, although they work in perfunctory testing. -------------------------------------------------------------------------------- 31401ee | David Lawrence Ramsey | 2024-05-18 14:48:46 -0500 Add more colour names to Blorkula's dialogue. -------------------------------------------------------------------------------- 7932608 | mumra | 2024-05-18 02:53:47 +0100 Apply defender AC for electrolunge damage Incorrectly the attacker's was being applied instead. -------------------------------------------------------------------------------- 13c1908 | David Lawrence Ramsey | 2024-05-17 11:05:00 -0500 Add yet more colour names to Blorkula's dialogue. -------------------------------------------------------------------------------- 75f53f5 | David Lawrence Ramsey | 2024-05-17 11:03:02 -0500 Fix missorted colour entry. -------------------------------------------------------------------------------- a64f6ba | David Lawrence Ramsey | 2024-05-17 11:02:39 -0500 Add still more colour names to Blorkula's dialogue. -------------------------------------------------------------------------------- 39d9cdb | David Lawrence Ramsey | 2024-05-17 10:31:16 -0500 Add another fruit name to artefacts. -------------------------------------------------------------------------------- 0f580fe | David Lawrence Ramsey | 2024-05-17 09:12:15 -0500 Add more colour names to Blorkula's dialogue. -------------------------------------------------------------------------------- c771b14 | David Lawrence Ramsey | 2024-05-17 08:37:39 -0500 Add another Qazlal Donald line. -------------------------------------------------------------------------------- f3498c8 | David Lawrence Ramsey | 2024-05-17 08:32:57 -0500 Add another thing name to artefacts. -------------------------------------------------------------------------------- f786d49 | David Lawrence Ramsey | 2024-05-17 08:32:26 -0500 Rock melon -> rockmelon (oops). -------------------------------------------------------------------------------- 249f236 | David Lawrence Ramsey | 2024-05-17 08:24:36 -0500 Cantaloupe -> rock melon (jejorda2). Since the latter is the Australian name for the fruit (and associated colour). -------------------------------------------------------------------------------- f657128 | David Lawrence Ramsey | 2024-05-16 21:57:55 -0500 Add a few more fruit names to artefacts. -------------------------------------------------------------------------------- 904c1d6 | David Lawrence Ramsey | 2024-05-16 07:46:29 -0500 Fix truncated ghost brand descs (NormalPerson7) -------------------------------------------------------------------------------- e648739 | DracoOmega | 2024-05-16 05:08:37 -0230 Fix Wiz being listed twice on randart rings of wizardry Was just a visual bug. It still only provided one level of wizardry. -------------------------------------------------------------------------------- e5b5818 | David Lawrence Ramsey | 2024-05-15 21:00:23 -0500 Add yet more colour names to Blorkula's dialogue. -------------------------------------------------------------------------------- b41659d | Kyle Rawlins | 2024-05-15 21:33:33 -0400 Revert "Add a minimum maximum message size" PF committed this without realizing that the code added by 2d7b844e09c6 is recent. That change already adds a default of 1000, and when the option is explicitly set to None or 0, chat is disabled altogether (chat commands still work). This reverts commit 5fb32589bcaf44ddd6ffcb06a6a8ae016db6489c. -------------------------------------------------------------------------------- 37f40e5 | David Lawrence Ramsey | 2024-05-15 19:57:06 -0500 Add still more colour names to Blorkula's dialogue. -------------------------------------------------------------------------------- 4d50775 | David Lawrence Ramsey | 2024-05-15 19:26:11 -0500 Add more colour names to Blorkula's dialogue. -------------------------------------------------------------------------------- 91d48be | DracoOmega | 2024-05-15 21:29:36 -0230 Boost Coglin base Will, replace Will+ gizmo property (Lici) Coglins have often been mentioned as a species that struggles with Will checks, due to their more restricted access to Will+ items while only having baseline Will. I'd been mostly okay with this being a weakpoint of the species, but after some discussion about how this may bias gizmo selection unduely towards whichever ends up with Will+ on it, I've decided to experiment with removing it. There's a fairly limited list of possible bonuses that could replace Will+ in the minor gizmo slot (I feel See Invisible and Flight are too weak to feel compelling, even paired as a minor bonus, and I'd been deliberately avoiding AC/EV and stat upgrades), and what I've settled on for now is Wizardry+4MP. It's possible this doesn't appeals to enough coglins to open up the decision space between gizmos in the way this commit was generally intended, but wizardry on an otherwise-appealing gizmo might specifically incentivize a little hybridization that a player wouldn't have otherwise done, and that feels worthy trying. -------------------------------------------------------------------------------- 8d0d2ce | DracoOmega | 2024-05-15 21:29:36 -0230 Make MP property on randarts not always be exactly +/-9 For variety's sake, more than anything else. The exact range of possible values is now 4-12, though weighted more towards the middle of that range. (The new median is ~7.2, I believe) (Technically this would also affect how much HP randarts could give you if that prop could ever actually appear on them) -------------------------------------------------------------------------------- 5fb3258 | Nicholas Feinberg | 2024-05-15 14:48:41 -0700 Add a minimum maximum message size For chatty cathys. -------------------------------------------------------------------------------- f2d3ae6 | David Lawrence Ramsey | 2024-05-15 13:14:03 -0500 Add yet more colours to Blorkula's dialogue. -------------------------------------------------------------------------------- 2d7b844 | Kyle Rawlins | 2024-05-15 13:55:41 -0400 feat: configurable chat message length limits for webtiles This adds a length cap to chat messages, for one variety of flood control. The initial default is a bit arbitrary. This option will also allow a server admin to disable ordinary chat altogether (doing this leaves chat commands still available). This commit will need a webtiles server restart to take effect. -------------------------------------------------------------------------------- f824865 | David Lawrence Ramsey | 2024-05-15 09:16:49 -0500 Add still more colours for Blorkula's dialogue. -------------------------------------------------------------------------------- ca21d12 | David Lawrence Ramsey | 2024-05-14 16:49:28 -0500 Add more colours for Blorkula's dialogue. -------------------------------------------------------------------------------- 75c6d27 | DracoOmega | 2024-05-14 18:30:41 -0230 Fix Arachne's Greater Ensnare making net traps instead of webs When I was busy testing to see if multiple different trap types functioned with the new temporary trap code, I apparently forget to change this back before pushing... -------------------------------------------------------------------------------- 9761ffe | DracoOmega | 2024-05-14 18:24:02 -0230 Don't block autoexploring through the player's own Toxic Bog Fixes #3813 -------------------------------------------------------------------------------- 144c9d6 | DracoOmega | 2024-05-14 18:13:48 -0230 Give boulders a less insectoid tile This isn't the best-looking rolling boulder, but at least it no longer looks literally identical to a boulder beetle. -------------------------------------------------------------------------------- a792d77 | DracoOmega | 2024-05-14 18:12:25 -0230 Fix a buggy interaction between boulders and nets Since boulders bypass much of normal monster movement code, they happily continued to move while netted. But alas, net status works by assuming there is a net item on the ground of tile the netted monster is located in, which causes various wierdness when they move. Fixes #3763 -------------------------------------------------------------------------------- 3c570bd | DracoOmega | 2024-05-14 16:54:22 -0230 Fix unique kills with Hurl Torchlight not granting extra torch charges Fixes #3733 -------------------------------------------------------------------------------- d3407ee | DracoOmega | 2024-05-14 16:46:07 -0230 Allow evoking the Staff of Olgreb when held in the off-hand (ragingrage) -------------------------------------------------------------------------------- df85cb4 | DracoOmega | 2024-05-14 16:43:02 -0230 Fix MP+/- properties on artifact talismans not updating MP on removal unequip_artefact_effect requires the talisman to actually not be in the active talisman swap before calling it, otherwise calc_mp() will still see the talisman in question and not calculate mp properly. Fixes #3810 -------------------------------------------------------------------------------- f15d36b | DracoOmega | 2024-05-14 16:11:19 -0230 Don't make Blorkula split into bats to avoid going up the stairs After being pacified (whether by Beogh or Ely). Fixes #3815 -------------------------------------------------------------------------------- b1f4dc6 | DracoOmega | 2024-05-14 16:11:19 -0230 *Actually* fix a crash with reflected Flashing Balestra 3f0eabb45ed531f516199376e383c2a5aa0d3e97 was still checking the wrong agent. -------------------------------------------------------------------------------- bb83fb5 | David Lawrence Ramsey | 2024-05-14 00:15:13 -0500 Remove unneeded space. -------------------------------------------------------------------------------- dbf92fe | DracoOmega | 2024-05-14 01:43:58 -0230 Replace RevMP gizmo property with RevMPSaver RevMP's effect was widely considered undertuned, but I'd like *some* effect based on Rev that supports a blaster playstyle, so this is a second attempt. RevMPSaver gives a flat cost reduction to the player's spells based on how revved they are (-1/2/3 MP per rev tier). This effect cannot reduce a spell below 1 cost. This has some related dynamics to the old effect, but notably encourages the player to unload spells *after* melee, which is usually the inverse of what you'd like to do when blasting. If the power of the effect is strong enough, I think that could be a distinctive quirk. Wind up a bit to rapid-fire mid-level conjurations with a hefty discount, or to squeeze the most value out of the last few MP you have in a prolonged battle. Let's see how this iteration feels. -------------------------------------------------------------------------------- a4d4a84 | DracoOmega | 2024-05-14 00:22:12 -0230 Experiment with making bands a little harder to separate Monsters in bands that have a natural leader try to stay within a moderate distance of this leader while wandering about, so that if the leader is chasing after the player, the rest of the band tends to follow (whether they've yet noticed the player themselves or not). But no such protections between band followers and each other exist, which sometimes results in it being straightforward to pick off the members of a band individually without alerting most of them - often without much deliberate effort, if they're already awake. In past, there have been some issues with the functionality of bands that rely on each other for synergy, so I'm curious to try making them a little bit stickier. This commit makes it so that when a band leader would pick a new wander target, if one of their followers is out of sight and seeking a target, they will wander in the direction of that band member instead of randomly. And since band followers already vaguely follow the leader, the band as a whole will tend to move in that direction. There is still a bit of lag time here. The leader still finishes moving wherever they were wandering first, and gets no special awareness of the player (or whatever else their follower was chasing). But it increases the *tendancy* for the rest of a band to follow on a slight delay from the player engaging any part of it. I'm not certain if this change will be impactful enough to be clear to players, or that it will be a mechanical improvement if it is, but things of this nature are hard to know without playtesting, so let's playtest! (This commit also independently fixes a bug introduced by 672eff3212572a203b58ffd4f1e2474d8a40fcfc which made band leader unable to push past their own followers) -------------------------------------------------------------------------------- 92b31c1 | DracoOmega | 2024-05-14 00:07:06 -0230 Remove some seemingly unneeded companion code You can't get orc uniques as companions anymore, after all. -------------------------------------------------------------------------------- bcb4e34 | DracoOmega | 2024-05-14 00:03:01 -0230 Fix a crash-prone way of getting more than 3 apostles at once If you dismissed an apostle who was in a disconnected branch (eg: a portal vault or the Abyss) that the player was not currently in, it would delete their apostle data, but *wouldn't* properly remove them from the interlevel recall list. Officially, they weren't your apostle anymore, but you could still recall them. And if you did, from there on out, whenever they died, the game would crash (as it attempted to update their apostle status to dead, when they no longer had stored apostle data at all). This should fix that problem. -------------------------------------------------------------------------------- 066ad49 | DracoOmega | 2024-05-13 17:02:06 -0230 Give Beogh recruit/dismiss abilities at 0* instead of 3* This is to avoid the unfortunate situation of a player winning an apostle challenge, only to realize they've fallen below 3* and can't actually recruit said apostle. Since these abilities already do not announce to the player that you have them while they're unusable (ie: because you have no one to dismiss or recruit), it should be safe for Beogh worshippers to simply always have them. Apostles still don't show up unless you're at 3*. -------------------------------------------------------------------------------- 2d6ab54 | DracoOmega | 2024-05-13 17:02:06 -0230 Make living spells count as 'conjured' -------------------------------------------------------------------------------- 28453e2 | DracoOmega | 2024-05-13 17:02:06 -0230 Prevent enemies from summoning in Okawaru's Arena Functionally a minor buff, but also flavorfully appropriate: monsters brought to the arena by Okawaru's Duel ability can no longer summon allies and are forced to fight one-on-one, whether they want to or not. This (ideally) blocks abjurable summons, while still allowing marshlights, battlespheres, etc. - just as Oka works for the player. Though given how many different ad hoc ways Crawl has of creating or summoning monsters, I'm not completely confident there aren't false positives/negatives here. But they can be stamped out over time. -------------------------------------------------------------------------------- ea327e7 | DracoOmega | 2024-05-13 17:02:06 -0230 Buff Arachne Perhaps unsurprising in retrospect, but exiling Arachne from Spider resulted in placing her deeper than before, and she just doesn't seem to have been able to keep up. This commit gives her some more AC, a little more HD, raises the cast rate of venom bolt and poison arrow moderately, and also replaces her Ensnare spell with 'Greater Ensnare', which additionally places webs on a random number of tiles adjacent to the target point, whether it misses you or not. The idea is to essentially just make her 'more' of what she already is. (These other webs go away in a handful of turns, so you can't use her to make a huge mess of a level and trap other things afterward) -------------------------------------------------------------------------------- a0239f6 | DracoOmega | 2024-05-13 17:02:06 -0230 Allow placing traps via temporary terrain changes So that things like webs can also be added transiently. (This doesn't work properly for golubria portals, since the ammo property of that 'trap' functions as its duration, resulting in it immediately closing. But it seems to work otherwise) -------------------------------------------------------------------------------- 93184b1 | David Lawrence Ramsey | 2024-05-13 12:44:49 -0500 Actually display equipped scarf of invis (oops). -------------------------------------------------------------------------------- 5d753f0 | David Lawrence Ramsey | 2024-05-13 12:26:34 -0500 Give Coglins invisibility in Fedhas' Mad Dash. Instead of a non-draining amulet of invisibility, which they can't wear, give them a non-draining scarf of invisibility instead. (Adapt code from meatsprint to accomplish this.) The item tile is a recolour of item/armour/scarf1.png, using the palette of item/amulet/artefact/urand_amulet_invisibility.png, and the worn tile is a recolour of player/cloak/scarf_magenta.png. Closes #3773. -------------------------------------------------------------------------------- 6203b1e | DracoOmega | 2024-05-13 11:44:30 -0230 Mention glowing orange brains' brilliance aura in description (namsan) An oversight when I was adding it. -------------------------------------------------------------------------------- bc14699 | DracoOmega | 2024-05-13 11:44:22 -0230 Don't crash when monsters aim hellfire mortar near level boundaries -------------------------------------------------------------------------------- 7caecd6 | DracoOmega | 2024-05-12 04:25:55 -0230 Fix a crash with monsters aiming Hellfire Mortar near the level border The heuristic to decide where to aim it would try aiming at out of bounds squares, causing an assert in beam code. -------------------------------------------------------------------------------- 5152ae1 | DracoOmega | 2024-05-12 03:13:58 -0230 Prevent a crash from casting Hellfire Mortar on level boundary (acrobat) -------------------------------------------------------------------------------- 8b4cc81 | DracoOmega | 2024-05-12 02:10:03 -0230 Don't crash on forcibly displacing the player from a wall (acrobat) This was plausible to achieve by casting Hellfire Mortar several times in a row, progressively deeper into a wall, so that the path from the first cast had closed up by the time the second was closing up. -------------------------------------------------------------------------------- 44bfc33 | David Lawrence Ramsey | 2024-05-11 19:43:24 -0500 Add another chaos name to artefacts. -------------------------------------------------------------------------------- e769ff8 | regret-index | 2024-05-11 21:30:34 -0230 Actually make monster yellow drac bite damage weaker than green stingers Whoops. -------------------------------------------------------------------------------- 87abc83 | DracoOmega | 2024-05-11 20:55:19 -0230 Buff Draconian Stormcallers (and white draconians in general) a little White draconians as a base type have been at the bottom of the pecking order for some time, with a resistable breath type whose damage was lower and had no secondary effects. Also, the HD hack used to make their breath damage lower than ice dragons of the same HD wasn't reflect in xv, causing the game to say they did 3d28 damage when they only did 3d18 (a pretty massive difference!) This commit raises their breath damage to 3d22 and makes xv display it properly. Stormcallers additionally pick up the same trick that Qazlal player worshippers did this patch - being safe from their own Upheaval. They will also be slightly more willing to hurt their allies with it (since summoning even a single wind drake was enough to fully preventing casting it against even an xl 27 player). This should mostly only matter in corridor situations, so still only a modest change. Finally, raise their Upheaval cast rate - it's the spell they're most likely to be unable to cast, so they can get a higher liklihood to use in situations where they can. Their kit is still a bit anti-synergistic with itself, but it's flavourful so this may be a completely adequate improvement. -------------------------------------------------------------------------------- 7bd66db | regret-index | 2024-05-11 20:54:59 -0230 Give monster yellow draconians the players' acid bite aux This adds a bit more consistency to how green draconians have a poison sting aux on both players and monsters. More pressingly, it also gives draconian annihilators a bit more differentiation from deep elf annihilators beyond a trading of high Will for a little more HP and some AC, through letting them have marginally more melee damage and applying a bit more corrosion than prior, as well as between draconian annihilators and the other conjurations-focused classes in the same avenue. (Yellow base draconians are already third in kill statistics, though they're not particularly high compared to red or green base draconians, while black and purple base draconians are noticeably higher. The rough same positioning in the middle of the pack also applies to annihilators. As such, this shouldn't be too dramatic an overall Zot buff.) The damage is slightly lower than the green draconian sting aux, since corrosion is harder to deal with than poison. -------------------------------------------------------------------------------- 6a5d697 | Nicholas Feinberg | 2024-05-11 07:39:47 -0700 Give serpent form rDrown (acrobat) Since they can swim, and for consistency with Mf etc. -------------------------------------------------------------------------------- 12f0f65 | Nicholas Feinberg | 2024-05-11 07:39:47 -0700 Remove unused function in header -------------------------------------------------------------------------------- 2afa0c4 | David Lawrence Ramsey | 2024-05-11 09:15:38 -0500 Fix outdated Dvorak keybind (christakahashi). Closes #3491. -------------------------------------------------------------------------------- df15be1 | David Lawrence Ramsey | 2024-05-11 08:38:17 -0500 Make the chaos spawn temple transparent. -------------------------------------------------------------------------------- 12fa8b1 | DracoOmega | 2024-05-10 21:33:29 -0230 Add a proper targeter for Slouch, display damage per monster Instead of just hilighting all of LoS when aiming the ability, it will now actually show which monsters will be affected by Slouch (ie: indicating that it cannot affect sleeping or stationary monsters) as well as indicate how much damage an individual monster is expected to take, based on its speed. (This should help give players a better understanding of how much speed affects the damage Slouch actually does) Also make the ability's damage description more explicit that this is damage against normal-speed monsters. Unlike spell damage, this is never listed in a format where we only have a few characters to work with, so we're free to be a little more verbose. -------------------------------------------------------------------------------- 8bf067f | NormalPerson7 | 2024-05-10 21:31:15 -0230 Add damage to ability descriptions For the following abilities: - all breath weapons - storm form: blinkbolt - demonspawn: hurl damnation - orb of Dispater: evoke damnation - Beogh: smiting - Cheibriados: slouch (damage against a normal-speed monster) - Ignis: foxfire swarm - Jiyva: oozemancy - Qazlal: upheaval, disaster area - Ru: power leap, apocalypse - Uskayaw: stomp, grand finale - Yredelemnul: hurl torchlight - the Shining One: cleansing flame Makhleb's minor destruction and major destruction are too random to describe in a simple formula in any meaningful way, except potentially we could make it state the average damage in the future. The same applies to Nemelex' cards. In many cases, abstract the power and damage formulae for these abilities to ensure the output damage is the same as listed. This often involves listing the rounded-down damage formula, where abilities use div_rand_round on skill/XL. There are many more abilities that it would be nice to quantify in their descriptions based on the player's current skill but don't fit neatly into the damage category. It would also be nice to list ability noise, and damage at max skill, but since abilities often don't have a clearly defined power-cap and noise is often dealt with elsewhere, this is challenging. Nonetheless, this will hopefully be useful in allowing players to see how their skill/XL affects damage output. Players should remember that there are usually no actual breakpoints and that the damage listed has usually been rounded down. -------------------------------------------------------------------------------- cb1f725 | DracoOmega | 2024-05-10 19:17:02 -0230 Reroll misery clouds from Condenser Vane Instead of simply producing no cloud on that spot at all (and then printing a god message explaining why you got scammed). -------------------------------------------------------------------------------- 0981f75 | DracoOmega | 2024-05-10 19:17:02 -0230 Suppress bad clouds from Xom's cloud trail while worshipping good gods It was possible to get a cloud trail from Xom wrath, while worshipping a good god, and get a cloud type hated by your god, resulting in potentially a huge loss of piety. Now inappropriate cloud types will be suppressed by your current god and turned into salt instead. All good gods suppress miasma and misery, and Zin additionally blocks chaos and mutagenic clouds. -------------------------------------------------------------------------------- cadf65b | DracoOmega | 2024-05-10 19:17:02 -0230 Make Blorkula un-zombifyiable (since he's a vampire now) As hilarious as "Blorkula the Orcula the orc zombie" is. -------------------------------------------------------------------------------- d489c1e | DracoOmega | 2024-05-10 19:17:02 -0230 Don't perform a deathbed conversion on an already-converted orc I'm not sure that this deal with #3808 entirely, since I wasn't able to reproduce the unlinked items part, but in the process of testing, I noticed that an orc could surrender multiple times if you 'killed' them again after they'd already converted. This shouldn't happen, regardless, and *maybe* could be related? -------------------------------------------------------------------------------- 0349025 | DracoOmega | 2024-05-10 19:17:02 -0230 Improve sticky flame messaging while rF- Now it says that it 'burns you terribly' if you have rF-, like other sources of fire damage. Fixes #3789 -------------------------------------------------------------------------------- 3f0eabb | DracoOmega | 2024-05-10 19:17:02 -0230 Don't crash on a Flashing Balestra that kills its own caster (ge0FF) eg: as caused by Ru or presumably amulets of Reflection as well. -------------------------------------------------------------------------------- f13bc15 | DracoOmega | 2024-05-10 19:17:01 -0230 Make Magnavolt beams non-bouncy In most circumstances, this doesn't matter, since the beams are always aimed at a monster and stop at that monster. But if one of the magnetised targets ends up on the other side of a granite statue, you can still see them, but the beam cannot properly reach them, and will rebound off the statue without a warning. Rather than deal with all the targeter issues of properly displaying and prompting the player for these situations (since that would only make the spell feel cludgier), let's just make the beams stop if they can't reach their target. Fixes #3809 -------------------------------------------------------------------------------- f9b02fe | David Lawrence Ramsey | 2024-05-10 15:32:10 -0500 Unbrace -------------------------------------------------------------------------------- 271a355 | David Lawrence Ramsey | 2024-05-10 15:20:41 -0500 Refactor handling of bardings (#3788). Rename player::wear_barding() to player::can_wear_barding(), and make it account for form changes. Also, remove _cant_wear_barding_reason(), and fold its old logic into can_wear_armour(). With this done, bardings can now be properly shown as unavailable when the player could normally wear them, but is in a form that prevents wearing them. -------------------------------------------------------------------------------- 34ef5f1 | gammafunk | 2024-05-10 12:16:58 -0500 feat: Improve lua monster speed descriptions Speed descriptions were made more detailed in e72b690d, but lua was still using the old adjective system. This commit moves the description logic directly into `monster_info` so that it's use for both lua and in-game descriptions. -------------------------------------------------------------------------------- 4ba1219 | David Lawrence Ramsey | 2024-05-10 09:53:36 -0500 Fix inaccurate Lear's hauberk armataur message. They can't wear it, but it's not blocked by their tails as with nagas; it's blocked by their (four) feet. -------------------------------------------------------------------------------- 2fe6b24 | David Lawrence Ramsey | 2024-05-10 09:07:52 -0500 Shuffle and reweight some goblin sharper lines. Bias them somewhat in favour of card deck lines; and less so for deck of punishment lines, dropped card messages, and misplaced card messages. -------------------------------------------------------------------------------- 6b3bedf | David Lawrence Ramsey | 2024-05-10 07:38:13 -0500 Reorganise priestly Makhleb worshippers a bit. Put Asterion at the end of the list, since he's a unique, and simplify the nearby comment. -------------------------------------------------------------------------------- 1dda8f8 | regret-index | 2024-05-10 03:52:16 -0230 Mildly bump up obsidian bat difficulty Cross-referencing objstat's average bat count versus the Orcish Mines death statistics since they're added, they're rather middle-of-the-pack in terms of lethality, despite being rare spawns mostly unique to the branch with a rare gimmick. New monsters don't have to be hyper lethal to justify their continued existence, but it helps a branch with low variety to have a given rare spawn be any much noticeable, so they can do with a little bit more teeth. Obsidian bats get a summon cap of 4 rather than 3, and slightly better damage and defenses all around. They also move from speed 25 to speed 30; there's next to no slow earth monsters any more, so a stone bat being slower than other bats doesn't really fit anyway. -------------------------------------------------------------------------------- c27ebab | mainiacjoe | 2024-05-10 03:52:16 -0230 Add a hat* shop (#3646) "This hats-only shop places two of see invisible, willpower, and intelligence hats, a good_item hat, a randart hat, and either a single unrand hat or a second randart hat. Uses hat tiles that are rarely encountered elsewhere. Since it only places good items, have it show up fairly deep." [Committer's notes: Cleaned up a bit of logic code checking. Since the nostalgia has overflowed so far that the dwarf came back entirely, name the shop after the granny his dialogue mentions as making his hat instead. Also, remove the shop from most Lair branches- Wiglaf didn't show up in water branches and we don't put shops in Spider in general. Snake is fine, though. Vault weight is lower due to showing off previously rather rare tiles and containing all these randarts and unrands, too. In exchange for such increased rarity, it now also gets a coinflip chance to contain a book solely containing Wiglaf's new signature spell. This might be a little too silly, it might be fine. We'll see how this lasts the years. Closes #3646.] -------------------------------------------------------------------------------- c2f12fc | regret-index | 2024-05-10 03:52:16 -0230 Make the orc priest apostles a little more fancy (#3628) To differentiate orc priest apotles more from just being recoloured orc wizards holding the orc priest tablet, give them a bit of shiny trim like high priests have, but with silvery-metal colours and skipping the collar to reduce the chance of it being confused with said high priests (who have gold trim and trim on the collar). Ideally in the future we could get fancier and slightly varying tiles on this front, but this should help for now. Closes #3628. -------------------------------------------------------------------------------- a9bbc2f | David Lawrence Ramsey | 2024-05-10 00:14:28 -0500 Make hell knights properly worship Makhleb. They're priests, but weren't getting the proper god in the priest section of _place_monster_set_god(). -------------------------------------------------------------------------------- 58216f8 | DracoOmega | 2024-05-09 23:11:27 -0230 Fix Hellfire Mortar incorrectly saying no targets were in range (Tavran) It was falsely interpreting "Will not be harmed by lava being created underneath it" with "Will not be harmed by this spell." -------------------------------------------------------------------------------- dfafe49 | DracoOmega | 2024-05-09 22:45:08 -0230 Fix missing break statements in spell usability logic (RelicWraith) Due to an oversight that was then repeatedly several times in a row, a number spells were checking the usability of both themselves *and* every spell implemented after that. I'm impressed this didn't come up sooner, but I guess a lot of these spells are unlikely to be used at the same time by the same character. -------------------------------------------------------------------------------- c2fb2e3 | Nicholas Feinberg | 2024-05-09 11:40:30 -0700 Tweak some spellbooks Make the Tri-Codex thematic again. -------------------------------------------------------------------------------- 635abf7 | David Lawrence Ramsey | 2024-05-09 07:20:31 -0500 Fix wording in formicid no-shafting message. -------------------------------------------------------------------------------- 81c5165 | Nicholas Feinberg | 2024-05-08 18:31:16 -0700 Pluralize Djinn correctly The initial uppercase threw off our pluralise function. -------------------------------------------------------------------------------- f737d81 | Nicholas Feinberg | 2024-05-08 18:28:19 -0700 Partially dedent -------------------------------------------------------------------------------- 0c6998e | Nicholas Feinberg | 2024-05-08 18:18:39 -0700 Partially fix a Xal'krixis line Fix one of two. -------------------------------------------------------------------------------- 5559f47 | DracoOmega | 2024-05-08 21:23:08 -0230 Add a comment to clarify that a function is for UI purposes only -------------------------------------------------------------------------------- b5dd1e8 | DracoOmega | 2024-05-08 21:23:08 -0230 Reorder invalid target messages for Bind Soul So that it will complain about something being an ally before it complains about them being a summon. -------------------------------------------------------------------------------- 598e6e7 | RypoFalem | 2024-05-08 21:23:07 -0230 fix: Bind Soul targeter revealing the true Mara Yredelemnul's Bind Soul ability checks if the monster was summoned and in the case of Mara Summon, this allowed the targeter to show which Mara was not an illusion. Ditto for rashaka's phantom mirror spell. Fix this by ignoring if the monster is summoned for interface purposes when the monster has the phantom mirror enchant (currently the targeter and the displayed potential hp of the bound soul). Also blacklist player illusions from this effect since this new corner case, as far as I know, is the only monster with the phantom mirror effect that is a trivially deducible summon. Is there a better way to do this? [Committer's note: slightly edited a comment for clarity] -------------------------------------------------------------------------------- 5393115 | RypoFalem | 2024-05-08 21:23:07 -0230 fix: blink revealing invisible monsters (Ge0ff) The targeter excluded tiles with invisible monsters. Make it so the targeter only excludes the tile if the player knows there's a monster there. -------------------------------------------------------------------------------- 44e7262 | NormalPerson7 | 2024-05-08 21:22:51 -0230 Improve the A screen for forms For the longest time (likely forever), forms' innate resistances have not been displayed on the A screen with the rest of the form properties, except for poison immunity and torment resistance (which are weirdly specific exceptions). This commit changes that. Resistances will only be displayed where the player doesn't have a (non-suppressed) mutation superseding them. Add the blinkbolt and siphon essence abilities, clarify shadow form's spellcasting penalty and resists, add descriptions of bad forms' offensive and defensive stats, clarify wisp form's "highly resistant" fakemut and add insubstantial, add serpent form's cold-bloodedness, split statue form's slowness and melee bonus, display blade hands' body armour AC penalty, align bat/pig form fast with the mutation. Also, tone down the wording on alive Vp's regen ("accelerated" sounds faster than "unusually fast" to me, even though the effect is 1/4 of "unusually fast"). Add a new `badmuts` field to form-data.h, so that all of the red- coloured "bad" fakemuts can be displayed on A together, and to remove hacky and inconsistent tags in form-data.h. Reclassify some existing fakemuts as bad (e.g. tree stationary, statue slow). Fix bugs with amphibiousness not displaying in permanent forms and poison immunity displaying as an innate fakemut instead of a form fakemut for some forms, which were caused by the addition of permanent forms in 0.31. Fix fungus form having rN+++ even though plants and wandering mushrooms no longer have this. -------------------------------------------------------------------------------- 31df86b | NormalPerson7 | 2024-05-08 21:22:33 -0230 Add Permafrost Eruption as a monster spell for servitors/ghosts Modelled off the code for Plasma Beam, as Permafrost Eruption is similar (lvl 6, two blasts, automatic targeting). I have set the damage to be about 70% of that of monster Plasma Beam, accounting for the fact Permafrost Eruption doesn't miss, and noting that a similar ratio exists for the player spells. We can always tweak this later. Servitors will cast this spell, with priority set just below Plasma Beam and just above Fireball (I figure it should be a bit stronger than monster fireball, but the close targeting restriction will make it slightly more awkward for servitors to have than Plasma Beam). Player ghosts will also have it; perhaps at some point a unique will get it too. [Committer's note: fixed a minor oversight in the tracer using a player instead of monster zap, and nudged monster permafrost damage up a small amount] -------------------------------------------------------------------------------- 2c08040 | caryoscelus | 2024-05-08 21:21:18 -0230 Fix formicids able to shaft while in non-mutaion-preserving forms Previously, if formicid character was in a form that disables mutations, ability menu would remove both Dig and Shaft self, but the latter was still possible by using ability quiver. Now this workaround is removed. fixes #3776 -------------------------------------------------------------------------------- 2164d10 | DracoOmega | 2024-05-08 18:11:29 -0230 Tiny formatting change to recent xv improvements List damage for quivered throwing items AFTER normal attacks instead of before. (It seemed better to have 'attacks which are always there' come predictably first to me). Also insert a line break above the attacks table for a slight improvement in visual clarity. -------------------------------------------------------------------------------- 080bef2 | NormalPerson7 | 2024-05-08 16:59:46 -0230 Show monster staff damage in x-v; let them use staves of conjuration Magical staff damage works differently to weapon brands, and it was previously extremely obscure how much bonus damage a monster could deal with its magical staff. I imagine complaints about this were limited by the fact that only Arachne, Fannar, Josephina, and Jorgrun have high chances to actually come with a magical staff. Add the max bonus damage from a magical staff to the x-v screen, where the brand information is provided for weapons. I have attempted to provide a suitable descriptor for the type of damage in each case, though "earth" and "conj" I admit are quite weak. Unlike all the other magic skills used by magical staves, monsters were not previously allocated any conjurations skill, so they would never get any bonus damage from staves of conjuration. I imagine this is due to staves of conjuration only gaining a melee effect in 695e311. Give them conjurations skill equal to the other elemental schools. -------------------------------------------------------------------------------- ce9c828 | NormalPerson7 | 2024-05-08 16:59:46 -0230 Remove separate quiver line in x-v Missiles are now shown in the Throw line of the attack table, and for special darts and throwing nets, they are also described in the unusual item description. Thus, the line "It is quivering javelins." or similar is now redundant. -------------------------------------------------------------------------------- 9a59075 | NormalPerson7 | 2024-05-08 16:59:46 -0230 Completely fold monster throwing/ranged into the x-v attack table When a monster wields a ranged weapon, the x-v attack table previously implied the monster could hit you with that weapon. Now explicitly show this as "shooting" the weapon, and include archer bonus damage in the Max Damage column of the table. Also special-case Nessos so that his extra venom brand is displayed in the Bonus column. When a monster quivers a throwing weapon, add an extra line to the top of the attack table describing the monster's throwing attack, which takes into account brand effects, slaying and archer bonus damage. Silver will display its extra damage against the player in their current mutated state. This permits the removal of the extra text for the archer flag and Nessos, which was always very easy to miss anyway. Example: yaktaur captain, +0 arbalest, silver javelins Immediately before this commit: Attack Max Damage Hit: +0 arbalest 45 It can deal up to 18 extra damage when attacking with ranged weaponry. Now: Attacks Max Damage Throw: silver javelins 57 + 19 (silver) Shoot: +0 arbalest 63 -------------------------------------------------------------------------------- c2b490d | NormalPerson7 | 2024-05-08 16:59:46 -0230 Include slaying equipment in monster damage on x-v The real calculation (attack::calc_damage) is able to access monster::scan_artefacts, but for some reason the x-v descriptions use a monster_info object instead, which isn't able to access this method. Thus this requires a new function to duplicate monster::scan_artefacts for monster_info. -------------------------------------------------------------------------------- d582849 | NormalPerson7 | 2024-05-08 16:59:46 -0230 Improve x-v for AF_PURE_FIRE, AF_DRAIN; fix damage being off-by-one AF_PURE_FIRE was previously very unclear about the fact that the Max Damage number is actually all fire damage and that there is no bonus fire damage. Fix this by removing the "bonus" column from AF_PURE_FIRE and listing the damage in the Max Damage column as fire. AF_DRAIN previously did not list its max damage, even though it did extra damage. [Sidenote: draining effects are weirdly inconsistent: for monsters, AF_DRAIN deals up to damage/2 half the time, draining weapons do this all the time, whereas for players, draining weapons do 2-4 + damage/2 but only half the time.] Most importantly, the formula for melee damage dealt by monsters is damage = 1 + random2(monster attack damage) + random2(weapon base damage) + enchantment/slaying roll when monsters have a weapon, which has a max of max = monster attack damage + weapon base damage + ench/slay - 1 but the -1 was not being reflected in x-v. Fix this. Future commits will incorporate slaying into x-v damage numbers, and improve the display of ranged and throwing weapon damage on x-v by folding it into the attack table. -------------------------------------------------------------------------------- 983892f | NormalPerson7 | 2024-05-08 16:59:45 -0230 Add monster weapons and brand damage to x-v In 3dd9dd1, monster attacks were put into a table after many descriptions got too long. However, in the process we lost most monster weapon brands from being shown on x-v at all. The result was that the "max damage" number shown on x-v was often a lie, and there were only two ways to check monster weapon brands: (a) reread the message from when a monster enters LOS for the first time (but note, this currently doesn't display when entering a new floor sometimes due to a bug), or (b) use x to examine the monster, but this only works when in LOS. Let's take advantage of the new table setup in two ways: firstly, rather than "(w/weapon)" being shown for every monster weapon attack, list a monster's weapon's terse description in the Attacks column after "Hit", and secondly, add the max damage from the monster's weapon brand to the Max Damage column. To make this all fit on the 80-character wide description UI, make the column widths adjust themselves to the width of the text in the columns. Where this still isn't good enough, truncate the weapon description, as this is the least important part of the table. Example: Norris, wielding a +2 demon trident of draining. Previously: Attack Max Damage Bonus Hit 48 Cause confusion Now: Attack Max Damage Bonus Hit: +2 demon trident (drain) 48 + 24 (drain) Cause confusion -------------------------------------------------------------------------------- a94dba6 | DracoOmega | 2024-05-08 16:33:12 -0230 Properly attribute blame to Blorkula for their bats -------------------------------------------------------------------------------- af1361e | DracoOmega | 2024-05-08 16:33:00 -0230 Remove status effects from Blorkula when they turn into bats While some things like haste could arguably make sense, it feels rather silly to have Blorkula split while petrifying and then reassemble themselves 20 turns later while still petrifying. -------------------------------------------------------------------------------- c66c6fa | DracoOmega | 2024-05-08 16:30:58 -0230 Fix a Hellfire Mortar crash It is possible that the target of the second bolt of magma in a turn will be dead by the time it comes to fire on it (probably because it was also in line of the first bolt, even if not its primary target). Instead of assuming each target we picked is alive, double-check and then skip to the next candidate, if the original is dead and one exists. That way the mortar won't sometimes appear to mysteriously only fire once, even when a viable second shot clearly exists. -------------------------------------------------------------------------------- d4bb481 | David Lawrence Ramsey | 2024-05-08 11:24:59 -0500 Adjust Donald Vehumet message. Now that the Hellfire Mortar spell exists. -------------------------------------------------------------------------------- d162682 | David Lawrence Ramsey | 2024-05-07 18:33:09 -0500 Fix spelling. -------------------------------------------------------------------------------- b87f078 | David Lawrence Ramsey | 2024-05-07 18:24:59 -0500 Fix old comment references to Blork. -------------------------------------------------------------------------------- 4931952 | David Lawrence Ramsey | 2024-05-07 18:24:06 -0500 Fix old speech references to Blork. -------------------------------------------------------------------------------- ce087b8 | David Lawrence Ramsey | 2024-05-07 18:18:19 -0500 Remove leftover Blorkula aliases. He's undead now, and can't be polymorphed, so he doesn't need them anymore. -------------------------------------------------------------------------------- df7bd89 | David Lawrence Ramsey | 2024-05-07 18:10:51 -0500 Fix punctuation. -------------------------------------------------------------------------------- 6663129 | David Lawrence Ramsey | 2024-05-07 18:10:25 -0500 Fix spelling. -------------------------------------------------------------------------------- 169130f | DracoOmega | 2024-05-07 20:20:27 -0230 Give polterguardians an actual melee attack Believe it or not, it wasn't intentional that they didn't have one. It should still be fairly tame, but there's few monsters in Crawl that can't hit you at all from melee. -------------------------------------------------------------------------------- 6fc613a | DracoOmega | 2024-05-07 20:20:27 -0230 Give glowing orange brains an *actual* aura of brilliance Using the new easy aura framework, brains provide the empowered spells buff to nearby allies so long as they are alive. Unlike Prayer of Brilliance, this affects any monster that is antimagic-vulnerable (ie: it also works on demons and other natural spellcasters, like eyes). This gives them an interesting support function and also makes their summoning feel a little more different than other Shadow Creatures users. Additionally, they get the 'cautious' flag. Despite a synergistic spellset that sounds scary in theory, brains often would spend most of their turns simply walking up to let the player punch them (and they don't even have a melee attack!). This makes the combination of summons/disruption/fear a little more likely that the player has to consider how to answer. -------------------------------------------------------------------------------- 7553c99 | DracoOmega | 2024-05-07 20:20:27 -0230 Tweak Cloak of the Thief While noise suppression is a powerful effect, many players felt uncomfortable using this item now that it had an even greater slaying penalty than the old version. But it occurred to me that Quiet is already less useful on the sorts of characters most affected by -slay, so let's try making it give a moderate MP reduction instead (since Quiet is strongest on casters). -------------------------------------------------------------------------------- 408b925 | DracoOmega | 2024-05-07 20:20:26 -0230 Fix Marrowcudas having 1 will An oversight from being initially copied from skeleton's stat block. 10 will is still deliberately very low, but 1 felt silly. -------------------------------------------------------------------------------- 03a3b74 | DracoOmega | 2024-05-07 20:20:26 -0230 Remind Xak'krixis to dress themselves (Mostly by accident, they weren't given a robe or any other body armour. I don't expect changing this has much practical effect.) -------------------------------------------------------------------------------- eae4683 | DracoOmega | 2024-05-07 20:20:26 -0230 Replace Deep Elf Elementalist Freezing Cloud with Hoarfrost Cannonade Freezing cloud wasn't a very functional spell on these enemies. Because of the unpredictable splash of monster cloud spells, the elementalist would often refuse to cast it at all (even in an open room with no one else around!) for fear of hitting themselves. And then when they did, it was often more dangerous to the elementalist (or other elves) than it was to the player. Let's try replacing it with a different ice spell that has neither of these problems. I am letting monsters 'cheat' and create the cannons centered around their foe, rather than themselves (both so that they can do something with it when there's a pileup of other elves in the way, and so it's less trivial for the player to just stay out of range of them). -------------------------------------------------------------------------------- 033698f | DracoOmega | 2024-05-07 20:20:26 -0230 Make Hoarfrost Cannonade monster-castable To keep monster from wasting their cannon charge-up, they will only recast the spell if no existing cannon of theirs is in sight of their foe. (Getting the cannons to disappear on the death of their creator involved some fairly ugly hacks, since the main method of doing this explicitly only works on things which are abjurable. In the future, it would be nice to unify the various non-abjurable things that go away on creator death (ie: tentacles, battlespheres, vines, spectral weapons, and now this) instead of each one being handled essentially in its own one-off way. This commit modifies monster::is_summoned to retrieve the summon type of a creature regardless of whether they're abjurable or not (since many non-abjurable things set this!). It was unclear to me why it would only do this for abjurable things. Since the return value of the method is unaffected, I don't THINK this changes the semantics of anything currently using it. -------------------------------------------------------------------------------- 95e6ca3 | DracoOmega | 2024-05-07 20:20:26 -0230 Wiglaf has returned for his hat (and brought a very big gun) Along with the return of playable mountain dwarves, it seemed like a good joke to bring back an iconic mountain dwarf unique at the same time, just so long as there was something interesting for Wiglaf to *do* and I think I may have found that. Wiglaf can now cast Hellfire Mortar, a thematically appropriate (and hopefully fun) spell. They've lapsed a little in their worship of Okawaru, losing Haste to keep them from overlapping with modern Donald too much (but still know Might). They always spawn with a good randart hat and since, well, everyone knows Joseph *took* that hat, they alternate with him as a unique pair. A tiny bit of their dialogue was restored from the old days, but after trimming out the cliche drunkenness and vague racism, the vast majority of it is new. I did my best to manage scottish eye dialect in a similar style; not sure if I have gone overboard or not. Implementation note: it's impossible in a conventional way for a monster to have a hat and a shield at the same time, even using the 'usual' hack used for Nikola's gloves. So I have shoved Wiglaf's hat into his jewelry slot, which I dislike rather a lot. But I'm reasonably sure that it works properly. -------------------------------------------------------------------------------- 8d931bd | DracoOmega | 2024-05-07 20:20:26 -0230 Implement monster-castable Hellfire Mortar (and fix some more bugs) This uses a 'probably smart enough' heuristic for determining where to launch the thing (since it can't simply shoot it directly at its target). In testing, it seemed to do a pretty decent job of it. Also fixed: -Cast messages for the morter firing at things sometimes being wrong -Being able to turn the level boundary into lava with it (This was less disasterous than you'd expect, since the morter still wouldn't enter it, but it could give you extra turns of it firing in place while it tried and failed) -Not actually generating the giant noise that the spell implied was happening -------------------------------------------------------------------------------- a698059 | DracoOmega | 2024-05-07 20:20:26 -0230 Don't trap monsters in walls via Hellfire Morter (ge0ff) To my surprise, while terrain changes expiring were happy to place the player in a wall, it simply doesn't revert at all if it would put a monster in a wall (and thus would remain lava forever). Instead, use the same approach to try to push the monster out of the new wall with increasing levels of force that was done by 706e7c35db215fc7c8d9ae1040d2b281f451c2de (now generalized to use the same code) -------------------------------------------------------------------------------- 10a0961 | DracoOmega | 2024-05-07 20:20:25 -0230 Properly ascribe blame for deaths due to exploding monsters This was broken since 3dd439832fe0f5fe295caad1a2fe3e479a757cda which caused all ikiller information for deaths caused by exploders (ie: ball lightning or fulminant prisms) to be lost. This isn't conceptually trivial to fix, as now the monster responsible for the explosion will already be cleaned up by the time the explosion happens (and the entire blame chain was stored inside that monster). The fix I've settled on is to maintain a very transient cache for copies of monsters that are about to explode. If a scorefile_entry tries to look up a monster by mid and fails, it will look at this cache instead so that it can find the dead monster's info as it was when the final_effect was first scheduled. (This cache is cleared as soon as fineffs are done processing, so there shouldn't be any need to worry about its state.) It's possible there is some other class of fineff that could benefit from using it, for similar reasons, but this wasn't immediately obvious to me. However, this should once again let us see whose fault these deaths are. (Fun fact: I'd thought that Xak'krixis was wildly underperforming, but apparently a full 90% of their kills weren't being attributed to them. Poor Lom also lost out on ~30% or so of their kills since the original commit). -------------------------------------------------------------------------------- 7e7c522 | DracoOmega | 2024-05-07 20:20:25 -0230 Actually attribute banishment kills to their source In practice, this doesn't actually change very much that I can see (unlike what the deleted comment implies, you don't appear to double-dip on xp even with a non-anonymous source.) but does allow a few monster-specific death effects to check if the player was the one doing the banishing. -------------------------------------------------------------------------------- 76af017 | DracoOmega | 2024-05-07 20:20:25 -0230 Blork the Orc -> Blorkula the Orcula As part of the Beogh overhaul, it seems like a good idea to demonstrate that some orcs other than just the player have non-orcish heritage, and this was one of the funnier options. Blorkula also gets a new gimmick to go with being a vampire: when he would otherwise die, he instead splits into multiple (randomly colored!) vampire bats. The player has a modest length of time to kill these bats before they pull themselves back together into a healthy Blorkula once more. (There is a lengthly cooldown so that he cannot do it again immediately, but will regain that ability if the player is forced to flee). He also gains a modest vampire bite aux and adds Sting, Sandblast, and Shock to his spell repertoir (specifically in keeping with the recent greater emphasis on his 'obsessed with different colors' theming). This definitely makes Blork more dangerous than before, but he is currently the statistically least dangerous unique of his depth range, so there is probably a fair bit of headroom to buff him without concern. I have still nudged him down a floor, out of caution. We'll see if this works out appropriately enough. (I also edited a handful of dialogue lines, both to mention the Beogh conversion history and to cut out the specific implication that his suspenders are somehow magically empowering him - he's got enough other theming going on now.) -------------------------------------------------------------------------------- 7ff33ff | DracoOmega | 2024-05-07 20:20:24 -0230 Add methods to follower class to simplify storing in a prop It's easy to store both monsters and items in props, but because of how Crawl handles monster inventories, very tricky to store a monster that is *carrying* items in a prop. Follower wraps some of this process, but cannot be stored directly. This should help a little. -------------------------------------------------------------------------------- bb4d5d8 | David Lawrence Ramsey | 2024-05-07 13:19:36 -0500 Add bird name to artefacts. -------------------------------------------------------------------------------- 60eeae6 | gammafunk | 2024-05-07 11:05:29 -0500 feat: Buff evocable invisibility Items like the scarf of invisibility and +Inv in general have been seen by many players as not competitive with other items/properties for a while now. Invis on demand is very strong and I believe still underrated for combat situations by even experienced players. However +Inv requires high evocations investment just to receive a passable fail rate has a significant drain cost on top. We do want +Inv to require evocations investment, and drain is still the best option to limit spamming the ability without care, but better balance can be had. This commit reduces the fail rate's dependency on evocations by 1/3, the same fail rate as +Blink, and reduces the drain cost by 1/3. Hence with 4/8/12 evocations skill, we get 14%/6%/1% fail rates. Complaints about the drain cost are less prominent than complaints about the ability fail rate, but hopefully cumulatively these buffs make players consider using +Inv a bit more. -------------------------------------------------------------------------------- 4fd57f6 | David Lawrence Ramsey | 2024-05-04 21:17:34 -0500 Use @the_monster@ instead of the @monster@. -------------------------------------------------------------------------------- d771f2e | David Lawrence Ramsey | 2024-05-04 21:01:03 -0500 Add missing comments to goblin sharper dialogue. In order to indicate all deck types. -------------------------------------------------------------------------------- d2cf461 | Aliscans | 2024-05-04 17:20:23 -0500 Fix a message for items giving magic regeneration. Before, the game referred to "your injured body" if you tried to wear an amulet of magic regeneration when your health and magic were both below their maxima. The message for that item no longer mentions your physical injuries. -------------------------------------------------------------------------------- b508db4 | David Lawrence Ramsey | 2024-05-04 17:07:51 -0500 Port over fix for god speech substitution syntax. Originally from e6c31236d680a93faaff0604426160384db98a5a. -------------------------------------------------------------------------------- 39e6045 | Nicholas Feinberg | 2024-05-04 15:03:36 -0700 Revert "Identify un-ID'd randbooks when read" (Aliscans) Obsoleted by events. This reverts commit c751ee2058a0c833a17201e2928c0dc67b7c4c61. -------------------------------------------------------------------------------- c4a1ec1 | DracoOmega | 2024-05-04 19:26:44 -0230 Fix Repel Missiles expiring off of monsters (ge0ff) The repel missiles status was recently made to decay with time (as part of the aura rework and polterguardians). I had assumed as the time that the permanent repel missile status used by Deep Elf Archers and co was already set to INFINITE_DURATION, but it was not, and now unintentionally expired with time. -------------------------------------------------------------------------------- 5b11573 | DracoOmega | 2024-05-04 19:26:44 -0230 Fix a possible crash when casting Hellfire Mortar I hadn't noticed this was before the general null check (but it has to be above the normal BEAM_DIGGING check too, since it only ignores SOME monsters) -------------------------------------------------------------------------------- 94f45d3 | Nicholas Feinberg | 2024-05-04 13:25:16 -0700 Remove Haste Plants (Ge0ff) Again. -------------------------------------------------------------------------------- 029dca9 | gammafunk | 2024-05-04 09:30:25 -0500 feat: Add monster door usage info to clua The `can_use_doors()` method indicates whether the given monster can ever use doors. -------------------------------------------------------------------------------- 04caa86 | David Lawrence Ramsey | 2024-05-03 20:24:18 -0500 Fix comment typo. -------------------------------------------------------------------------------- e7eec5b | David Lawrence Ramsey | 2024-05-03 18:44:46 -0500 Fix some Rimeblight messaging for named monsters. So we no longer get e.g. "Shards of ice erupt from the Erolcha's body!" -------------------------------------------------------------------------------- a27d981 | David Lawrence Ramsey | 2024-05-03 18:33:23 -0500 Fix wording and punctuation. -------------------------------------------------------------------------------- a89ee85 | David Lawrence Ramsey | 2024-05-03 18:26:06 -0500 Use @reflexive@ more in monster spells/speech. -------------------------------------------------------------------------------- b4e814a | DracoOmega | 2024-05-03 20:45:30 -0230 Fix some typos (Namsam) The most delayed typo fix ever, sorry. -------------------------------------------------------------------------------- f843a72 | DracoOmega | 2024-05-03 20:45:30 -0230 Fix Rimeblight and Bestow Arms icons not displaying in webtiles -------------------------------------------------------------------------------- 799ce95 | DracoOmega | 2024-05-03 20:45:30 -0230 Tweak Rimeblight a little more heavily Increased the infection chance from rimeblight explosion from 1/2 to 2/3. Monsters that die to rimeblight now also have the same chance of spreading the disease to adjacent creatures (without accompanying damage) to avoid the awkward situation of you otherwise wanting to keep weak things alive long enough for them to become contagious (without adding death explosions that risk making it feel too adjacent to inner flame). You can no longer aim the spell through some of your allies (this was always an oversight). More significantly: explosions and disease spread no longer happen out of line of sight. Previously, the most powerful use of this spell was to unleash it on a group and then get the heck away so that they would slow die to each other while the player was safely away. While we do allow some high level spells to have this capability, it feels like there's a lot more risk baked into, eg: Discord, to counterbalance this. I'm a bit uncomfortable with this being the primary use-case for Rimeblight, and want it to feel sufficiently attractive to use while standing around for a fight. (The internal ice damage still occurs while out of sight, in the same way that poison still works out of sight) I also increase explosion damage somewhat (though note that the increased rate of spread is fairly significant). We'll see how this updated version feels to use. -------------------------------------------------------------------------------- a603194 | DracoOmega | 2024-05-03 20:45:30 -0230 Lightly tweak Fulsome Fusillade Make the first volley not cost an additional 2 mp beyond the casting cost (this was always unintentional), end the effect immediately the first time the caster lacks the mp to sustain it (instead of remaining 'on standby' for a while while their mp regenerates) and nudge up its damage a tiny bit. -------------------------------------------------------------------------------- d6975a0 | DracoOmega | 2024-05-03 20:45:30 -0230 Tweak Curse of Agony description for clarity Some people found it ambiguous whether you needed to hit the monster twice to make it trigger once. Hopefully this makes it more obvious that you get two separate triggers per cast. -------------------------------------------------------------------------------- e8f8732 | DracoOmega | 2024-05-03 20:45:30 -0230 Remove an unused bolt member Since it stopped being necessary to warn the player about whether a beam could destroy a tree. -------------------------------------------------------------------------------- 706e7c3 | DracoOmega | 2024-05-03 20:45:30 -0230 Improve behavior if player ends up in a wall due to terrain changes Instead of instantly randomly teleporting the player, try to simply shove them out of the way of the wall first (and, failing that, try to move them somewhere in los range first). There were probably other situations this could previously happen, but it's easier to do deliberately now because of Hellfire Mortar. Now the player should almost always be gracefully pushed backwards instead of being able to trigger an instant teleport this way. -------------------------------------------------------------------------------- f64a43d | DracoOmega | 2024-05-03 20:45:30 -0230 Hellfire Mortar (level 7 Fire/Earth spell) A replacement for seismic cannonade from the other direction. This spell creates a line of temporary lava in a chosen direction (even through walls in that direction) and spawns a mortar that moves along that line of lava, firing autonomously at nearby targets while it does so. The mortar fires bolts of magma at up to 2 different random enemy targets each turn, then moves 1 tile further along the path that was carved out for it. When it reaches the end of this path (or a monster blocks its attempt to move), it will disappear. Given that it acts entirely autonomously over a short duration, I have decided that it is closer to a foxfire or battlesphere than it is to a lightning spire in terms of whether Okawaru forbids it or Vehumet supports it. I could see arguments in the other direction, though. Also: enough years have passed since Hellfire was renamed Damnation that it is safe to use for something else again, right? (And this time, it really *is* doing fire damage...) -------------------------------------------------------------------------------- 7561cb4 | DracoOmega | 2024-05-03 20:45:30 -0230 Fix a couple missing message recolorings And remove code that was no longer called. -------------------------------------------------------------------------------- 66f656e | DracoOmega | 2024-05-03 20:45:30 -0230 Seismic Cannonade -> Hoarfrost Cannonade (lv 5 Ice/Alchemy) Seismic Cannonade was generally poorly received. There was some lack of clarity about needing to charge 1 cannon versus all cannons, perception that its damage was inadequate because so much of it was back-loaded, and I personally felt like the possibility of 'missing' your shockwave attack due to the cannons timing out unless you cast it immediately upon reaching full charge was unfortunate. I don't think the idea was unsalvageable (and simply raising damage and charge rate might have done a lot for it), but I've decided instead to shift element and try using this to address another gap in Crawl's spell library instead. (High level earth will get another new spell shortly instead). Until the recent Permafrost Eruption, there was literally only a single offensive Ice spell between Frozen Ramparts and Ozocubu's Refrigeration. That did a bit to help Ice's midgame being so incredible centered around Freezing Cloud, but an additional option at 5 should help midgame diversity. Hoarfrost Cannonade summons 2 hoarfrost cannons which shoot long-range shards that inflict the Frozen status on enemies. It inherits a greatly simplified form of charge-up mechanic compared to Seismic Cannonade: the cannons start at full health, but each shot the cannon fires consumes a chunk of this health. If it survives to fire a 5th and final shard, that shard will explode for greater 3x3 AoE damage. No manual recast or tracking needed, but the player is still incentivized to protect the cannons to let them get their biggest hit off. (The explosion does no damage to friendlies since its automatic nature would otherwise make it likely to either whiff or hurt you). (Also: more for flavor reasons than anything else, when the cannons fade away, they briefly leave a small puddle of water behind.) This generally fits the tone of Ice doing 'damage over time', while still being very different than Freezing Cloud. Let's see how this one goes over. -------------------------------------------------------------------------------- f3e26c5 | DracoOmega | 2024-05-03 20:45:30 -0230 Increase the effectiveness of the Frozen status Frozen was applied as a side-effect of Flash Freeze and Creeping Frost, but didn't have very much impact. It lasted 2-4 turns and increased move delay by 3 aut, meaning that even if you moved every one of those turns you were penalized, you'd lose less than 1 turn on average. In most situations, I think it barely affected how the player should conduct themselves. If a debuff is going to exist, I think it should be easier to notice that it did something, so let's try ramping it up slightly. Frozen now lasts 3-5 turns instead, and increases move delay by 50% (identical to being slowed). This is fairly conservative, but it's a nice round number with existing precedent. Frosthearts are already fairly scary as-is, so I've nudged their HD down by 1. This may not turn out to be necessary. As for monsters, Frozen was even more sad. Mostly this didn't matter, as circumstances where it was applied to monsters was few (and Upheaval is likely to simply kill them rather than have you worry about how slow they move now). But the combination of 'Almost always lasts 2 turns' and 'Increases move delay by 4 aut' meant that it was nearly mathematically impossible for a normal-speed enemy to visibly lose even a single turn from it. (It being a flat +4 to move cost also had the strange effect where enemies with fast movement but normal overall speed suffered a greater penalty than enemies with equivalently high speed for all actions.) Since debuffs like this tend to need a *larger* impact to notice on monsters than on players, let's try making it double their move delay instead (and last slightly longer). This will be relevant for the very next commit. -------------------------------------------------------------------------------- a0a6642 | DracoOmega | 2024-05-03 20:45:30 -0230 Let Flash Freeze damage targets that already have Frozen status It's a somewhat odd and very specific exception (that does not apply to any other effect that applies Frozen, either) that Flash Freeze cannot deal any damage to a player/monster that already has frozen. Rime Drakes' breath cooldown already made them unlikely to be able to attack the player any more often than this and marginal buffs to other users seem low impact. Admittedly, this makes it possible that a player facing *multiple* rime drakes at once can get breathed on a lot more often, but it was honestly kind of weird that they couldn't. -------------------------------------------------------------------------------- d495c7a | mumra | 2024-05-02 23:00:25 +0100 Break system packages (fix MacOS build) To fix an error running new version of pip3 in virtualised environments. > You may restore the old behavior of pip by passing > the '--break-system-packages' flag to pip, or by adding > 'break-system-packages = true' to your pip.conf file. The latter > will permanently disable this error. > If you disable this error, we STRONGLY recommend that you additionally > pass the '--user' flag to pip, or set 'user = true' in your pip.conf > file. Failure to do this can result in a broken Homebrew installation. https://peps.python.org/pep-0668/ -------------------------------------------------------------------------------- 1bd1766 | David Lawrence Ramsey | 2024-05-02 16:20:33 -0500 Reorder a few goblin sharper lines. So that the deck-related lines are last. -------------------------------------------------------------------------------- 293f381 | David Lawrence Ramsey | 2024-05-02 16:19:54 -0500 Reorganise goblin sharper's card lines. They're properly divided into sections by deck now. -------------------------------------------------------------------------------- 9e7e224 | David Lawrence Ramsey | 2024-05-02 16:07:01 -0500 Add deck of punishment lines for goblin sharper. -------------------------------------------------------------------------------- 8129f21 | David Lawrence Ramsey | 2024-05-02 13:25:12 -0500 Move Nem's oddities cards into their own entry. Also, make them more likely to show up than the other misplaced cards. -------------------------------------------------------------------------------- 348a825 | David Lawrence Ramsey | 2024-05-02 13:02:34 -0500 Remove low weight from misplaced card message. The goblins sharper has enough dialogue now that it won't come up often anyway. -------------------------------------------------------------------------------- eb237df | David Lawrence Ramsey | 2024-05-02 12:50:23 -0500 Add other oddities cards to goblin sharper lines. -------------------------------------------------------------------------------- e50fcab | David Lawrence Ramsey | 2024-05-02 11:34:48 -0500 Fix spelling. -------------------------------------------------------------------------------- 0624dd8 | David Lawrence Ramsey | 2024-05-02 11:25:54 -0500 Adjust a goblin sharper line. Orbs of destruction don't always blow up their targets. -------------------------------------------------------------------------------- 55e9565 | David Lawrence Ramsey | 2024-05-02 08:37:09 -0500 Add goblin sharper lines for renaining Nem cards. -------------------------------------------------------------------------------- e526281 | David Lawrence Ramsey | 2024-05-01 20:51:20 -0500 Fix spelling. -------------------------------------------------------------------------------- a127011 | David Lawrence Ramsey | 2024-04-30 09:53:05 -0500 Add another adjective to artefacts. (Impassible is not the same as impassable, but the former is still a word in its own right.) -------------------------------------------------------------------------------- 490276c | David Lawrence Ramsey | 2024-04-30 09:43:56 -0500 Fix typo. -------------------------------------------------------------------------------- a794c8f | David Lawrence Ramsey | 2024-04-30 01:29:35 -0500 Fix spelling. -------------------------------------------------------------------------------- 53ce97c | David Lawrence Ramsey | 2024-04-30 01:29:19 -0500 Fix typo. -------------------------------------------------------------------------------- caa3975 | regret-index | 2024-04-30 01:54:02 -0230 Put proper opacity masks in a new overflow altar vault Monsters behind glass in vaults tagged as transparent need "opaque" KMASKs to tell the builder those spaces aren't actually breaking connectivity (since the monsters can't be freed without freeing up connectivity). -------------------------------------------------------------------------------- 08be3ee | David Lawrence Ramsey | 2024-04-29 07:51:18 -0500 Make the temple's chaos spawn generate awake. So that its messages consistently show up. -------------------------------------------------------------------------------- 98c967e | brandon s allbery kf8nh | 2024-04-29 07:35:50 -0500 add mon-aura.cc to Android project …hopefully -------------------------------------------------------------------------------- f039ace | David Lawrence Ramsey | 2024-04-29 07:35:23 -0500 Add Zin vs. Nemelex temple overflow vault. To help integrate Nemelex vault-wise as a chaotic god, since there are Zin/Xom vaults and Zin/Makhleb vaults. This has (cosmetic) pink crystal walls, a talking Zin angel, and a talking goblin sharper worshipping Nemelex (only dialogue, no abilities). Note that the latter's dialogue provides minor spoilers as to what some cards do. -------------------------------------------------------------------------------- 7194ef5 | David Lawrence Ramsey | 2024-04-27 16:34:26 -0500 Add fish name to artefacts. -------------------------------------------------------------------------------- 232a111 | DracoOmega | 2024-04-27 19:00:44 -0230 Fix a rare Gozag crash When an enemy is killed in a way that causes their corpse to explode (eg: mindburst or iood) while worshipping Gozag, multiple piles of gold are scattered around the general area. The amount of gold in each pile is determined by randomly rounding 'total gold' / 'number of piles'. For medium-sized creatures specifically, if the player rolled the lowest possible amount of gold and the highest possible amount of chunks, it was possible for this to round down to 0 gold in a pile. Which was already specifically guarded against! Piles of 0 gold will not be placed by _explode_corpse. ...but _explode_corpse operates using a reference to the 'original' corpse and while place_monster_corpse attempts to destroy the corpse item after an explosion, destroy_item() specifically doesn't do anything to an item with a quantity of 0, so the original corpse (now gold) would remain with a quantity of 0. Mostly this was invisible, but upon leaving the current floor, attempting to save the present floor would trigger an assert for the 0-gold pile being invalid, causing this crash. Now just make sure that none of the piles ever has less than 0 gold in it. -------------------------------------------------------------------------------- f613fa2 | DracoOmega | 2024-04-26 21:57:17 -0230 Fix a crash with casting Metabolic Englaciation against the player Only player ghosts can do this presently, I believe? -------------------------------------------------------------------------------- 15cee8b | regret-index | 2024-04-26 20:35:11 -0230 Vault review, mostly for new monster / revisions * Abominations earlier than post-Lair have been tweaked down slightly, due to large abominations being capable of rolling demonic crawler levels of regeneration and small abominations being harder to escape from. Aside from a few vaults, this noticeably reduces the highest rolls of small abominations in gauntlets and slightly lowers large abominations in Gauntlets overall, while reducing their count a bit in the Abyssal Lair end. A few other uses of abominations are mildly tweaked otherwise. * Undying armouries get another few uses in extended. One or two now place in most of Cerebov's vaults, finally emphasizing the steel part of their Fire and Steel title beyond iron shots and red devil tridents by using the armoury weapon granting gimmick on balrugs. (Since Cerebov's already plenty scary, these sparing placements are decently far away from Cerebov themself when possible.) They also get a use in earth zigs (which helps them further differentiate from Dis floors by arming gargoyles and giants), plus a grated ziggurat pillar. * Spider rune vaults at the outliers of kill rates have been slightly tweaked up or down accordingly, and the _arachne_lair vault previously at an acceptable middle-of-the-pack position has been nudged upwards in jorogumo count to the moving out Arachne from Spider. * Ossuary killrate top and bottom ends have been also nudged correspondingly towards the center, and two of the current weakest ones (silent_tomb and city_of_the_dead) both get the fresh new marrowcuda option. -------------------------------------------------------------------------------- 2369512 | David Lawrence Ramsey | 2024-04-26 15:11:27 -0500 Add another pasta type to unrands. Also remove unneeded blank lines. -------------------------------------------------------------------------------- eaffa77 | DracoOmega | 2024-04-26 17:35:39 -0230 Don't let AF_SWARM trigger from attacking firewood (riverfiend) As much as a swarm of angry fish ghosts savaging a lone plant is hilarious to imagine, it's a little much to subject the player to in many circumstances. -------------------------------------------------------------------------------- e4ad002 | DracoOmega | 2024-04-26 16:43:43 -0230 Don't Bestow Arms to monsters wielding unrandarts regret-index plans to use them on Cerebov's level and it would be deeply silly to replace Cerebov's trademark sword with something else. But even in general, unrandarts are noteworthy enough not to overwrite with this effect. -------------------------------------------------------------------------------- 9cce121 | David Lawrence Ramsey | 2024-04-26 14:02:01 -0500 Fix capitalisation. -------------------------------------------------------------------------------- 0e4aabf | David Lawrence Ramsey | 2024-04-26 14:01:28 -0500 Fix spelling. -------------------------------------------------------------------------------- 52f7614 | DracoOmega | 2024-04-26 16:11:43 -0230 Make Cigotuvi's Monster's constriction less absurd This may have always been bizarrely high, but was a lot less visible before the recent-ish constriction changes that are more explicit about the damage it does - which is evidently a whopping 25-50 unavoidable damage *per turn*. Mutant beasts (which this is) use the same number as damage for all of their aux attacks, but the scale of damage done by a constriction attack really isn't on the same scale, so let's divide it a bit. (10-20 is still a decent bit) -------------------------------------------------------------------------------- 9de2d02 | David Lawrence Ramsey | 2024-04-26 08:20:58 -0500 Fix punctuation. -------------------------------------------------------------------------------- 55a6d9f | David Lawrence Ramsey | 2024-04-26 08:20:43 -0500 Fix typos. -------------------------------------------------------------------------------- b024fe6 | DracoOmega | 2024-04-26 02:58:12 -0230 Fix tag upgrade build -------------------------------------------------------------------------------- cb48baa | DracoOmega | 2024-04-26 02:47:58 -0230 Fix accidentally using a removed ranged brand for Bestow Arms Oddly enough, this actually visually worked convincingly enough in testing that I didn't even notice >.> -------------------------------------------------------------------------------- 44a4d61 | DracoOmega | 2024-04-26 02:15:39 -0230 Fold Lorocyprocas into Hell Beasts and rename/tweak (regret-index) As per the previous commit, this removes loros and gives their antimagic attack to hell beasts, which are additionally renamed to 'sin beast' (it was always a little weird that something which commonly spawns in Pan but NOT in Hell was named 'hell beast') They have the same base damage as before, with antimagic on their bite attack. Their HD was raised from 7->12 (as this directly affects their antimagic strength) which is still a bit lower than loros, but they're much faster. Out of some concern that Geryon might be a little too oppressive for characters that aren't meaning to tackle the rest of Hell (since horn troves are fun and should be encouraged!), I reduced the summon cap on sin beasts from 8->5, and reduced their duration and his cast rate a little bit. A pure buff to evoking the Horn of Geryon itself also seems unlikely to be too good? We'll see how much any of that feels like a problem. -------------------------------------------------------------------------------- 5e5f045 | regret-index | 2024-04-26 02:15:38 -0230 Remove lorocyprocas from vaults and level generation Perma-invisible enemies need to be more threatening to work properly, and there's a surplus of tier-2 demons that have needed a little more power and interest for the indefinite lengths of Pan. This is in advance of their antimagic and palette both being merged into hell beasts, which will be elaborated upon in a later commit. Most uses looking for generic demons slightly re-weigh their demons depending on how many demons they're spawning, with larger counts getting a little bias away from tormentors and hellions in their tier but Pan, Abyss, and ghost vaults with large numbers of monsters rather late not bothering for such. (Pan and Abyss floor generation itself mostly leans on tier 2s in general, including future hell beasts.) Vaults looking for antimagic or invisibility themes have been adjusted to either use hell beasts (as they'll get antimagic later) or different adjascent themes entirely for the latter. -------------------------------------------------------------------------------- 27c0888 | DracoOmega | 2024-04-26 02:15:38 -0230 Exile Arachne from Spider, replace with a new formicid unique Since the introduction of jorogumos to Spider, Arachne's main gimmick has felt a little crowded out. They're perfectly good monsters, but she's more or less just a larger one that blinks, and it feels like she'd be more noteworthy if she was simply somewhere else, so let's move her. Arachne now comes with 2-3 orb spiders and can spawn in Vaults:1-4, Elf, and Depths:1 *only in games where Spider was not generated*. You either get joros or her, but not both. (Orb spider backup in open terrain also tends to make her ensnare gimmick more sharply threatening, which is sort of neat) Replacing her in Spider is a long-awaited formicid unique. Xak'krixis is an alchemist on expedition from an isolated formicid kingdom, studying the fauna of Spider. They cast venom bolt, ignite poison, and an improved version of fulminant prism which places two at once *and* has no friendly fire. A straight adaptation of the player spell wouldn't play very well, but multiple 'safe' bombs can make it less trivial for the player to simply ignore, while also not endangering the many bands in Spider. (The noise of them is even a danger of its own down there). Xak comes with a venom-branded two-hander and a shield (why have a formicid if they aren't going to use a shield with a two-hander, right?) and can also dig while moving - but *not* while wandering (to avoid some of the old boring beetle problem of loudly digging out a level whenever they'd gotten woken up). Mostly this means they'll only do it while actively pursuing the player, but also while running away (and possibly in some other situations). -------------------------------------------------------------------------------- c072c2f | DracoOmega | 2024-04-26 02:15:38 -0230 Remove a couple unused function definitions -------------------------------------------------------------------------------- 9a1d0e6 | DracoOmega | 2024-04-26 02:15:37 -0230 Add Undying Armouries, a Vaults out-of-depth monster (regret-index) These replace tentacled monstrosities from the Vaults spawn list entirely, reducing the number of different zones they appear in, while offering a new sort of threat that is a strong thematic fit with Vaults itself. Undying Armouries are a vortex of weapons, animated by a poltergeist formed from the souls of numerous smiths and weaponmasters. They have decent melee and two unique spells: Flashing Balestra is a mini iron shot, usable only from range, that spawns a short-lived dancing weapon near its target - as one of the souls in the maelstrom leaps out to duel with you. Bestow Arms temporarily grants copies of a random summoned weapon to 5-7 nearby allies. These tend to be top-tier items, with good brands and plusses, with a slight bias towards polearms, but also including launchers! This is a unique vector of enemy buff that still ties into existing game systems (and giving an entire band, say, speed longbows or vampiric glaives ought to be felt!) The implementation of this was tricky, and while I think I have caught and fixed most situations where this could devour their real weapon permanently, I'll be keeping my eye on it for other weirdness. -------------------------------------------------------------------------------- 5f1a5ef | DracoOmega | 2024-04-26 02:15:37 -0230 Replace Arcanist Force Lance with Searing Ray Since it was given a monster implementation, I thought this could be a fun spell to fight against sometimes. Force lance is used widely (and something else in Vaults uses them now, too!), and this feels like a natural fit, so let's try it. -------------------------------------------------------------------------------- 7b5b3b7 | DracoOmega | 2024-04-26 02:15:37 -0230 Slightly tweak early 5s Ufetubi were moved a bit deeper after they gained flanking, but have continued to be pretty harmless. Give them the tiniest damage buff and move them shallower again. Nudge shadow imps a bit shallower by the same amount. -------------------------------------------------------------------------------- 8286d04 | DracoOmega | 2024-04-26 02:15:37 -0230 Make xv less misleading about enemies with a regeneration buff This never got updated when Regeneration was buffed. (It's still SLIGHTLY misleading, due to fuzzed monster hp and non-random rounding, but should be a lot less so) -------------------------------------------------------------------------------- bf5259e | DracoOmega | 2024-04-26 02:15:36 -0230 Make abomination randomization more interesting and obvious (regret-index) Abominations' randomized stats were a sort of hidden detail that has increasingly not mattered (especially since their speed was made flat). But the concept of them being randomized amalamations of who-knows-what is solid flavor (and more interesting than them being vanilla melee monsters), so let's try to hilight their randomization in a more obvious way. Abominations now start with a single random buff out of: might, haste, or regeneration. This makes it very obvious to the player how a particular abomination is different from any other, while still keeping them fairly simple. Their AC/EV has been set to the average of their old values and their damage reduced slightly (haste/might versions will still hit harder than the old abominations did, but not by quite so much). I also took away no_regen from them while I was at it; not sure there's any good reason they still have it. Some early value uses of abominations will possibly need adjustment. -------------------------------------------------------------------------------- 3c4af0e | DracoOmega | 2024-04-26 02:15:36 -0230 Don't let !cancellation attempt to dispel aura effects It could technically remove torpor snail slow, but then it would immediately be reapplied, which is more or less doing nothing. To avoid this being unclear to players, don't let it be drunk to remove effects that will immediately be reapplied. -------------------------------------------------------------------------------- 6ba1bb0 | DracoOmega | 2024-04-26 02:15:36 -0230 Make Ophans Mark the player as long as they remain in LoS (regret-index) I'm not exactly certain what monster balance for many holies is even supposed to be at this point in the game, but ophans currently don't do very much that effectively threatens the player, and this perhaps might (as well as being somewhat interesting and thematically appropriate). -------------------------------------------------------------------------------- 0aa0afc | DracoOmega | 2024-04-26 02:15:35 -0230 Add marrowcudas to pre-Lair D These were intended as low-level Yred fodder (who is still using necrophages for early Black Torch summons, despite those not even spawning anywhere anymore) as well as an earlygame introduction to a mechanic used on a much latergame monster, though *that* monster isn't implemented yet and it's possible its design will end up changing before it is. Nevertheless, this is a tiny bit of additional variety, another monster that could be used as a boss in a Sewer or Ossuary, and provides an earlygame summoner (of which there are very few which aren't uniques) and very strongly hilights the 'kill the summoner first' approach. They are a fast, relatively low-damage, flying skeletal enemy with AF_SWARM, which summons an additional copy of *itself* whenever it deals damage to a target. (And then those copies can summon other copies, and so forth, up to a cap of 8). It can block off retreat in corridors and quickly create overwhelming numbers if ignored, but dies fairly easily when focused directly. They spawn (relatively rarely) at a slightly shallower depth than Wights, as well as sometimes in the early water table (instead of 100% electric eels all the time.) I'm still uncertain if their placement is too close to wights and would be better at some other depth, with other stats. I'll reassess this after some playtesting. -------------------------------------------------------------------------------- 9bf8402 | DracoOmega | 2024-04-26 02:15:35 -0230 Don't make stationary monsters immune to Slowing There's no particularly obvious reason why being unable to move should make one immune to their ACTIONS being slowed. This doesn't affect terribly many things, since most stationary enemies are already will-immune and/or have rC+, but does let chaos brand slow work on statues and metabolic englaciation hit oklobs, among a couple other things. -------------------------------------------------------------------------------- 096cba5 | DracoOmega | 2024-04-26 02:15:34 -0230 Add Polterguardians These are support allies, intended for Vaults, which give passive repel missiles to all nearby allies (and also cast force lance so that they're not utterly useless on their own). They have a modest chance to appear in Vault Warden or Preserver bands, and can sometimes spawn with 1-2 random single enemies (much like Rakshasa can). I'm not 100% happy with their solo spellset, outside of the aura effect, but while metal splinters is the most thematic attack spell for them to have, it also does the least against charactes who are already the least likely to care about the repel missile effect, which seems undesireable. -------------------------------------------------------------------------------- d62b0c6 | DracoOmega | 2024-04-26 02:15:34 -0230 Don't let tracers think Might Other benefits monsters without attacks The buff beam wouldn't actually *apply* Might, but monsters would still think that they could, resulting in them casting a spell with no visible effect. -------------------------------------------------------------------------------- b277726 | DracoOmega | 2024-04-26 02:15:34 -0230 Make Aura of Brilliance no longer an aura In theory, this spell was supposed to continuously grant brilliance to allies near the caster, aura-style. In practice, it was kind of broken. The code looks like it was *attempting* to renew the brilliance duration each turn, but did not actually do so (reapplying full duration only after it completely wore off of someone). Also, each application of brilliance lasted approximately equally long (give or take randomization) as the entire aura itself. So it was very common for the 'aura' to run out before the first application of a buff did, and never extend its duration at all. And then sometimes, it would last *just* long enough for the buff to wear out and reapply it, effectively doubling the duration. To make matters more confusing, the aura would immediately turn off if ever a single turn passed without a buffable ally being in LoS of the caster. (And there was no icon indicating an aura was even active...) It would be possible to make it function more like an aura, but I'm not sure there's a great mechanical benefit to doing it in this case. So instead, just make it a one-time AoE buff (with about 75% longer duration than it has at present) and remove the other supporting code. -------------------------------------------------------------------------------- 183d00d | DracoOmega | 2024-04-26 02:15:34 -0230 Refactor / unify how monster passive enchantment auras work Currently this combines torpor snail slow aura and martyred shade injury bond aura into a single new system (which will make it very simple to add similar effects with less duplicated code). Functional changes: -Torpor snails now (deliberately) work through grates/statues. At least one vault already assumed that they did, and it doesn't feel like there's a good thematic or mechanical reason for them not to -Martyed shade's injury bond now wears off if they spend more than a couple turns out of LoS of what they're protecting (previously, LoS only mattered to apply, and it would otherwise never wear off). -Shades now apply injury bond each turn without needing a visible foe nearby. (The old behavior could sometimes lead to confusing situations where they wouldn't bond an ally for no obvious reason) It is *possible* there are some minor changes with timings of when effects are applied or removed, but I think those should be the main effects. -------------------------------------------------------------------------------- fa1cc04 | David Lawrence Ramsey | 2024-04-23 19:21:40 -0500 Fix punctuation. -------------------------------------------------------------------------------- 15e7c00 | David Lawrence Ramsey | 2024-04-23 14:25:24 -0500 Fix the build? -------------------------------------------------------------------------------- cfd66e3 | David Lawrence Ramsey | 2024-04-23 13:52:50 -0500 Make class-specific orc names work with apostles. Orc apostles now have their own name keys based on class. So priestly apostles can now be named Judas, just as friendly orc priests used to be. Accordingly, add names for warrior and wizard apostles. -------------------------------------------------------------------------------- b3226c2 | David Lawrence Ramsey | 2024-04-22 16:21:49 -0500 Make god protection work with cleaving/reaching. So that you can no longer attack Fedhas and Jiyva allies via those methods. -------------------------------------------------------------------------------- b4a5920 | David Lawrence Ramsey | 2024-04-21 18:10:10 -0500 Fix Hurl Torchlight description. It damages holy beings, not unholy beings. -------------------------------------------------------------------------------- abb26cb | David Lawrence Ramsey | 2024-04-21 14:53:08 -0500 Fix spelling. -------------------------------------------------------------------------------- 5bea24b | Nicholas Feinberg | 2024-04-21 12:48:42 -0700 Don't allow rain to create deep water anywhere Pretty silly and almost impossible to trigger in practice. I like silly, but there's no sense keeping code for something no one will ever see. -------------------------------------------------------------------------------- a3b3661 | Nicholas Feinberg | 2024-04-21 12:39:00 -0700 Allow rain to create deep water in sprint Now that it's temporary. Reverts 57db23c628d709e5e6e635634631c1f7cdf624bc. -------------------------------------------------------------------------------- 7117bd9 | Nicholas Feinberg | 2024-04-21 10:35:06 -0700 Fix a silly use of mon_is_object -------------------------------------------------------------------------------- 1f0809d | David Lawrence Ramsey | 2024-04-21 12:18:39 -0500 Fix now-inaccurate comment. Since Lugonu hasn't had Bend Space for awhile. -------------------------------------------------------------------------------- d272cc4 | David Lawrence Ramsey | 2024-04-21 12:17:21 -0500 Fix corpse naming of the mad acolyte of Lugonu. So that it leaves a "human corpse", instead of a "human corpse of mad acolyte of Lugonu". -------------------------------------------------------------------------------- d927fbf | David Lawrence Ramsey | 2024-04-21 09:25:37 -0500 Add another colour for Blork's dialogue. -------------------------------------------------------------------------------- d922fe9 | David Lawrence Ramsey | 2024-04-21 08:14:46 -0500 Properly apostrophise rimeblight message. -------------------------------------------------------------------------------- a09f62f | DracoOmega | 2024-04-21 01:44:16 -0230 Fix missing Recall Apostle description (due to typo) -------------------------------------------------------------------------------- 35e66b3 | David Lawrence Ramsey | 2024-04-20 19:38:06 -0500 Move old box of beasts tile to UNUSED. -------------------------------------------------------------------------------- b8cfe57 | DracoOmega | 2024-04-20 18:04:12 -0230 New tiles for gravitambourine / box of beasts by meckryl -------------------------------------------------------------------------------- e909cc9 | NormalPerson7 | 2024-04-20 11:11:53 -0500 Fix a few things about wanderer - Troll, oni and spriggan wanderers now actually get armour when they roll armour skill (acid dragon scales for good quality, otherwise an aux slot) as originally intended. They'll also get armour skill if they start with acid dragon scales. - Ghoul wanderers can now get potions of attraction like every other species - Formicid wanderers can now start with a quarterstaff or a ranged weapon and a shield - Starting wands of warping now get 2-4 charges like iceblast/roots instead of getting 15 Also, to incentivise using starting unarmed combat skill when wanderers get it, make wanderers that start with unarmed skill not get the default club/dagger if they weren't assigned another weapon. -------------------------------------------------------------------------------- 1b2d3e2 | Kyle Rawlins | 2024-04-20 12:10:51 -0400 fix some lua docstrings (FBV) (Sadly, I still don't have the ability to actually rebuild the docs) -------------------------------------------------------------------------------- 384da2c | David Lawrence Ramsey | 2024-04-20 00:42:06 -0500 Fix typo. -------------------------------------------------------------------------------- f09306a | advil | 2024-04-19 20:11:23 -0400 fix: typo -------------------------------------------------------------------------------- 345e16b | advil | 2024-04-19 20:10:04 -0400 fix: comment an obscure number (hellmonk) -------------------------------------------------------------------------------- b208e08 | David Lawrence Ramsey | 2024-04-19 17:57:27 -0500 Mark the faith mutation as good instead of bad. Since it gives no penalties, and is exclusive to mummies anyway. -------------------------------------------------------------------------------- ee455d8 | David Lawrence Ramsey | 2024-04-19 17:50:40 -0500 Fix spelling. -------------------------------------------------------------------------------- 7161d33 | David Lawrence Ramsey | 2024-04-19 09:28:38 -0500 Add Rimeblight to Kiku gift list (NormalPerson7). -------------------------------------------------------------------------------- 85d4e5b | David Lawrence Ramsey | 2024-04-17 18:57:12 -0500 Add a time name to artefacts. -------------------------------------------------------------------------------- 881aff7 | David Lawrence Ramsey | 2024-04-17 18:48:09 -0500 Set killer properly for Ely wrath heals (oops). -------------------------------------------------------------------------------- 4cb0429 | David Lawrence Ramsey | 2024-04-17 18:42:09 -0500 Alert stabbed monsters Ely wrath heals (#3759). Instead of letting them possibly stay unaware. Closes #3759. -------------------------------------------------------------------------------- c73bb6f | DracoOmega | 2024-04-17 20:39:36 -0230 Let Gavotte ignore -move when moving the player again Tragically, I forgot that you could simply cast Momentum Strike to reliably cause the status to yourself. Letting formicids or !lig work differently is one thing, but I think that too easily gives Gavotte modality of 'Do you want to move yourself or not?' which I don't want to introduce to the spell. (On reflection, the monster equivalent of -move didn't stop them from being flung around anyway.) -------------------------------------------------------------------------------- b20137a | DracoOmega | 2024-04-17 20:11:32 -0230 Don't double-miscast when miscasting Seismic Shockwave (NormalPerson7) This was a consequence of how the second spell was embedded inside the cast code of the first. Instead, directly switch which spell is being cast inside your_spells, depending on the cannon's mode. This feels a little ugly, but is at least clear in what it's doing and seems to solve the original problem without creating new ones. -------------------------------------------------------------------------------- 80a8511 | DracoOmega | 2024-04-17 20:11:32 -0230 Make -move and stasis block the self-move portion of Gavotte You already can't move stationary enemies this way, so it feels like it should work the same way for players. But unlike many transloctions that move the player, you're clearly affecting the *general area* and not specifically yourself, so it seems intuitive that you can still hurl enemies around even if you remain in the same place. This does mean that formicids can do things with it that other species cannot, but it's not clear to me that the advantage of 'can toss enemies out of your LoS sometimes' outweighs the downside of 'can't ever use it to rapidly reposition yourself', and formicids aren't exactly a concerningly powerful species at present. We'll see if that holds up in practice. (Deliberately miscasting translocation spells to get this property on other species seems almost certainly worse to attempt than doing something else with your time, and if someone wants to use !lig to take advantage of this, then they can be my guest) -------------------------------------------------------------------------------- 95e3b1b | DracoOmega | 2024-04-17 20:11:32 -0230 Don't poof summons when you Gavotte without hurting them (Drazool) -------------------------------------------------------------------------------- 61e5eb5 | David Lawrence Ramsey | 2024-04-17 16:48:02 -0500 Adjust Donald's Yred dialogue. Add one new line, and adjust another one to account for spectral things. -------------------------------------------------------------------------------- b2c533c | David Lawrence Ramsey | 2024-04-17 16:38:02 -0500 Fix spelling. Ensure "cerulean" is spelled consistently, betwen the imp and the Blork colour, and resort accordingly. -------------------------------------------------------------------------------- 1450d63 | DracoOmega | 2024-04-17 17:42:28 -0230 Don't let allies reduce damage enemies take from Ozocubu's Refrigeration It always felt both a flavor mismatch *and* unfortunate mechanics that simulaca (which are immune to Refrigeration) still had anti-synergy with it by reducing the damage enemies would take from it. Rather than specifically exclude icy monsters from this calculation (and invite confusion/debate about what is sufficiently un-warm), only give the huddle bonus from monsters *allied* with the target taking damage. So massed enemies take the same reduced damage as now, but your summons will no longer deign to give them a friendly cuddle for warmth. This effectively buffs both spells a little, but Refridgeration doesn't seem so strong these days that it can't handle that, and it feels like a cute and intuitive synergy. -------------------------------------------------------------------------------- 23bc409 | DracoOmega | 2024-04-17 17:42:28 -0230 Tweak Fulsome Fusillade animation Explosions will generally come out faster now. Hopefully will still be adequately readable. Also properly respect the no-animation setting. -------------------------------------------------------------------------------- 222fab4 | DracoOmega | 2024-04-17 17:42:28 -0230 Fix Fusillade maintaince cost not working properly for djinn (ragingrage) The status light would be dimmed (like they could not afford to pay) at all times, but it didn't actually cost them any hp to maintain at all. -------------------------------------------------------------------------------- 999f1de | DracoOmega | 2024-04-17 17:42:28 -0230 Fix Fusillade usability tracer caring about line-of-fire (ragingrage) The spell itself did not, but you had to force-cast it if anything was in the way. -------------------------------------------------------------------------------- 9044fd6 | DracoOmega | 2024-04-17 17:42:28 -0230 Don't let the player cast Seismic Cannonade while worshipping Okawaru Even if you lose out on such wonderful messages like "The seismic cannon feels only hate for you! x3" -------------------------------------------------------------------------------- d60f5e5 | Nicholas Feinberg | 2024-04-17 09:05:20 -0700 Fix rimeblight double-kills (Ge0ff) Stop killing dead monsters! Hopefully. (Untested.) -------------------------------------------------------------------------------- 3814254 | David Lawrence Ramsey | 2024-04-16 16:36:48 -0500 Add two nouns and one modifier to gizmos. -------------------------------------------------------------------------------- f626242 | mumra | 2024-04-16 21:22:36 +0100 Fix more rare caps issues in speech Snorg, Thermic Dynamos, Norris, and cornered monsters. -------------------------------------------------------------------------------- 2842808 | DracoOmega | 2024-04-16 16:26:32 -0230 Improve seismic cannon shot damage at higher spellpower a little Earlier versions of this spell did too much upfront damage, and while I was repeatedly dialing this back, I left it so that spellpower did very little to actually improve them. This should raise their damage at higher power, but not affect it very much at lower power. (Damage may still warrant adjustment in *general*, but I'll wait on more playtesting feedback for that) -------------------------------------------------------------------------------- 1362d29 | DracoOmega | 2024-04-16 16:26:32 -0230 Don't turn seismic cannons hostile when you hit them (ge0ff) They're mindless objects it seems like they should obey the same rules as spellforged servitor here. (This had the additional negative effect that the other cannons could charge themselves up by firing at the now-hostile cannon...) -------------------------------------------------------------------------------- 0afd68c | David Lawrence Ramsey | 2024-04-16 12:33:11 -0500 Fix typo. -------------------------------------------------------------------------------- 871480c | David Lawrence Ramsey | 2024-04-16 10:21:03 -0500 Fix capitalisation in monster message (Ge0ff). -------------------------------------------------------------------------------- d68e888 | David Lawrence Ramsey | 2024-04-16 09:43:03 -0500 Count foul stench as a retaliatory DS mutation. So the player can't get it along with spiny or foul shadow. -------------------------------------------------------------------------------- 5080204 | David Lawrence Ramsey | 2024-04-16 00:17:45 -0500 Add abandoned chaos spawn temple overflow vault. This features altars to all three chaotic gods (now that Nemelex is considered chaotic), a walled-off chaos spawn (cf. the walled-off angel in a Zin overflow vault), a damaged chaos weapon for flavour, and chaotic decor such as (cosmetic) orange crystal walls. -------------------------------------------------------------------------------- 002fc65 | DracoOmega | 2024-04-15 23:16:14 -0230 Don't let Fusillade hit targets through glass (mumra) Oops. -------------------------------------------------------------------------------- fd48ac3 | David Lawrence Ramsey | 2024-04-15 20:31:21 -0500 Make Dissolution/tormentor rare speech be rare. -------------------------------------------------------------------------------- 82205d5 | mumra | 2024-04-15 20:30:22 -0500 Make Killer Klown rare speech actually rare -------------------------------------------------------------------------------- 6b026da | David Lawrence Ramsey | 2024-04-15 17:59:22 -0500 Fix spellbook name typo. -------------------------------------------------------------------------------- a1d19d5 | David Lawrence Ramsey | 2024-04-15 17:52:14 -0500 Fix missorted Blork colour entry. -------------------------------------------------------------------------------- 1366db7 | David Lawrence Ramsey | 2024-04-15 17:41:39 -0500 Fix typos, wording, and spelling. -------------------------------------------------------------------------------- b27d4a0 | DracoOmega | 2024-04-15 19:52:02 -0230 Shuffle new spells into spellbooks, add 3 new books in the process -------------------------------------------------------------------------------- 4722b9c | DracoOmega | 2024-04-15 19:52:02 -0230 Some tweaks to auto-aiming to make Magnavolt work sanely with autofight This repurposes the still-implemented but currently unused prefer_farthest member of direction_chooser and adds spflag::prefer_farthest to let spells use this (currently just Magnavolt). It also fixes some bugs I discovered with its implementation in the process, like how it choose the 'farthest' target by starting with the default closest target and then cycling backwards once so that it would 'wrap around' to the farthest. Which didn't actually work properly in many cases where the default target *wasn't* the closest to start with. Additionally, this adds a preferred_aim member to targeter (which normally defaults to returning valid_aim) for situations where it is clear that a certain valid target would not be what the player would *actually* want to aim at in the vast majority of cases. Default target selection is now done in two passes - looking for a preferred_aim first, and then picking a valid_aim second if no preferred_aim is found. This isn't intended to use any complex heuristics to guide the player, but for simple situations where 'closest valid target' doesn't actually represent good default behaviour. There may be other spells for which it makes sense to use this, but for now it's also just used by Magnavolt (otherwise, ranged autofight uses the spell so badly that you essentially could only ever manually cast it) For the record: the deep guts of direction_chooser are scary and deeply unpleasant to work with. I am not 100% confident that what I have done here won't have some undesired side-effect, though in basic testing other things seem to still work properly. Fingers crossed. (I also wasn't thilled to add a member to targeter for just one spell here, but wasn't sure of a cleaner way to accomplish the goal with what I was working with.) -------------------------------------------------------------------------------- a627dd3 | DracoOmega | 2024-04-15 19:50:45 -0230 Magnavolt (level 7 Air/Earth spell) An attempt to fill out more cross-over spells, since I think those can present interesting skilling decisions, as well as continuing to add more options for high-level casters in general. Magnavolt is a smite-targeted spell that coats a target with a thin layer of magnetised metal and then fires a bolt of electricity at every visible enemy that is magnetised in this way. (Meaning that the first time you cast it, it will fire one bolt, but repeatedly casting it will fire 2, 3, 4, and so forth). The magnetised status is short-lived, reduces the target's EV to 0, and also causes them to leave behind an electroferric vortex for a brief while after death (which is stationary, but perma-magnetised, so that it can continue to serve as an anchor for the spell if the initial target immediately dies, which helps to keep the ramp-up more predictable in situations where the caster is actually successfully killing things). By blending the two opposing schools together, this spell offers Air more controllable (and less unsafe) long-range damage at this level range, while giving earth better AoE (in exchange for it being more resistable) with a simple unique twist. Ideally this tempts some people to pivot in ways that previously weren't as rewarding, while offering a new simple damage option for high level mages. -------------------------------------------------------------------------------- 2429629 | DracoOmega | 2024-04-15 19:50:45 -0230 Seismic Cannonade (level 7 Alchemy/Earth) Another attempt to fill in some high-level alchemy options of a very different style than Fulsome Fusillade, this spell consturcts 3 seismic cannons near the caster which are stationary turrets that fire medium-range projectiles each turn and have a built in 'super' they can charge up for. The cannons are initially created with 1/2 of their max hp, but heal a small amount with each shot they fire (as they dig up and incorporate more material from the earth into their frames). Once they reach full hp, the caster can recast the spell to unleash a seismic shockwave that does significant area damage to a targeted location and also destroys the remaining cannons in the process. This is intended to lean into alchemy's thematics of 'creation' (as Fusillade leaned into 'chemical reactions'), while providing a high-level ally spell that feels distinct from, say, a Spellforged Servitor using bombard or crystal spear (which Earth could already access at this level with a splash of a secondary school). By contrast, cannonade is noisier, less flexible with positioning, and requires some defending, but can switch between wide-scale AoE and single-target damage on the fly. (It was also an attempt to make another 'modal' ally spell after the positive response to revamped Call Canine Familiar). As usual, all of the various numbers involved in this are still provisional and may need adjusting. (Also: the cannon tile is very sad; I apologise.) -------------------------------------------------------------------------------- 7e35013 | DracoOmega | 2024-04-15 19:50:45 -0230 Rimeblight: New Level 7 Ice/Necromancy spell A beam-targeted irresistable enchantment that inflicts Rimeblight upon a living/holy/demonic creature. The creature will take AC-ignoring cold damage over several turns as ice devours them from the inside out, and also periodically explode in a flurry of ice shards that damages nearby hostiles (but not the player or their allies!) and can spread the disease to succeptible creatures it hits. Creatures with rimeblight on them that drop below 20% hp (ie: the 'almost dead' threshold) will instantly die and be replaced with a short-lived pillar of rime. (Purely decorative, but the flavor is too good to pass up here, in my opinion) Beyond the neat flavour and unusual spreading mechanics, this provides a high level offensive necromancy option that isn't ally-based (and also a little more variety in high-level ice magic in general). -------------------------------------------------------------------------------- 697f7be | DracoOmega | 2024-04-15 19:50:45 -0230 Fulsome Fusillade: level 8 Conjurations/Alchemy An attempt at giving alchemy a high-level blasty spell that feels sufficiently distinct from those which already exist, while also feeling appropriate to the thematic spirit of the school. Fulsome Fusillade gives the player a status which causes beakers of random reagents to rain on nearby targets for each of the next 5 turns, causing 3x3 explosion of either fire, cold, electricity, or poison arrow aimed on top of 3 random enemies. But importantly, if any of those explosions *overlap*, the area of overlap is instead hit by a volatile alchemical reaction that deals a larger amount of non-elemental damage and has a chance to apply a random debuff. In effect, one can consider it somewhere between Polar Vortex and Ignition; it does mp-efficient damage over time but benefits greatly from targets being adjacent to each other. It can work in corridors and hit enemies from a far range, but becomes far less useful against either single targets OR a very large number of targets - being ideal against a single clustered group that will focus the random hits into a small area. Many aspects of this spell are still tentative and subject to further adjustment as playtesting happens. -------------------------------------------------------------------------------- 8c197d9 | David Lawrence Ramsey | 2024-04-15 16:10:05 -0500 Add one more colour for Blork's dialogue. Technically, "sorcerer's violet" is another name for the periwinkle flower, and not the name of a colour, but I'm using it as the latter, at PleasingFungus' suggestion. -------------------------------------------------------------------------------- f7567ba | David Lawrence Ramsey | 2024-04-15 15:56:25 -0500 Add more misc colours for Blork dialogue. -------------------------------------------------------------------------------- 40ac7a0 | David Lawrence Ramsey | 2024-04-14 13:37:02 -0500 Clarify foul flame brand description. Like holy wrath, it has to get through armour to do extra damage. -------------------------------------------------------------------------------- d7206a2 | David Lawrence Ramsey | 2024-04-14 11:44:53 -0500 Fix wording. -------------------------------------------------------------------------------- ade3313 | David Lawrence Ramsey | 2024-04-14 09:50:15 -0500 Remove remnants of stationary boulders. Since 03d5c24, decorative piles of debris are used for decoration instead of stationary boulders, so boulders should no longer block travel or count as firewood. This reverts commit aa138b54abb418331c72e2e0836ebba38158137b. This partially reverts d9500d9d985ea3c7500565b73bca617f04e8edfb. -------------------------------------------------------------------------------- 6cb2a80 | David Lawrence Ramsey | 2024-04-14 08:50:38 -0500 Allow wanderers with shapeshifting skill. These start with either a beast or a flux talisman. Note that, unlike shapeshifters, they don't start in shapeshifted form. They won't have the skill for flux talismans, and starting in beast form only for beast talismans seems odd, given that their other equipment could include things melded under beast form. (Assume the difference is because they didn't go to Official Shapeshifter School.) -------------------------------------------------------------------------------- 5a1759d | NormalPerson7 | 2024-04-14 08:50:23 -0500 Fix wanderer evoker starts from allowing duplicate evokers Previously, if your wanderer rolled a misc evoker, you could still get the same misc evoker generate in your game. Since they're meant to essentially be unrands, fix this. [Sidenote: misc evokers are generally pretty unbalanced for starting equipment. The lightning rod in particular is insanely strong, with 4 charges of (2+)d15 unavoidable lightning damage. Some rebalancing may be desirable in future.] -------------------------------------------------------------------------------- a8fa363 | David Lawrence Ramsey | 2024-04-13 22:31:19 -0500 Fix wording. -------------------------------------------------------------------------------- 5467873 | Nicholas Feinberg | 2024-04-13 11:26:30 -0700 Fix: destroy the power of imagination (CuriousUB) Avoid taking the square root of a negative number when calculating GDR. The results could be dangerously complex. -------------------------------------------------------------------------------- 5a2cda0 | David Lawrence Ramsey | 2024-04-12 11:48:31 -0500 Add blank line. -------------------------------------------------------------------------------- 3b45f6b | David Lawrence Ramsey | 2024-04-12 11:48:10 -0500 Add another Xom esteem entry to artefacts. -------------------------------------------------------------------------------- 5c35ed9 | David Lawrence Ramsey | 2024-04-12 09:21:25 -0500 Add another unlikely hybrid to artefacts. -------------------------------------------------------------------------------- 1cae6b7 | David Lawrence Ramsey | 2024-04-12 00:10:08 -0500 Fix spelling. -------------------------------------------------------------------------------- 1d8594b | David Lawrence Ramsey | 2024-04-11 22:11:21 -0500 Fix spacing. -------------------------------------------------------------------------------- b82d5c5 | David Lawrence Ramsey | 2024-04-11 22:11:01 -0500 Add more modern mythical animals to artefacts. -------------------------------------------------------------------------------- 8b09de8 | David Lawrence Ramsey | 2024-04-11 21:59:01 -0500 Fix typo. -------------------------------------------------------------------------------- f9495cf | Nicholas Feinberg | 2024-04-11 18:24:04 -0700 Add meckryl to the CREDITS Note that they have assented to use DCSS's CC0 license for their art. (That is, for the tile in the preceding commit, Yred's Recall icon.) -------------------------------------------------------------------------------- f54f9d2 | Nicholas Feinberg | 2024-04-11 18:16:44 -0700 New Yred Recall tile (meckryl) A truly gripping portrayal... -------------------------------------------------------------------------------- a7055e1 | Nicholas Feinberg | 2024-04-11 18:16:44 -0700 Don't let broodmothers abjure (hellmonk) Copy-paste error. Possible that 'summon spiders not abjuring' should be a property of the monster, not of the spell? Probably we'd want a hypothetical intelligent summon spider caster to abjure? -------------------------------------------------------------------------------- 04a7ad8 | DracoOmega | 2024-04-11 01:44:34 -0230 Fix various bad interactions between Gavotte and allies (RBrandon) Gavotte would count as attacking an ally (for penance purposes) even if that ally didn't actually hit anything. Moreover, there was no proper warning for casting Gavotte in ways that WOULD result in hurting allies. (And lastly, the message ordering for penance via Gavotte was mildly bad, with the player feeling guilty before anything actually hit anything else.) These should hopefully now all be fixed. -------------------------------------------------------------------------------- eafeab6 | David Lawrence Ramsey | 2024-04-10 19:28:01 -0500 Give unrand amulet of invisibility its own tile. It now uses a palette-adjusted version of the amulet of Cekugob tile, instead of the actual amulet of Cekugob tile. -------------------------------------------------------------------------------- cc1024d | David Lawrence Ramsey | 2024-04-10 17:08:00 -0500 Fix misspelled amulet type in tiles. -------------------------------------------------------------------------------- 0f22ef8 | David Lawrence Ramsey | 2024-04-09 10:49:03 -0500 Remove unneeded blank line. -------------------------------------------------------------------------------- ff2ca24 | David Lawrence Ramsey | 2024-04-09 10:48:44 -0500 Revert "Musical instruments shouldn't work silenced" This reverts commit 7506e133619c5ed742734399c36a65b1e3989442. -------------------------------------------------------------------------------- 093061d | David Lawrence Ramsey | 2024-04-09 09:37:41 -0500 Remove unneeded space. -------------------------------------------------------------------------------- 7506e13 | mumra | 2024-04-09 09:37:17 -0500 Musical instruments shouldn't work silenced While it could possibly be argued that it has some translocational way to make noise even in a silence field, it seems more logical that a silenced musical instrument should actually stop functioning. -------------------------------------------------------------------------------- 9e1d0c6 | mumra | 2024-04-09 09:37:17 -0500 Instruments shouldn't jingle when silenced Also removed a couple of errant references to Gravitas. -------------------------------------------------------------------------------- 739538a | David Lawrence Ramsey | 2024-04-06 21:35:00 -0500 Fix comment. -------------------------------------------------------------------------------- 30c33eb | David Lawrence Ramsey | 2024-04-06 21:34:04 -0500 Add a gizmo adjective and noun. -------------------------------------------------------------------------------- 4a80058 | Medrano83 | 2024-04-06 20:45:19 -0500 Fix the description of walls with unseen changes (take two) Temporary terrain changes produced by the summon forest spell can affect dungeon features outside of the player's LOS. Those features lose the flavour when described or if the dungeon view is reloaded. The description is also wrong for the summoned trees after the spell finished. The first version of the patch had to be reverted because it crashed on some vaults with loot on top of custom floor. -------------------------------------------------------------------------------- d49a5c6 | Nicholas Feinberg | 2024-04-06 16:22:20 -0700 Fix a confusing message (Silurio) -------------------------------------------------------------------------------- c671339 | David Lawrence Ramsey | 2024-04-05 17:09:37 -0500 Fix info leak w/unID'd shop artefacts (#3756). In antique shops, artefact weapons and armour wouldn't be identified, but would still hint at their enchantments through their descriptions if you were a Mountain Dwarf. Fix this by describing such artefacts just as "ancient artefacts" if you don't know their enchantments. Closes #3756. -------------------------------------------------------------------------------- 8e5f33b | Kyle Rawlins | 2024-04-05 16:46:38 -0400 fix: sanitize sanity check -------------------------------------------------------------------------------- 8f8f606 | Kyle Rawlins | 2024-04-05 16:44:39 -0400 fix: further tweaks to webtiles lazy image loading In testing, the first attempt didn't look very good on a live server, because the image load was very visible. This commit changes the approach to randomly select and ensure loading for an image every time a logged-in player enters the lobby. Like the prior attempt, it forces loading by removing the lazy attribute; as the comment notes, I'm not sure the standards require a browser to react to this, but they do seem to in practice. -------------------------------------------------------------------------------- ab96632 | David Lawrence Ramsey | 2024-04-05 14:02:07 -0500 Fix foul flame colour in monster info bot. It was changed from yellow to lightmagenta in one place, but not the other. -------------------------------------------------------------------------------- 2ec9e35 | David Lawrence Ramsey | 2024-04-05 13:44:59 -0500 Fix underline. -------------------------------------------------------------------------------- d9e1bd7 | David Lawrence Ramsey | 2024-04-05 09:54:16 -0500 Adjust a comment. -------------------------------------------------------------------------------- 36d3288 | Monkooky | 2024-04-05 09:53:43 -0500 Remove unused areaprops -------------------------------------------------------------------------------- b4fc452 | Kyle Rawlins | 2024-04-05 09:10:11 -0400 fix: lazy load webtiles title images (mumra, ge0ff) Over time we've accumulated more and more of these, and since they are loaded from html, this has built up initial webtiles load time. There's really no need to frontload them, the way they are used. This commit uses a relatively modern but nowadays widely available lazy loading attribute to defer loading. In order to actually sequence the image load of a non-cached image before the tilesheets, I did need to manually remove the attribute still. Tested on firefox/chrome mac. -------------------------------------------------------------------------------- 99e313a | Kyle Rawlins | 2024-04-05 09:10:10 -0400 fix: disable requirejs timeout altogether (mumra, ge0ff) The default value for this timeout is 7s. Since tilesheets are sequenced before js modules in client loading (because they are loading from html), on a slow connection this timeout can be hit for non-cached tilesheets. I didn't find a reasonable version-independent way to defer tilesheet loading without a lot of refactoring, so instead, just disable the requirejs timeout. It would be possible to set this to a large value, but from the user's perspective, since we already have a loading screen, there's no real difference. It's just a matter of whether the errors show up in the developer console or not, but the hang-on-load behavior is the same either way. I also couldn't see any value in making a user-facing timeout error on the load screen. So, this commit takes by far the simplest approach and just disables the timeout. For reference, in 3G throttling I was seeing 40-70s load times, and in 4G throttling this can go up to 30. I'm not sure we are trying to accommodate 3G, but 4G might be reflective of bad connections we would want to try to accommodate. -------------------------------------------------------------------------------- 30fb1b0 | DracoOmega | 2024-04-04 22:34:18 -0230 Don't let Coglins equip jewellery when polymorphed (ragingrage) -------------------------------------------------------------------------------- eb5ba95 | Kyle Rawlins | 2024-04-04 08:32:47 -0400 build: fix macos ci This commit attempts to make the macos CI workaround robust for all scenarios I have seen, and clearly document how it works. -------------------------------------------------------------------------------- 7811c86 | DracoOmega | 2024-04-03 18:55:00 -0230 Don't let bound or constricted monsters follow the player through stairs The constriction interaction was even more weirdly buggy, as they could remain constricted on the other side of the stairs, even if the constrictor themselves was left behind on the previous floor. (Note: things the player is physically constricting will still follow you, as the very act of taking the stairs first releases them) -------------------------------------------------------------------------------- 90b412c | DracoOmega | 2024-04-03 18:55:00 -0230 Prompt the player before Piledriving into an ally (Monkooky) You already couldn't use a friendly as the main target, but it was possible to slam an enemy *into* a friendly without warning. Now the player is warned properly. -------------------------------------------------------------------------------- 686ce31 | DracoOmega | 2024-04-03 18:55:00 -0230 Make Gell's Gravitambourine a little noisier (ge0ff) Given that it's intrinsically music-based, possible this feels a little better than it being marked as 'quiet' if you examine it? (The exact amount of noise here is basically arbitrary) -------------------------------------------------------------------------------- c89641f | NormalPerson7 | 2024-04-03 23:53:14 +0300 Don't show MPRegen line on % screen for djinn -------------------------------------------------------------------------------- e5cd51f | wheals | 2024-04-03 23:51:52 +0300 Fix red draconians in dragon form having two breath abilities (#3750) Fixes #3750 -------------------------------------------------------------------------------- f85d74f | David Lawrence Ramsey | 2024-04-02 20:00:54 -0500 Ban Zin's artefacts from having the chaos brand. -------------------------------------------------------------------------------- 40b700c | David Lawrence Ramsey | 2024-04-02 19:41:42 -0500 Limit Ignis' artefact weapons to flaming brand. -------------------------------------------------------------------------------- c41d803 | David Lawrence Ramsey | 2024-04-02 15:50:36 -0500 Rename gui/spells/poison to gui/spells/alchemy. -------------------------------------------------------------------------------- 59293ed | Nicholas Feinberg | 2024-04-02 13:47:36 -0700 Fix: catch a few more strays (Ge0ff) -------------------------------------------------------------------------------- 7cf571d | David Lawrence Ramsey | 2024-04-02 15:04:32 -0500 Add misc colours as an option for Blork dialogue. These are taken from the colour list used for the scrolls of random effects before they were removed in 00efbec, but with the rainbow colours removed; black, white, and grey removed; and alizarin crimson, saffron, and vermilion added. -------------------------------------------------------------------------------- 8ce7b1e | Nicholas Feinberg | 2024-04-02 12:51:14 -0700 Fix: bring stray lajatangs back to the fold (Ge0ff) Remove stray pixels. -------------------------------------------------------------------------------- 7c90f28 | yrdzrfxndfvh | 2024-04-02 12:44:28 -0500 add cardinal to rand_wpn -------------------------------------------------------------------------------- 41c5271 | DracoOmega | 2024-04-01 18:07:37 -0230 Make Teleport Other try to teleport the affected monster out of LoS I don't expect this raises the spell's power overly much, but avoids the unfortunate scenario of spending all your MP to overcome a monster's will only to have it land 2 spaces to your left and not improve your situation at all. Now it is at least guaranteed to land out of LoS (though nothing is stopping it from being immediately around the corner and walking back in, of course) -------------------------------------------------------------------------------- 90097df | DracoOmega | 2024-04-01 18:07:37 -0230 Nudge Thunderhulk Blink Ranged cast rate down slightly In partial compensation for it being less likely to move them closer now instead. They're already quite dangerous, and being inside of their effective range is important counterplay. -------------------------------------------------------------------------------- 3c71851 | DracoOmega | 2024-04-01 18:07:37 -0230 Replace a couple uses of Blink Away with Blink Ranged Blink Away will happily move the monster out of sight of their target (which is usually the player) while Blink Ranged attempts to create distance while still being able to see the target. It seems better behaviour in the majority of cases if enemies don't leave the range at which they can threaten the player altogether. I left Blink Away alone for summoners (who often benefit actively from leaving their summons to hit you, even if they can't see you themselves) and boulder beetles (because they can be so dangerous early on and them sometimes disappearing is a more of a mercy to the player than a nuissance) -------------------------------------------------------------------------------- 00f4254 | DracoOmega | 2024-04-01 18:07:37 -0230 Prevent the player from self-targeting ranged weapons There was virtually no reasonable use-case for doing so (and it even required stepping through multiple different confirmation prompts!). Dispersal darts were approximately the only case where this could bring the player any benefit but: a) That's kind of dumb b) You were very likely to miss anyway, so it would almost never be *actually* good to try to blink this way, anyway. -------------------------------------------------------------------------------- 55d883d | DracoOmega | 2024-04-01 18:07:37 -0230 Make Dispersal Darts better at blinking things away from the thrower Technically they already tried to prefer blinking things away, but were so bad at it that I'm not sure anyone even noticed. (They simply picked TWO random valid destinations and would move the victim to the further of these two). This repurposes some existing blink_ranged code and in the process improves some jankiness with it to prevent this making the *worst* case for dispersal darts worse (even as the average case improves). Now the code will ignore possible destinations that are closer than where the blinker already is. (Yes, it was very possible for a monster to cast Blink Away and actually blink towards instead...) This is effectively a minor buff to monsters with Blink Away (and also Disjunction), but those spots were always downweighted so I don't think it's a significant balance change, so much as polishing off odd behaviour. Mostly, this is intended to buff Warper earlygame a small bit by making one of their trademark consumables better at its job. -------------------------------------------------------------------------------- 6619738 | DracoOmega | 2024-04-01 18:07:37 -0230 Don't let prefer_ranged enemies rarely swap to melee weapons in melee Enemies with the PREFER_RANGED flag have a 10% chance not to shoot on any given turn where they have line of fire, and if they rolled this chance while adjacent to their target, were likely to try to melee attack them instead, which looked very silly (Master Archers don't even generate with melee weapons, so they'd just try to punch you!) -------------------------------------------------------------------------------- 6f7e3dd | DracoOmega | 2024-04-01 18:07:37 -0230 Don't apply Gell's Gavotte to the other side of glass -------------------------------------------------------------------------------- a013996 | DracoOmega | 2024-04-01 18:07:37 -0230 Try harder not to give ghosts Gell's Gravitas -------------------------------------------------------------------------------- 4be4bdc | DracoOmega | 2024-04-01 18:07:37 -0230 Remove Piledriver -move, rescale damage, lower to level 3 Initial balancing of this spell was far too conservative. Players were wary of using it because of the -move after cast and the damage payoff was generally not good enough to make it enticing. I could adjust those things, but -move isn't very popular in general, so let's see if the unique aiming restrictions keep it from being too powerful even without any cooldown or downside attached. I have rescaled the damage-by-distance formula so that close range piledrivers are less effective than before (though max range ones can be somewhat *more* effective than before, depending on power) and lowered it to level 3. The hope is that this better addresses some of Warper's weak earlygame and entices more translocations investment. It may also benefit from being further away from the more flexible Vhi's. We'll see how this version fares. -------------------------------------------------------------------------------- 730d122 | David Lawrence Ramsey | 2024-04-01 13:06:03 -0500 Add another flower name to artefacts. -------------------------------------------------------------------------------- cfddb08 | David Lawrence Ramsey | 2024-03-30 20:07:42 -0500 Fix reference to Margery in Maggie's speech. -------------------------------------------------------------------------------- 23b751d | SentientSupper | 2024-03-30 16:42:58 -0500 Refactored randart staves tile fix (Ge0ff) -------------------------------------------------------------------------------- d694a16 | SentientSupper | 2024-03-30 16:42:58 -0500 Fix an issue with randart staves in local tiles When an item that has a randomized appearance (potions, staves) on the floor is rendered, the item's main tile is actually the "brand". The randomized tile gets added on later by calling add_main_tile which calls tileidx_known_base_item on the main tile when. This is a hack, but it lets you see the brands of identified items on the ground. However with randart staves, the main tile gets put in the special tile slot instead. Normally this won't cause any issues, but the local tiles inventory renders items as if they were on the ground. It calls add_main_tile on the special slot which then renders the randomized staff appearance on top of the randart staff tile. Fixed by not doing this for special tile slots. -------------------------------------------------------------------------------- 3df4fa4 | David Lawrence Ramsey | 2024-03-30 16:27:07 -0500 Fix typo. -------------------------------------------------------------------------------- 59262bd | Nicholas Feinberg | 2024-03-29 13:45:54 -0700 Cut Permafrost Eruption damage by 20% The initial numbers for this spell were intended to err on the side of 'too powerful'. And they were! Now that playtesting confirms the spell is strong, let's pull back on its damage a bit. The goal is for it to still be strong, just a bit less so. -------------------------------------------------------------------------------- e202e49 | David Lawrence Ramsey | 2024-03-29 00:12:13 -0500 Rename obsolete tile refs to Poisonous Vapours. It was renamed Mercury Vapours awhile ago. Also add a placeholder tile for Mercury Vapours: a palette-shifted version of the Poisonous Cloud tile instead of a straight copy of it. -------------------------------------------------------------------------------- 877066f | David Lawrence Ramsey | 2024-03-28 16:15:19 -0500 Add foul flame to _chaos_beam_flavour(). To match the chaos_types flavour list in attack::random_chaos_brand(). -------------------------------------------------------------------------------- f73ac73 | DracoOmega | 2024-03-28 16:24:06 -0230 Remove Gell's Gravitas from players/monsters It was fun enough to let players who had it from old versions play around with infinite tambourines for a bit, but if it's causing actual crashes from ghosts which still possess the spell, I really ought to just remove it. Fun fact: while old Gravitas was technically implemented as a monster spell, due to a non-functional tracer, monsters would never actually think it would damage anything, and thus never cast it (even though casting it could have worked). This may have always been broken, for all I know. -------------------------------------------------------------------------------- 153ae1a | DracoOmega | 2024-03-28 01:05:11 -0230 Don't crash on gavotting a dead monster The pushing order is sorted so that this shouldn't happen from Gavotte itself, but some scenarios (such as lost souls sacrificing themselves to save something else that was just pushed into a wall) can result in monsters dying prematurely, resulting in a crash. This fixes #3739 -------------------------------------------------------------------------------- 107c310 | SentientSupper | 2024-03-27 23:22:41 -0230 Fix pressing f twice to aim quivered Dr breath Previously pressing f with a quivered breath would not let you start aiming your breath until you pressed it again. -------------------------------------------------------------------------------- 0cd9e5b | Wizard Ike | 2024-03-27 22:59:06 -0230 Fix jinxbite doing extra attacks -------------------------------------------------------------------------------- b5af3dc | yrdzrfxndfvh | 2024-03-27 20:25:49 -0500 add Charlatan's Orb to shop of orbs -------------------------------------------------------------------------------- c35c0dd | DracoOmega | 2024-03-27 21:38:50 -0230 Rename a couple things for improved clarity Also don't display 'it is liquified' when moving the cursor over tiles of mud, only Leda's proper. -------------------------------------------------------------------------------- 1478e51 | Monkooky | 2024-03-27 21:38:50 -0230 Fix grey drac breath display Removes a from the display that was appearing as-is. Also, don't display leda's text for mud and make mud show liquiefied description. [Committer's note: squashed and edited typoes] -------------------------------------------------------------------------------- a0577c0 | Monkooky | 2024-03-27 21:38:49 -0230 Simplify liquefaction Leda's Liquefaction would set a 'liquid' flag for all tiles in range; then for non-water empty tiles would set the mechanically relevant 'liquid_actual' flag. The only read of either flag is through the 'liquefied' function, which would disregard water tiles and non-empty tiles. Line 694 would never return true, a line 688 would pre-empt it and return false. -------------------------------------------------------------------------------- 165e151 | wheals | 2024-03-28 00:29:54 +0200 fix: crash on loading a coglin with ring of flight (#3728) Fixes #3728 -------------------------------------------------------------------------------- e9ae430 | David Lawrence Ramsey | 2024-03-27 11:33:36 -0500 Allow memorising Piledriver v/no targets (#3737). -------------------------------------------------------------------------------- b0a091d | David Lawrence Ramsey | 2024-03-27 00:16:01 -0500 Fix spelling. -------------------------------------------------------------------------------- 2009358 | David Lawrence Ramsey | 2024-03-27 00:02:06 -0500 Fix wording. -------------------------------------------------------------------------------- 58459ad | David Lawrence Ramsey | 2024-03-26 23:42:36 -0500 Fix indentation. -------------------------------------------------------------------------------- 05aacc5 | DracoOmega | 2024-03-27 00:57:51 -0230 Fix typo (ragingrage) -------------------------------------------------------------------------------- adc223d | David Lawrence Ramsey | 2024-03-26 22:18:46 -0500 Fix spelling. -------------------------------------------------------------------------------- 4c6cd3f | David Lawrence Ramsey | 2024-03-26 22:17:12 -0500 Tweak wording. Referring to both "the caster" and "you" as the same entity in the same sentence is awkward. -------------------------------------------------------------------------------- e0dfd15 | DracoOmega | 2024-03-27 00:13:16 -0230 Shuffle new spells into books (And swap out Warper Manifold Assault for Piledriver) -------------------------------------------------------------------------------- b106c4a | DracoOmega | 2024-03-27 00:13:16 -0230 Make Piledriver display damage in a more maintainable way -------------------------------------------------------------------------------- 24355c9 | DracoOmega | 2024-03-27 00:13:15 -0230 Improve IMB collision damage description The previous method was too long to fit into the main spell list and would get cut off in the middle. Instead, just show the main damage there and show a more verbose description (including collision damage) in the full spell description. -------------------------------------------------------------------------------- e52afbe | DracoOmega | 2024-03-27 00:13:15 -0230 Gell's Gravitas -> Gell's Gavitambourine Gell's Gravitas has been in an awkward place for many years. It's conceptually cute, but generally agreed to be one of the weakest spells in the game, and there are implementation issues with making how it works transparent to players (eg: beam paths often mean that monsters the player expects to get pulled do not, and even if they do, they may move immediately afterward, making it *appear* as though they did not). I tried rewriting it in various ways, but it always felt like it was stepping on the toes of another spell in the same school that did that things better. IMB and Dispersal are both much better at getting things away from the player, Piledriver is (hopefully!) a more direct and intuitive way to slam monsters into walls for value, and Gavotte can do that at a larger scale. However, by turning it into an evocable effect, we may be able to lean into the 'gather monsters into one place' facet more effectively than one could from a repeatable effect, as well as improving direct damage without concerns that it's in the wrong school for that. Hence, the tambourine! (Because I also cannot resist a silly portmanteau) The tambourine is smite-targeted in a large radius (that scales with evo) and tries to pull every monster in that radius into as small an area as possible, then holds non-friendly ones in place there for several turns, as well as dealing some immediate (non-collision-based) damage to them. It currently alternates with phial of floods as a 'control' evoker, though once the pool of evokers expands just a little bit more (which I'm still hoping to do in 0.32), I'd like to remove these '1 of 2' pools from evokers and just pull 5 at random from the entire list. I think it's better for run variety and I don't see the need to guarantee an even distribution of evoker roles (or even power) from run to run in the same way that it makes sense for wands (since those are a bread-and-butter early toolset). (I also realize we've never had proper names in evokers before, but at this point they're *basically* unrands - coloring and all - so it's probably fine, right?) The tile is... very placeholdery, but I tried my best. >.> -------------------------------------------------------------------------------- 90288d3 | DracoOmega | 2024-03-27 00:13:15 -0230 Gell's Gavotte (new level 6 Translocations spell) A different take on gravity manipulation, intended to provide a fun and novel tool between level 4 and the new climb to level 7 Manifold Assault. This spell lets the caster temporarily reorient gravity in a cardinal direction of their choices, moving *everything* that isn't tied down 4 tiles in that direction, potentially falling into walls and each other. 'Everything' includes the caster, so it can be used for repositioning in some situations, but keep in mind that enemies will usually follow in lockstep with you unless you cast it from a position where they will bump into walls instead of being able to follow you. Enemies only take collision damage if they move at least one space from this effect (so no bashing things against the sides of a 1-tile hallway) and there is a several cooldown after casting it to prevent using it repeatedly to leap across long distances. Nevertheless, it's a tool that is multipurpose - repositioning yourself, doing damage, lining up enemies together for other spells. And one that does so via unique mechanisms that will hopefully be fun to play with. (The targeter helpfully hilights which monsters will take collision damage when the spell is aimed in a given direction, rather than asking the player to count distances themselves) -------------------------------------------------------------------------------- d8d9835 | DracoOmega | 2024-03-27 00:13:15 -0230 Move Manifold Assault to level 7, attempt to buff accordingly Manifold Assault is a fun and popular spell, and having spells that interact directly with weapon combat is good, but the combination of how well it scales in lategame and how little investment is needed for many characters to pick it up by that point is somewhat flattening - it's an easy and powerful tool for a lot of characters to splash and there's little reason for those characters ever not to (especially since spellpower mattered very little for it, in practice) This commit makes Manifold Assault a lot more of a commitment to get online, but ideally leaves the spell still feeling powerful and rewarding when one does so. Compared to its previous incarnation, it now hits twice as many targets per cast (and scales to hit even more at >100 power), and can never miss. If this leaves it insuficiently exciting at its new level, additional buffs will be considered. (I have retained the 'unarmed attacks hit 1/2 as many things' for now, though I'm not sure whether or not that's necessary at level 7?). (Autumn Katana still only hits 4 things at once with its proc, though those hits will now never miss) -------------------------------------------------------------------------------- 8d86919 | DracoOmega | 2024-03-27 00:13:15 -0230 Maxwell's Portable Piledriver (new level 4 Translocations) Intended as a replacement for Manifold Assault as a lower level combat oriented translocations spell (that scales less well, but needs less combat skill to function). It automatically grabs an enemy in melee range, and propels both it and the caster in that direction until hitting another monster or a wall (or reaching max range). It does damage via collision only, but that damage is increased based on how far you've travelled. Targeting is automatic, and it will pick the enemy who has the longest unobstructed path to another enemy or wall (to prevent it being far too commonly unusable with multiple adjacent enemies, where most available targets are unproductive). The caster gets -move after using it, proportional to the distance travelled, and it cannot be recast while you have -move. This is to make it primarily useful for offensive purposes and short-term repositioning without being a good way to run away from things (it should always be a net reduction in long-distance movement speed). I realize this is similar to Vhi's in several ways, but rather than being redundant with it, I think they actively complement each other. Piledriver can target only enemies which Vhi's cannot, moves enemies when Vhi's only moves the player, and they combo well together - being able to Vhi's into an enemy to then piledrive it into a wall, or using Vhi's to escape after doing so (since it bypasses -move) -------------------------------------------------------------------------------- e6577ed | DracoOmega | 2024-03-27 00:12:53 -0230 Refactor a couple spell animations A number of spells that flashd an individual tile as part of their animation (eg: scorch) were using mostly-duplicated code to do so. This pulls that out into a separate function so that it's easier to reuse. (There are a couple other places that could *maybe* make use of this, too, but these were the most simple and obvious) -------------------------------------------------------------------------------- 583ece5 | DracoOmega | 2024-03-27 00:12:53 -0230 Slightly refactor ENCH_BOUND handling Fathomless shackles bind is directly marked instead of assuming that all non-sigil binding is from Shackles. (So that -move can be used in other context without side-effects) -------------------------------------------------------------------------------- 9d3c0f8 | SentientSupper | 2024-03-27 00:12:52 -0230 Describe spellpower effects on IMB and Gell's -------------------------------------------------------------------------------- 4c2c1c8 | SentientSupper | 2024-03-27 00:12:52 -0230 Describe collision damage for spells This includes gravitas and IMB. -------------------------------------------------------------------------------- bbb8fdb | Monkooky | 2024-03-26 09:35:26 -0700 remove some meat meat_and_reaction needed a quantifier preceeding it, unlike fruit_and_reaction. This was confusing and caused repeated errors, so we're changing it. Also sneaking in a haggisification of death yak sausage -------------------------------------------------------------------------------- 4648e6c | David Lawrence Ramsey | 2024-03-25 19:57:53 -0500 Fix spelling. -------------------------------------------------------------------------------- 1216c0e | David Lawrence Ramsey | 2024-03-25 19:56:40 -0500 Fix typo. -------------------------------------------------------------------------------- 4d5e64a | Monkooky | 2024-03-25 22:01:34 -0230 Make forms adjust hunger (#3720) [Adds support for form-specific food messages, and messages for some forms. Makes messages fall back to species-based eating for forms that lack specific messages. Also, a minor fix to spriggan fruit sampling, and a new message for draconians.] [Committer's notes: Squashed the commits together. Added a shared template position for shared lines (carnivore, shortness, inediate), for more cleanliness and further additions in the future, redid spacing, and alphabetized both entries. Commented a little further, added a line for storm form, and adjusted blade form's meat eating message a little further. Merges #3720.] -------------------------------------------------------------------------------- f1ef24b | Monkooky | 2024-03-25 22:01:34 -0230 Update orp_of_zott (#3729) Use the Charlatan's orb instead of a random randart orb, as it fits the joke of the vault better. [Committer's notes: Squashed commits together, fixed a missing FTILE assignment, scattered items a bit further away from the stair / "orb" placements, and cleaned out some unused glyph lines while I'm here. Merges #3729.] -------------------------------------------------------------------------------- 8d3e27d | David Lawrence Ramsey | 2024-03-25 16:25:24 -0500 Make Ctrl-\ wizard command work on local tiles. And add explanatory comment about the non-letter control sequences that work on console. -------------------------------------------------------------------------------- 410066a | David Lawrence Ramsey | 2024-03-25 08:04:39 -0500 Remove Jiyva's conversion penance check. Since there's no way to get penance under Jiyva anymore. -------------------------------------------------------------------------------- 5ca9e1a | David Lawrence Ramsey | 2024-03-25 07:58:52 -0500 Don't let Jiyva convert shapeshifters. Since they aren't guaranteed to stay in jelly form. Closes #3730. -------------------------------------------------------------------------------- eaf45d8 | SentientSupper | 2024-03-24 21:29:40 -0700 Describe mindburst and pain damage In monster spell description. [Committer's note: refactored.] Closes #3709. -------------------------------------------------------------------------------- 4b62edc | Nicholas Feinberg | 2024-03-24 21:21:26 -0700 Fix: remove fired missiles From the docs. (Since ranged weapons no longer use ammo.) -------------------------------------------------------------------------------- 0a3110e | Nicholas Feinberg | 2024-03-24 21:20:31 -0700 Update drop_disables_autopickup docs -------------------------------------------------------------------------------- ac1af34 | SentientSupper | 2024-03-24 21:19:35 -0700 Improve drop_disables_autopickup behavior Don't disable autopickup when dropping missiles because missiles with different brands share the same base type. -------------------------------------------------------------------------------- 984978c | SentientSupper | 2024-03-24 21:18:36 -0700 Add zot.cc to vcxproj -------------------------------------------------------------------------------- 65f7d67 | NormalPerson7 | 2024-03-24 21:17:47 -0700 Show coglins' offhand weapon in the WebTiles interface Add a second weapon line for coglins to the WebTiles interface, just below the normal weapon line and above the quiver, which is hidden in all cases where you don't have an offhand weapon equipped. This works differently from console/offline tiles, but I personally think this is how those formats should work too. (Currently, they have both weapons listed on the same line, which gives each weapon awfully little space for its properties, or in the case of artefacts, even just the name can be too long.) -------------------------------------------------------------------------------- aba3a3c | RypoFalem | 2024-03-24 20:42:31 -0700 fix: Solve the Mara Hall problem (DracoOmega named this the "Mara Hall problem" and I love that so I'm using it here.) Before this commit, when Mara summoned two illusions of himself, he would have a 1/2 chance of swapping positions with each illusion consecutively. This led to a spoilery outcome where you had better odds of attacking the real Mara if you attacked one of the Maras at the new positions as demonstrated below: Call Mara's original position 'a', the position of the first illusion 'b', and the position of the second illusion 'c'. 1st action 2nd action Result position swap(1/2) swap(1/2) c(1/4) dont(1/2) swap(1/2) c(1/4) swap(1/2) dont(1/2) b(1/4) dont(1/2) dont(1/2) a(1/4) You can see here that the probabilities of the true Mara being at position a and b are both 1/4 while the sum of the probabilities of Mara being at position c are 1/2. I don't know of any way position c and b can be distinguished, but you can usually distinguish position a because that's where Mara starts. Knowing this, you know that you have equal or greater odds of attacking the true Mara if you switch from attacking the Mara at the original position to one of the ones at the new positions. Like with the Monty Hall problem, you should always switch! This commit keeps the 1/2 swap chance for the first illusion but uses 1/3 chance for the next potential swap. (and 1/4, 1/5, 1/6, etc for subsequent swaps but Mara only makes two clones so that never happens in practice) This evens out the odds as demonstrated by the new table: 1st action 2nd action Result position swap(1/2) swap(1/3) c(1/6) dont(1/2) swap(1/3) c(1/6) swap(1/2) dont(2/3) b(1/3) dont(1/2) dont(2/3) a(1/3) Now the two c's sum to 1/3 and all three positions have an equal chance of containing the true Mara! [Committer's note: refactored.] Closes #3722. -------------------------------------------------------------------------------- 29eef42 | David Lawrence Ramsey | 2024-03-24 22:12:33 -0500 Add placeholder tile: equipped Charlatan's Orb. It's player/hand2/orb2.png with the palette adjusted to better resemble item/armour/artefact/urand_charlatan.png. -------------------------------------------------------------------------------- 4cabd76 | Edgar A. Bering IV | 2024-03-24 17:27:28 -0700 move putrid mouths to lightred in console Having spectral things and putrid mouths on the same glyph caused a variety of legibility problems. Lightred W is free currently and has a rough alignment with the tile, so let's go with that. -------------------------------------------------------------------------------- 0e82a10 | regret-index | 2024-03-24 18:47:53 -0230 Add sticky flame to Hints Mode (PleasingFungus) While moving around or moving into water is already mentioned in the earliest user's description, the status's descriptions, and all of the player and monster spells' descriptions, we clearly haven't emphasized it enough for many people to have noticed the change. While it'd be quite intrusive to mention it whenever one's lit on fire (since it'd bleed across multiple console lines), people in hints mode are already getting a large amount explanation attached to various matters, and bombardier beetles are quite early, so, it's probably a good idea to make sure at least those newcomers get told about this very directly. -------------------------------------------------------------------------------- 6c632cb | regret-index | 2024-03-24 18:30:23 -0230 A few more monster-based skill titles (yrdzrfxndfvh), some tidying With some minor adjustments, this takes some of the titles that weren't weaker monsters, overly jokey in tone, or weird implications of changing physiologies on non-Draconians, from #3712. * 27 Fighting Humans of Makhleb - the Hell Knight * 27 Unarmed Octopodes - the Crusher * 27 Armour Trolls - the Iron Troll * 27 Shields Spriggans - the Defender * 27 Fire Magic Gargoyles - the Molten * 27 Invocations Draconians of TSO / Ely / Zin - the Pearl Dragon These should be relatively straightforwardly understandable each. "Crusher" is a little silly still as a reference to a removed monster, but it's probably fine in the same way all the Felid unarmed titles shift away from the regular unarmed titles also. (While I'm here, I also sorted skills.cc's list of special titles to follow the in-game display order of skills and the historical / enum order of when species were added, rather than the orders of whenever people added these.) -------------------------------------------------------------------------------- 74a9d55 | regret-index | 2024-03-24 17:23:13 -0230 Mildly brighten up the obsidian bat tile Various people have complained the tile doesn't contrast enough against the relatively dark floors of the Orcish Mines. While obsidian bats are kind of inherently a dark material with a near-black other use of it currently present, a little bit of lightening this up should help without losing much of the flavour. -------------------------------------------------------------------------------- d708a3a | David Lawrence Ramsey | 2024-03-24 14:12:44 -0500 Add Charlatan's Orb status description. -------------------------------------------------------------------------------- 456b196 | David Lawrence Ramsey | 2024-03-24 14:12:44 -0500 Add inscription for Charlatan's Evocations boost. And order the descriptions of the orb's capabilities properly. -------------------------------------------------------------------------------- f510db4 | David Lawrence Ramsey | 2024-03-24 14:12:44 -0500 Make the Charlatan's Orb actually glow. -------------------------------------------------------------------------------- 240068c | Monkooky | 2024-03-24 14:12:44 -0500 Add unrand Charlatan's Orb Adds a new unrand which boosts evocations, but delays teleports and reduces stealth in the same way as the Orb of Zot. This unrand serves two purposes besides thematic appeal; firstly it provides a preview of the less obvious effects of the Orb status, and secondly provides an equipment based means of boosting evocables. [Committer's notes: Fixed punctuation and formatting, and did checkwhite.] -------------------------------------------------------------------------------- b728d02 | David Lawrence Ramsey | 2024-03-22 22:57:31 -0500 Fix capitalisation. -------------------------------------------------------------------------------- 74ea0c1 | David Lawrence Ramsey | 2024-03-22 22:38:21 -0500 Fix comment typo. -------------------------------------------------------------------------------- 4c8b870 | David Lawrence Ramsey | 2024-03-22 19:16:16 -0500 Remove obsolete reference in Orb status. The Orb of Zot hasn't interfered with Passage of Golubria since 1899a4c4. -------------------------------------------------------------------------------- 315f82d | David Lawrence Ramsey | 2024-03-22 06:32:58 -0500 Fix punctuation. -------------------------------------------------------------------------------- 0968bab | Kyle Rawlins | 2024-03-21 12:57:48 -0400 fix: further webtiles startup sequencing issues In particular, webtiles.pid has to be written after shed_privileges. I'm fairly confused because I thought I'd duplicated the order exactly with this part, but I guess not. -------------------------------------------------------------------------------- 41daaf4 | Kyle Rawlins | 2024-03-21 12:40:57 -0400 fix: missing `self.` -------------------------------------------------------------------------------- c80f89d | Kyle Rawlins | 2024-03-21 12:37:09 -0400 fix: server startup sequencing issues The previous code was accidentally deleting pidfile before the startup step.... -------------------------------------------------------------------------------- 06071df | Kyle Rawlins | 2024-03-21 12:37:09 -0400 Revert "fix: move `shed_privileges` later in webtiles setup" The cert problem I was worried about isn't fixed by this, and moreover, shedding privileges so late on a new install results in a bunch of files owned by root that shouldn't be. This reverts commit b001dabdc76911c4204983db9db46ef477979ecf. -------------------------------------------------------------------------------- 7a0cf5b | Kyle Rawlins | 2024-03-21 12:37:09 -0400 fix: improve logging message -------------------------------------------------------------------------------- 68839bf | David Lawrence Ramsey | 2024-03-21 11:14:47 -0500 Reword Ash cursed item desc. Cursed items normally can't be enchanted, since they become artefacts, but now we have Mountain Dwarves, who can enchant artefacts. -------------------------------------------------------------------------------- 8da92d5 | David Lawrence Ramsey | 2024-03-21 09:16:09 -0500 Remove now-unused now_is_morning() function. -------------------------------------------------------------------------------- 23d0647 | David Lawrence Ramsey | 2024-03-21 08:56:28 -0500 Remove now-unneeded #include (yrdzrfxndfvh). skills.cc only needed misc.h for now_is_morning(), which was only used for some Meteoran titles, and now Meteorans are gone. Note that now_is_morning() is currently unused by anything. -------------------------------------------------------------------------------- 524b7c7 | Kyle Rawlins | 2024-03-21 09:24:50 -0400 fix: quiet a dgl-build-specific warning -------------------------------------------------------------------------------- 766f10f | SentientSupper | 2024-03-21 08:18:37 -0500 Clear dimensional bullseye when apostle yields Include ENCH_BULLSEYE_TARGET in timeout_enchantments. -------------------------------------------------------------------------------- 4d9a32f | SentientSupper | 2024-03-21 08:08:40 -0500 Make allies avoid pressure plate traps Consider pressure plates to be bad for the player because they spawn / uncage monsters that attack the player so that allies avoid stepping on them. -------------------------------------------------------------------------------- 303fdf7 | David Lawrence Ramsey | 2024-03-21 07:55:35 -0500 Adjust Blork the orc description/dialogue. His rainbow-coloured suspenders were a magical cast-off from a wizard, and they transferred power to him beyond that of an ordinary orc. But they also made him a little mad, and colour-obsessed. -------------------------------------------------------------------------------- b0e0dd9 | David Lawrence Ramsey | 2024-03-21 07:53:24 -0500 Remove Jiyva's no-hurting-jellies conduct. -------------------------------------------------------------------------------- 93c155c | David Lawrence Ramsey | 2024-03-21 07:53:24 -0500 Remove Fedhas' no-hurting-friends conduct. Since they protect plants from harm, and the only friends you have under Fedhas, that they care about, are plants. -------------------------------------------------------------------------------- a5f95a5 | David Lawrence Ramsey | 2024-03-21 07:53:24 -0500 Make god protection work even with manual swings. This affects Fedhas worshippers with plants, Hep worshippers with ancestors, and Jiyva worshippers with slimes. -------------------------------------------------------------------------------- 95e1662 | David Lawrence Ramsey | 2024-03-20 19:44:27 -0500 Fix punctuation. -------------------------------------------------------------------------------- fa783ce | David Lawrence Ramsey | 2024-03-20 14:11:40 -0500 Fix monster info bot compilation (Ge0ff) -------------------------------------------------------------------------------- ee37984 | David Lawrence Ramsey | 2024-03-20 12:13:11 -0500 Remove prototype of nonexistent function. -------------------------------------------------------------------------------- 5c25360 | David Lawrence Ramsey | 2024-03-20 11:51:25 -0500 Fix spacing. -------------------------------------------------------------------------------- 7cbadc2 | David Lawrence Ramsey | 2024-03-20 11:45:53 -0500 Fix reversed resists/damage message order. For cloak of flames, passive freeze, and foul flame melee attacks. -------------------------------------------------------------------------------- b59af49 | David Lawrence Ramsey | 2024-03-20 11:41:03 -0500 Constify variable. -------------------------------------------------------------------------------- f47b1a0 | Kyle Rawlins | 2024-03-20 09:39:50 -0400 docs: fix an obsolete comment in config.py (To be honest, I'm not entirely sure if this parameter would *ever* have an effect on webtiles, from reading tornado code.) -------------------------------------------------------------------------------- 3d70bf0 | David Lawrence Ramsey | 2024-03-20 07:33:52 -0500 Print apostle damage numbers properly (Ge0ff) When they're bad, print them before resetting them to zero. -------------------------------------------------------------------------------- fc315c9 | wheals | 2024-03-19 22:46:22 +0200 fix: the build -------------------------------------------------------------------------------- 60f1b21 | wheals | 2024-03-19 22:43:35 +0200 Try to really fix apostle damage tracking (Ge0ff) I still have no idea how this slipped past the code that was supposed to be fixing it up, but once it did the tag minor version check is worthless. -------------------------------------------------------------------------------- c76ea14 | Kyle Rawlins | 2024-03-19 15:53:42 -0400 fix: don't ignore `max_lobby_idle_time` setting The accidental comparison caused this value to get set to 1, so lobby timeouts were just always using `connection_timeout`. -------------------------------------------------------------------------------- 9ed4220 | Kyle Rawlins | 2024-03-19 15:29:06 -0400 feat: webtiles-internal https redirect option This option lets you e.g. redirect http://server:8080 to https://server:8443. There's various external ways of doing this, but it's convenient when running webtiles on custom ports to simply be able to set the redirect in webtiles options. Note: after spending a bunch of time on this, I've concluded it's essentially completely impossible within tornado to redirect a http to https connection on the same port (or vice versa). It's a bit unfortunate, as this would help with a bunch of scenarios that browsers auto-manage when using 80/443, but it is what it is. See https://github.com/tornadoweb/tornado/issues/523 for more info. Also, tornado just hangs when you send a https connection to a http port, apparently before the Application code gets access; I have no idea why this is. But probably official servers will soon no longer use http ports at all, so maybe not a worry. -------------------------------------------------------------------------------- 50abb8a | Kyle Rawlins | 2024-03-19 14:44:33 -0400 fix: missing tuple wrapper Also, slightly tweak default config -------------------------------------------------------------------------------- 3ef9c6c | David Lawrence Ramsey | 2024-03-19 11:12:09 -0500 Fix punctuation. -------------------------------------------------------------------------------- 234660e | David Lawrence Ramsey | 2024-03-19 11:11:19 -0500 Fix wording. -------------------------------------------------------------------------------- 5d9b134 | David Lawrence Ramsey | 2024-03-19 09:58:22 -0500 Make effect/iron_shot_7.png 32x32. Since it's supposed to be a horizontal flip of iron_shot_1.png. -------------------------------------------------------------------------------- 829d17d | Kyle Rawlins | 2024-03-19 10:32:09 -0400 feat: webtiles cli support for an ssl port This is primarily to facilitate --live-debug tests. By its nature, I haven't been able to test this commit locally beyond ensuring that it doesn't break normal startup. -------------------------------------------------------------------------------- b001dab | Kyle Rawlins | 2024-03-19 10:16:20 -0400 fix: move `shed_privileges` later in webtiles setup SSL cert keys may be conventionally stored in a way that needs privileges to access by default; don't force server admins to tweak permissions on this file when copying into chroot. -------------------------------------------------------------------------------- d9b930b | Kyle Rawlins | 2024-03-19 10:14:53 -0400 fix: missing comma -------------------------------------------------------------------------------- dd6cb82 | Aliscans | 2024-03-19 08:43:42 -0500 Change the spelling of some words to Australian English. Change a few places where a word used a spelling which is not spelt correctly according to https://www.australian-dictionary.com.au/wordcheck/. This only changes things in places where the spellings may be displayed to the user. I include the documentation in this. I haven't changed the changelog or doc/develop, or any of the contrib stuff. This changes: channeling -> channelling dueling -> duelling offense -> offence defense -> defence skillfull/skillfully -> skilful/skilfully willful -> wilful -------------------------------------------------------------------------------- 362cfca | Edgar A. Bering IV | 2024-03-18 21:53:14 -0700 docs: clarify the prohibition against wishes (Alkali Man) This sentence in the manual aims to explain why acquirement does not offer wishes, but the wording is confusing for people not coming to crawl from nethack. Re-write it to make it in the positive framing about the randomization of acquirement instead. -------------------------------------------------------------------------------- a6a9c15 | orjb1 | 2024-03-18 23:54:01 -0230 Add guarded unrand Arga vault (#3702) [Committer's note: Recoloured the metal in tiles, didn't do much else. Quicksilvers are a good fit together with Arga (fast, non-elemental, Will+ on the axe and scales both), so a straightforward vault's plenty fine. Closes #3702.] --------------